Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Taskbeenden und die Startleiste. (Symbol wird angezeigt) (https://www.delphipraxis.net/72536-taskbeenden-und-die-startleiste-symbol-wird-angezeigt.html)

Karstadt 2. Jul 2006 13:54


Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo. habe eine Funktion hier in forum gefunden "function KillProcess(dwProcID, Wait: DWORD): Integer;" die einen Process beendet. das funktioniert auch, aber wenn ich ein Process beende, der sich aber dieser Prozess in Systemtray befindet (rechts neben die Uhr) bleibt dieser immer noch zu sehen, wenn ich diesen Process beendet habe. Wie kann ich das lösen?

Delphi-Quellcode:
function KillProcess(dwProcID, Wait: DWORD): Integer;
var
  hProcess: Cardinal;
  dw: DWORD;
begin
  // open the process and store the process-handle
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID);
  // kill it
  if hProcess <> 0 then
  begin
    dw := Integer(TerminateProcess(hProcess, 1));
    if dw <> 0 then
    begin
      // TerminateProcess returns immediately, so wie have to verify the result via
      // WaitForSingleObject
      dw := WaitForSingleObject(hProcess, Wait);
      if dw = WAIT_FAILED then
        dw := GetLastError;
    end
    else // TerminateProcess = 0
      dw := GetLastError;
    CloseHandle(hProcess);
  end
  else // hProcess = INVALID_HANDLE_VALUE
    dw := GetLastError;
  result := dw;
end;

Ich beendet Taskmanager, aber der Symbol ist immer noch zusehen, Sie bild.

Zacherl 2. Jul 2006 13:56

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Mal mit Hier im Forum suchenInvalidateRect versuchen ...

Florian

Karstadt 2. Jul 2006 14:06

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Delphi-Quellcode:
procedure RepaintWnd(Window: hWnd);
begin
  InvalidateRect(Window, nil, True);
  UpdateWindow(Window);
  RedrawWindow(Window, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
end
was muss ich als WINDOW: hWND übergeben? mit 0 funktionier gda nicht...

Neutral General 2. Jul 2006 14:16

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Das Handle des Windows das du mit der Function FindWindow bekommst.

Delphi-Quellcode:
Handle := Findwindow(nil,'Fenster.Caption');
also z.B so etwa:

Delphi-Quellcode:
var h: Hwnd;
begin
H := Findwindow(nil,'Windows Task-Manager');
RepaintWnd(h);
end;
Gruß
Neutral General

Karstadt 2. Jul 2006 14:35

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
In diesen Fall benötige ich nicht den Taskmanager sondern Taskleiste, da ich diesen Objekt aktualliesern will, nach dem ich Taskmanager beendet habe.

...nun muss ich rausfinden wie ich dieses Objekt ansprechen kann?

wnd := Findwindow(nil,'Takleiste');


RepaintWnd(wnd);

Karstadt 2. Jul 2006 14:38

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier ist mein Projekt. schaut euch das an. Versucht den Taskmanager zu beenden und schaut euch die Windowsleiste an.

Karstadt 2. Jul 2006 15:11

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
das funktioniert nicht

Delphi-Quellcode:
  wnd := FindWindow('Shell_TrayWnd', nil);
  RepaintWnd(wnd);

Helmi 2. Jul 2006 15:22

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Hallo,

ich finde das Handle des SysTray so raus:

Delphi-Quellcode:
  //Handler des SysTray mit dem SysTray-Namen rausfinden
  hWnd := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil);

Karstadt 2. Jul 2006 17:46

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
..das funktioniert nicht. Der ICON ist immer noch zusehe, obwohl dieser Prozess beendet wurden.

Kann jemand dieses Verhalten bei sich bestätigen?


Problematik: nach beenden des Prozesses taskmgr.exe bleibt der Icon immer noch in Tray sichtbar. Erst wenn ich mit maus über diesen ICON gehe, verschwiendet dieser.

Warum?

Zacherl 2. Jul 2006 17:49

Re: Taskbeenden und die Startleiste. (Symbol wird angezeigt)
 
Mit der Unit madKernel kann man die TrayIcons jedes Prozesses auslesen und auch entfernen lassen.

Florian


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz