Also noch mal, matze.
Ich habe hier jetzt mal einen Code zum Ausprobieren für dich:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| var WebBrowsersOnly : boolean = false;
function CloseAll(Wnd: hWnd; lparam: LPARAM): longbool; stdcall; const browser_classes : string = 'IEFrame|MozillaWindowClass|BLDOPERA'; var buf : array[0..MAX_PATH - 1]of char; begin //if(WebBrowsersOnly) then GetClassName(Wnd,buf,80);
if((not(WebBrowsersOnly)) or (pos(buf,browser_classes) <> 0)) then begin if((GetWindowLong(Wnd, GWL_STYLE) and (WS_VISIBLE or WS_SYSMENU)) = (WS_VISIBLE or WS_SYSMENU)) then ShowMessage(buf);
// PostMessage(Wnd, WM_SYSCOMMAND,lParam,0); end;
Result := true; end;
procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@CloseAll,SC_CLOSE); end; |
Button auf die Form, Code rein und ausprobieren.
Die Kommentare sind absichtlich drin. Schließlich wollte ich meinen offenen Mozilla nicht schließen.
Ich lasse mir also nur die Klassennamen anzeigen, und ich sehe neben anderen Fenstern auch "TForm1" und "TApplication" - die in dem Fall zu meiner Anwendung gehören.
Wie deine Form heißt, weiß ich nicht, aber zumindest bis hier sollte es auch bei dir funktionieren.
Wenn du die Bedingungsprüfung jetzt mal so änderst:
Quelltext
1: 2:
| if((not(WebBrowsersOnly)) or (pos(buf,browser_classes) <> 0)) and ((Wnd <> Form1.Handle) and (Wnd <> Application.Handle)) |
dann siehst du nur noch die Klassennamen der anderen Fenster. Der Name deiner Form und das dazu gehörende (!) "TApplication"-Fenster tauchen nicht mehr auf.
Wenn du jetzt das ShowMessage entfernst und stattdessen wieder die "PostMessage"-Anweisung aktivierst, dann werden alle Programme beendet - nur eben deins nicht.
Bei mir geht es also.
Es wäre aber hilfreich, wenn du sagst,
was bei dir nicht klappt.