請問一個findwindow問題 |
答題得分者是:cashyy
|
markchung123
一般會員 發表:2 回覆:0 積分:0 註冊:2005-05-11 發送簡訊給我 |
|
wpf
一般會員 發表:11 回覆:22 積分:6 註冊:2002-04-14 發送簡訊給我 |
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
您好!
如果要像工作管理員一樣,來取得程序id可以參考下列程式:
//取得執行緒 void __fastcall TForm1::Button1Click(TObject *Sender) { PROCESSENTRY32 *ProcessEntry32=new PROCESSENTRY32; HANDLE AHandle; LPWSTR APath; bool isFound; int i; String p; i=0; ListBox1->Items->Clear(); AHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); isFound = true; try { ProcessEntry32->dwSize = sizeof(PROCESSENTRY32); isFound = Process32First(AHandle, ProcessEntry32); while(isFound) { OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, ProcessEntry32->th32ProcessID); WinHandle[i ] = ProcessEntry32->th32ProcessID; p = ProcessEntry32->szExeFile; ListBox1->Items->Add(p); isFound = Process32Next(AHandle, ProcessEntry32); } } catch ( ... ) { } } //關閉執行緒 void __fastcall TForm1::Button1Click(TObject *Sender) { HANDLE AhProcess; DWORD test; test=WinHandle[ListBox1->ItemIndex]; AhProcess = OpenProcess(PROCESS_ALL_ACCESS, true, test); TerminateProcess(AhProcess, 0); ListBox1->Refresh(); } //======================================================== //如果您要用calc.exe來找的話就改成: void __fastcall TForm1::Button1Click(TObject *Sender) { PROCESSENTRY32 *ProcessEntry32=new PROCESSENTRY32; HANDLE AHandle; LPWSTR APath; bool isFound; int i=0; String p,h; AHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); isFound = true; try { ProcessEntry32->dwSize = sizeof(PROCESSENTRY32); isFound = Process32First(AHandle, ProcessEntry32); while(isFound) { OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, ProcessEntry32->th32ProcessID); WinHandle[i ] = ProcessEntry32->th32ProcessID; p = ProcessEntry32->szExeFile; if(p == "calc.exe") { HANDLE hProcess,AhProcess; DWORD ProcessID; /* GetWindowThreadProcessId函式,取得視窗執行緒或處理程序之ID */ GetWindowThreadProcessId(Application->Handle,&ProcessID); AhProcess = OpenProcess(PROCESS_ALL_ACCESS, true, ProcessID); delete ProcessEntry32; //關閉前先釋放ProcessEntry32結構 TerminateProcess(AhProcess, 0); } isFound = Process32Next(AHandle, ProcessEntry32); } } catch ( ... ) { } }發表人 - cashyy 於 2005/08/18 22:29:54 發表人 - cashyy 於 2005/08/18 22:33:32 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |