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

有關於IsHungAppWindow函式宣告問題一問

尚未結案
clio4177
一般會員


發表:28
回覆:21
積分:9
註冊:2002-07-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-12 19:52:25 IP:163.28.xxx.xxx 未訂閱
各位大大: 因目前小弟正在寫一個偵測應用程式"無回應"的程式,在K.Top網站上只找到一些大大回應的範例參考,其中如下這一篇文章中 http://delphi.ktop.com.tw/topic.php?topic_id=40211 程式碼如下: typedef BOOL (*ISHUNGAPPWINDOW)(HWND); <---問題1 void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hWnd= NULL; hWnd= FindWindow(NULL, "Noresponse"); if (hWnd != NULL) { HINSTANCE hDll= NULL; ISHUNGAPPWINDOW IsHungAppWindow= NULL; <---問題2 hDll= LoadLibraryEx("user32.dll", NULL, 0); if(hDll) { IsHungAppWindow= (ISHUNGAPPWINDOW) GetProcAddress(hDll, "IsHungAppWindow"); <---問題3 if(IsHungAppWindow) { if((IsHungAppWindow)(hWnd)) { DWORD dwProcessId= 0; GetWindowThreadProcessId(hWnd, &dwProcessId); HANDLE hProcess= NULL; hProcess= OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); if(hProcess) { TerminateProcess(hProcess, 0); CloseHandle(hProcess); } } } FreeLibrary(hDll); } } } 有提到IsHungAppWindow函式的使用,但是其程式碼中有部分宣告小弟不是粉清楚其為何如此定義,可否請各位大大代為解釋一下小弟的問題: 1.為何要將typedef BOOL (*ISHUNGAPPWINDOW)(HWND)定義成如此型態?代表何 意義? 2.根據MSDN對定義IsHungAppWindow如下: BOOL IsHungAppWindow(HWND hWnd); 在上述程式碼中又將其宣告成ISHUNGAPPWINDOW IsHungAppWindow,其目的及意義何在? 3.根據MSDN對定義GetProcAddress如下: FARPROC GetProcAddress(HMODULE hModule,LPCSTR lpProcName); 為何又要將GetProcAddress函式另外轉成(ISHUNGAPPWINDOW) GetProcAddress(hDll, "IsHungAppWindow")型態?有何意義?在GetProcAddress函式的第二個參數中填入"IsHungAppWindow"又代表何意思? 小弟已經看到霧煞煞,煩請各位大大幫忙解說一下,謝謝!! 發表人 - taishyang 於 2003/12/12 20:03:57
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-13 00:42:27 IP:61.221.xxx.xxx 未訂閱
引言: 各位大大: 因目前小弟正在寫一個偵測應用程式"無回應"的程式,在K.Top網站上只找到一些大大回應的範例參考,其中如下這一篇文章中 http://delphi.ktop.com.tw/topic.php?topic_id=40211 程式碼如下: typedef BOOL (*ISHUNGAPPWINDOW)(HWND); <---問題1 void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hWnd= NULL; hWnd= FindWindow(NULL, "Noresponse"); if (hWnd != NULL) { HINSTANCE hDll= NULL; ISHUNGAPPWINDOW IsHungAppWindow= NULL; <---問題2 hDll= LoadLibraryEx("user32.dll", NULL, 0); if(hDll) { IsHungAppWindow= (ISHUNGAPPWINDOW) GetProcAddress(hDll, "IsHungAppWindow"); <---問題3 if(IsHungAppWindow) { if((IsHungAppWindow)(hWnd)) { DWORD dwProcessId= 0; GetWindowThreadProcessId(hWnd, &dwProcessId); HANDLE hProcess= NULL; hProcess= OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId); if(hProcess) { TerminateProcess(hProcess, 0); CloseHandle(hProcess); } } } FreeLibrary(hDll); } } } 有提到IsHungAppWindow函式的使用,但是其程式碼中有部分宣告小弟不是粉清楚其為何如此定義,可否請各位大大代為解釋一下小弟的問題: 1.為何要將typedef BOOL (*ISHUNGAPPWINDOW)(HWND)定義成如此型態?代表何 意義? 因為這是動態連結函式庫的方式,因此要先在你的程式碼裡面宣告要呼叫函式的 原型,不然,編譯器會不知道你要呼叫什麼東西,像以上這樣宣告,代表你宣告 了一個函式,它只有一個參數,型態為 HWND,並有傳回值 BOOL 2.根據MSDN對定義IsHungAppWindow如下: BOOL IsHungAppWindow(HWND hWnd); 在上述程式碼中又將其宣告成ISHUNGAPPWINDOW IsHungAppWindow,其目的及意義何在? 這樣子寫,代表 IsHungAppWindow 就是剛才宣告函式的指標 3.根據MSDN對定義GetProcAddress如下: FARPROC GetProcAddress(HMODULE hModule,LPCSTR lpProcName); 為何又要將GetProcAddress函式另外轉成(ISHUNGAPPWINDOW) GetProcAddress(hDll, "IsHungAppWindow")型態?有何意義?在GetProcAddress函式的第二個參數中填入"IsHungAppWindow"又代表何意思? GetProcAddress 的第一個參數是之前由 DLL 所取得的 Handle,第二個參數代 表你要取得這個 DLL 裡面特定名稱函式的位址,得到了位址才能夠呼叫它 小弟已經看到霧煞煞,煩請各位大大幫忙解說一下,謝謝!! 建議你利用本站的搜尋功能,查有關 DLL 的靜態連結與動態連結的方式,應該 會有更多的收獲;目前一般市面上的電腦書也應該多少有提到,多花時間去書店 看看吧
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-05-04 2:01:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!