有谁研究过《Windows核心编程》里的第22章的LastMsgBoxInfo程序?
sdcer 2006-01-19 08:12:16 这个程序是windows api挂接的,看了文字介绍,我大概明白了的原理和操作过程。
但exe模块中有一些代码,我太明白的,而且程序运行时,感觉也不正确,特向各位请教。
1.
int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {
DWORD dwThreadId = 0;
#ifdef _DEBUG
HWND hwnd = FindWindow(NULL, TEXT("Untitled - Paint"));
dwThreadId = GetWindowThreadProcessId(hwnd, NULL);
#endif
LastMsgBoxInfo_HookAllApps(TRUE, dwThreadId);
DialogBox(hinstExe, MAKEINTRESOURCE(IDD_LASTMSGBOXINFO), NULL, Dlg_Proc);
LastMsgBoxInfo_HookAllApps(FALSE, 0);
return(0);
}
上面的代码,我不太明白:HWND hwnd = FindWindow(NULL, TEXT("Untitled - Paint"));
为什么要找一个标题为"Untitled-Paint"的窗口?这个窗口有什么意义吗?是谁建立的?
我在直接运行时,好象hwnd一直返回0,dwThreadId也一直是0。我想,如果只是想为
LastMsgBoxInfo_HookAllApps()函数的第二个参数赋值0,可以直接赋啊,没必要这么麻烦啊。不明白为什么要这么做。
2.这个程序(包括exe、dll),在安装了最新的SDK后,可以编译,可执行程序和dll程序都可以成功编译,但直接运行这个LastMsgBoxInfo.exe,窗口会一闪而过。根本不象文字部分描述的那样。经过跟踪,执行DialogBox(hinstExe, MAKEINTRESOURCE(IDD_LASTMSGBOXINFO), NULL, Dlg_Proc)时,提示"Stack overflow....",这是怎么回事呢?
有谁研究过这个程序吗?请指点一二、谢谢了!!!