|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2003/11/18 11:46:16 |
标题: |
谁有扑捉特定进程句柄的程序代码,让小弟学习学习 |
浏览:1994 |
|
加入我的收藏 |
楼主: |
谁有扑捉特定进程句柄的程序代码,让小弟学习学习
----------------------------------------------
- |
作者: |
zizii (高高高级馒头) |
★☆☆☆☆ |
-
|
神秘会员 |
|
2003/11/18 12:32:08 |
1楼: |
捕捉什么? http://www.2ccc.com/article.asp?articleid=279 看看这个行不行。
----------------------------------------------
维护世界和平,共创美好盒子。
|
作者: |
|
2003/11/18 16:31:14 |
2楼: |
一楼给的真是个好东东,谢谢了 以后多指点
----------------------------------------------
-
|
作者: |
|
2003/11/18 16:35:38 |
3楼: |
不过我想知道怎么得到一个启动程序的句柄,并对它进行操作
----------------------------------------------
-
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/18 16:46:40 |
4楼: |
启动程序的句柄???不太明白你的意思啊!
----------------------------------------------
|
作者: |
|
2003/11/18 17:25:57 |
5楼: |
sorry我的意思是,当一个程序一启动,我就可以得到它的句柄,说白了就是一个后台监控程序,我想知道怎样才能在后台不断检测一个程序是否启动,并对它进行操作。
----------------------------------------------
-
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/18 17:28:34 |
6楼: |
啊,偶想的苯办法就是用TIMER 控件 不停的扫描 刷新 进程列表!
----------------------------------------------
|
作者: |
|
2003/11/18 17:38:14 |
7楼: |
这样啊,不过有点浪费资源,但我想不出更好的办法,你有代码吗?
----------------------------------------------
-
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2003/11/19 10:44:18 |
8楼: |
偶是用C++BUILDER写的 不是太完善,对不起啊!
void __fastcall TTaskMon::ShowProcess(void) { lvwProcess->Items->Clear(); HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // if(hSnapshot==(HANDLE)-1) // { // Application->MessageBox("程序运行失败", "错误", // MB_OK+ MB_ICONEXCLAMATION); // return; // } StatusBar1->Panels->Items[0]->Text = "进程"; StatusBar1->Panels->Items[1]->Text = "选择一进程可以查看它调用的模块信息"; char Hex[14]; TListItem *ListItem; PROCESSENTRY32 pe; AnsiString FileName; AnsiString File; AnsiString Path; pe.dwSize=sizeof(pe); for(int i=Process32First(hSnapshot,&pe);i;i=Process32Next(hSnapshot,&pe)) { FileName=pe.szExeFile; if (FileName.Pos('\\')==0) { File=FileName; Path=FileName; } else { for(int i=FileName.Length();i>0;i--) if(FileName.IsPathDelimiter(i)) { File=FileName.SubString(i+1,FileName.Length()); Path=FileName.SubString(1,i); break; } } /* typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; DWORD th32ParentProcessID; // this process's parent process LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; CHAR szExeFile[MAX_PATH]; // Path } typedef struct tagTHREADENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ThreadID; // this thread DWORD th32OwnerProcessID; // Process this thread is associated with LONG tpBasePri; LONG tpDeltaPri; DWORD dwFlags; }
BOOL WINAPI Thread32First( HANDLE hSnapshot, LPTHREADENTRY32 lpte );
BOOL WINAPI Thread32Next( HANDLE hSnapshot, LPTHREADENTRY32 lpte ); */ ListItem= lvwProcess->Items->Add(); ListItem->Caption = File; // 文件名 { intToHex(pe.th32ProcessID,Hex); ListItem->SubItems->Add(Hex); // 进程ID } { AnsiString Tmp(pe.pcPriClassBase); ListItem->SubItems->Add(Tmp); // 进程优先权 } { intToHex(pe.th32ParentProcessID,Hex); ListItem->SubItems->Add(Hex); // 父进程ID } { AnsiString Tmp(pe.cntThreads); ListItem->SubItems->Add(Tmp); // 创建线程个数 } // ListItem->SubItems->Add(Path); // 文件路径 { AnsiString Tmp((int)pe.th32ProcessID); ListItem->SubItems->Add(Tmp); // 进程ID } } CloseHandle(hSnapshot); }
----------------------------------------------
|
作者: |
|
2003/11/19 15:29:09 |
9楼: |
这么客气,谢谢你了
----------------------------------------------
-
|
|