全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3029
推到 Plurk!
推到 Facebook!

如何取某一程式之Process ?

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-18 11:23:17 IP:61.218.xxx.xxx 未訂閱
請教各位前輩 如何取某一程式之Process ? 如在程式中使用 GetCurrentProcess() 可取得目前程式的 Process 但要如何用取得某一執行中程式的Process? 目前只知取得 Thread 方法 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°.☆° .‧°∴°.° .‧°∴°. .‧°∴°.☆° .‧°∴°.° .‧°∴°..‧°∴°.☆
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-19 09:36:10 IP:60.248.xxx.xxx 未訂閱
不曉得,這個是不是你要的 GetProcessIdOfThread
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-19 17:55:49 IP:61.218.xxx.xxx 未訂閱
引言: 不曉得,這個是不是你要的 GetProcessIdOfThread
謝謝前輩!! 不好意思,我發現我不知如何取 Thread , 目前是用findwindow()取得別的程式的 Handle 但不知如何轉為 Thread 及 Process ? 我用GetWindowThreadProcessId(application.Handle , nil) 好像也不對?? 跟GetCurrentProcess()結果不一樣?
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-19 19:00:47 IP:61.218.xxx.xxx 未訂閱
其實我的目的是要調整某一程式的優先權(CPU) 如下用 SetPriorityClass() // 將 Process 的 Priority 調高 SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-20 10:14:18 IP:60.248.xxx.xxx 未訂閱
OK 我搞清楚了,不過,有點複雜,不曉得有沒有比較簡單的方法 先說一下流程,我沒 Try 也不知道可不可以用就是了 以 SetPriorityClass 來說的話,要傳進去的是 Process Handle 而 FindWindow 傳回來的是 Window Handle 所以我們要想辦法把 Window Handle 轉成 Process Handle 再來以 GetWindowThreadProcessID 來講,它的參數有二 前為 Window Handle 後為傳回來的 ProcessID 所以,你只要後面給它傳回值(不設成 nil) GetWindowThreadProcessID( hWin, ProcessID) 這樣就轉成 ProcessID,不過,ProcessID 不是 Process Handle 所以還要再一個步驟 用 OpenProcess(PROCESS_SET_INFORMATION, 0, ProcessID) 就會傳回來 Process Handle 讓你可以放到 SetPriorityClass 去設定優先權 邏輯上大致是這麼做,如果可行的話,請告訴我一些 就麻煩你測試看看了
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-20 13:14:46 IP:61.218.xxx.xxx 未訂閱
謝謝前輩 測試後己可以成功設定如下: procedure TForm1.Button1Click(Sender: TObject); var hWin:HWND; ProcessID: DWORD ; Process:THandle ; begin hWin:= findwindow(nil, Pchar('未命名 - 記事本')) ; GetWindowThreadProcessID( hWin, ProcessID) ; Process:= OpenProcess(PROCESS_SET_INFORMATION,false, ProcessID); SetPriorityClass( Process,REALTIME_PRIORITY_CLASS) ; end; ---------------------------------------------------- 但 謂何無法取得GetPriorityClass() 會一定傳回0 如下,不知那錯了?? procedure TForm1.Button2Click(Sender: TObject); var hWin:HWND; ProcessID: DWORD ; Process:THandle ; begin hWin:= findwindow(nil, Pchar('未命名 - 記事本')) ; GetWindowThreadProcessID( hWin, ProcessID) ; Process:= OpenProcess(PROCESS_SET_INFORMATION,false, ProcessID); showmessage(inttostr( GetPriorityClass( Process))) ; end; 謝謝前輩.....
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-20 14:11:42 IP:60.248.xxx.xxx 未訂閱
引言: Process:= OpenProcess(PROCESS_SET_INFORMATION,false, ProcessID);
改成 Process := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID); 順便列出他們的值 #define NORMAL_PRIORITY_CLASS 0x00000020 #define IDLE_PRIORITY_CLASS 0x00000040 #define HIGH_PRIORITY_CLASS 0x00000080 #define REALTIME_PRIORITY_CLASS 0x00000100 所以,你應該會得到 256
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-21 13:11:02 IP:61.218.xxx.xxx 未訂閱
引言:
引言: Process:= OpenProcess(PROCESS_SET_INFORMATION,false, ProcessID);
改成 Process := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID); 順便列出他們的值 #define NORMAL_PRIORITY_CLASS 0x00000020 #define IDLE_PRIORITY_CLASS 0x00000040 #define HIGH_PRIORITY_CLASS 0x00000080 #define REALTIME_PRIORITY_CLASS 0x00000100 所以,你應該會得到 256
原來是要改參數,,,我可要多學學英語了 萬份感謝
系統時間:2024-05-06 20:00:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!