EnumChildWindows schießt mein Programm ab
-
Hallo,
ich hab ein komisches Problem. Ich nutze eine DLL um auf native Windows Sachen zuzugreifen (in C geschrieben, nicht C++). Mein Hauptprogramm läuft in Java. Soweit so gut. Ich habe nun eine Funktion, die ein bestimmtes Handle sucht, von dem ich aber nicht den gesamten Titel kenne. Deshalb kann ich nicht FindWindowEx benutzen. Ich genutze dafür "EnumChildWindows" und überprüfe dann alle Handles (die titel) über Substrings, ob nun das richtige Fenster gefunden wurde. Falls ja, soll darauf ein Mausklick durchgeführt werden. Das ganze klappt auch, nur in unregelmäßigen abständen, stürzt die DLL ab und dadurch auch mein ganzes Programm. Ich habe jetzt hardcore debugging gemacht und bin auf folgendes gestoßen. Ich rufe die Problematisch Funktion testweise ca 200 mal auf. Mit dem EnumChildwindows aufruf, crasht mein Tool IMMER und ohne das NIE. Es liegt also daran.
Ich zeig mal meine Funktion:
//testweise habe ich ALLES auskommentiert in dieser Funktion, die macht quasi nichts, ausser durchlaufen BOOL FindDialog(HWND hWnd, long lParam) { return FALSE; } [...] //das hier rufe ich testweise in einer Schleife grade 200 mal auf. "h" ist auch nicht NULL, das stelle ich vorher sicher. EnumChildWindows(h, (WNDENUMPROC) FindDialog, 0); [..]So, jetzt meine Frage. Was ist da los?
Kommentiere ich den Aufuf des "EnumChildWindows" raus, crasht das programm nicht. Ansonsten schon. Sachen wie "FindWindowEx" kann ich 1mio mal aufrufen und es crasht nichts ... was kann ich probieren ?
-
ok hab hier mal gestöbert und das da gefunden:
for (HWND hWnd=GetWindow(hwndParent,GW_CHILD; hWnd; hWnd=GetWindow(hWnd,GW_HWNDNEXT))
{
// Do something
...
}damit umgehe ich dann EnumChildWindows und so wie es aussieht stürzt mein Programm auch nicht mehr ab

Verstehe zwar nicht, wie es das mit EnumChildWindows tat, aber hauptsache jetzt gehts ...
-
Warum hast Du einen cast für Deine Handler Proc?
Der Compioler kann Dich also nicht warnen, wenn Deine Signatur nicht stimmt. Evtl. fehlt einfach CALLBACK!