Zitat von
NicoDE:
Zitat von
MaBuSE:
Wie bekomme ich diese Fehlermeldung weg, ohne den Task csrss.exe zu killen.
Ziemlich eklig:
- ProzessId des CSRSS besorgen (ToolHelp32)
- Fenster global durchgehen (gute Filterkreterien)
- blödes Ding per Fensternachricht verschwinden lassen...
Der CSRSS hat eine Queue solcher Nachrichten (kennt man vom 'Nachrichtendienst', die kommen jeweils erst nach dem Wegklicken).
Delphi scheint nicht mit dieser Queue zu arbeiten Delphi wartet, bis die nachicht weggeklickt wird und wird erst danach wieder aktiv.
Es gibt eine relativ einfache Lösung, da der Fenstertitel bekannt ist:
(hier gefunden:
http://www.delphipraxis.net/internal...=357046#357046 )
Delphi-Quellcode:
// schließt alle Fenster mit dem Titel 'delphi...'
procedure TForm1.Button2Click(Sender: TObject);
var
aHandle: HWnd;
begin
aHandle := FindWindow(nil, 'delphi32.exe - Komponente nicht gefunden');
while aHandle <> 0 do
begin
SendMessage(aHandle, WM_CLOSE, 0, 0);
aHandle := FindWindow(nil, 'delphi32.exe - Komponente nicht gefunden');
end;
end;
// bzw: wenn nur ein Fenster geschlossen werden soll
procedure TForm1.Button2Click(Sender: TObject);
var
aHandle: HWnd;
begin
aHandle := FindWindow(nil, 'delphi32.exe - Komponente nicht gefunden');
if aHandle <> 0 do
begin
SendMessage(aHandle, WM_CLOSE, 0, 0);
end;
end;
//Beide Funktionen sind in der user32.dll enthalten:
function FindWindow; external user32 name 'FindWindowA';
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
function SendMessage; external user32 name 'SendMessageA';
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
function PostMessage; external user32 name 'PostMessageA';
function PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
@NicoDE: Danke für den Schupps in die richtige Richtung