有關於IsHungAppWindow函式宣告問題一問 |
尚未結案
|
clio4177
一般會員 發表:28 回覆:21 積分:9 註冊:2002-07-17 發送簡訊給我 |
各位大大: 因目前小弟正在寫一個偵測應用程式"無回應"的程式,在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 發送簡訊給我 |
引言: 各位大大: 因目前小弟正在寫一個偵測應用程式"無回應"的程式,在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 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |