子类化桌面窗口,explorer进程就崩溃.内存访问错误。
- C/C++ code
case DLL_PROCESS_ATTACH: { GetModuleFileName(NULL, FileName, sizeof(FileName)); if (strstr(FileName, "explorer.exe")) { HWND hwnd = FindWindow("Progman", "Program Manager"); hwnd = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", NULL); hwnd = FindWindowEx(hwnd, NULL, "SysListView32", "FolderView"); OldMsgProc = (WNDPROC)SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG)newMsgProc); } }LRESULT CALLBACK newMsgProc(HWND hDeskTop, UINT message, WPARAM wParam, LPARAM lParam){ switch(message) { case LVM_SETITEMPOSITION32: case LVM_SETITEMPOSITION: return 0; default: break; } //注释掉swithc语句块一样会崩溃 return CallWindowProc(OldMsgProc, hDeskTop, message, wParam, lParam);}即使新窗口消息过程不做任何事,只
- C/C++ code
return CallWindowProc(OldMsgProc, hDeskTop, message, wParam, lParam);
调试两三次explorer进程就会崩溃。
[解决办法]