Wie zögere ich WM_DESTROY heraus?
-
Hi
Ich habe eine dll geschrieben in der ich mit SetWindosHookEx WH_CBT hooke um auf das Schließen eines bestimmten Fensters reagieren zu können.
Wenn dieses Fenster dabei ist geschlossen zu werden muss ich ein paar Operationen ausführen bevor es geschlossen wird.//Meine DLL #include <vcl.h> #include <windows.h> #pragma hdrstop //--------------------------------------------------------------------------- HHOOK ghhookKB; HINSTANCE ghInst; #pragma argsused #include "Operationen.cpp" //--------------------------------------------------------------------------- BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved) { ghInst = hinstDLL; return 1; } //--------------------------------------------------------------------------- extern "C" __declspec(dllexport) __stdcall void SetHook(void); extern "C" __declspec(dllexport) __stdcall void RemoveHook(void); extern "C" __declspec(dllexport) __stdcall DWORD CheckMes(int, WORD,LONG); //--------------------------------------------------------------------------- void __stdcall SetHook(void) { HOOKPROC lpfnHookProc = NULL; lpfnHookProc = GetProcAddress(GetModuleHandle("WndHook.dll"),"CheckMes"); ghhookKB = SetWindowsHookEx(WH_CBT, lpfnHookProc, ghInst, NULL); } //--------------------------------------------------------------------------- void __stdcall RemoveHook(void) { UnhookWindowsHookEx(ghhookKB); } //--------------------------------------------------------------------------- DWORD __stdcall CheckMes(int nCode, WORD wParam, LONG lParam) { const int size=100; char ctype[size]; RealGetWindowClass((HWND)wParam,ctype,size); if((strcmpi(ctype,"WindowClass")!=0) || (nCode < 0)) return CallNextHookEx(ghhookKB, nCode, wParam, lParam); if(nCode==HCBT_DESTROYWND) Operationen(); return CallNextHookEx(ghhookKB, nCode, wParam, lParam); }Das hat zunächst auch ganz gut geklappt. Allerdings sind einige neue Operationen hinzugekommen und jetzt habe ich das Problem, dass zwar alle korrekt abgearbeitet werden aber wohl zu langsam.
Das Fenster wird geschlossen bevor alle Operationen durch sind.
Jetzt bin ich am überlegen wie man das ändern könnte. Ich habe schon versucht meinen Code zu optimieren aber damit komme ich nicht mehr weiter.
Am besten wäre es glaube ich mit PeekMessage die WM_DESTROY Message aus der Queue zu löschen und nach der Abarbeitung wieder zu posten.
Allerdings sind bis jetzt alle meine Versuche gescheitert.Hat vielleicht einer eine Idee?