Können Sie ein Signal an Windows Explorer senden, damit die Systray-Symbole aktualisiert werden?

8

Dieses Problem hat mich schon eine ganze Weile getroffen und es war wirklich nervig.

Jedes Mal, wenn ich mich nach einem Neustart / Neustart anmeldes, braucht der Explorer etwas Zeit, um zu erscheinen. Ich habe den Schritt gemacht, auf alle Dienste zu warten, um zu starten, und dann logge ich mich ein, aber es macht keinen Unterschied. Das Ergebnis ist immer das gleiche: Einige der Symbole werden nicht angezeigt, selbst wenn die Anwendungen gestartet wurden.

Ich habe ein bisschen nach dem Code geforscht, der eine Anwendung dazu bringt, ein Icon dort zu "kleben", aber gibt es einen API-Aufruf, den man ausführen kann, so dass der Explorer all diese Icon-Informationen erneut liest? Wie Ungültigmachen oder Neuzeichnen oder etwas Ähnliches?

Anscheinend sieht es so aus, als hätte Jon Recht und es ist nicht möglich.

Ich habe Bob Dizzle und Mark Ransom Code gefolgt und baue dies (Delphi Code):

%Vor%

Aber ohne Erfolg.

Ich habe es sogar mit

probiert
procedure Refresh;
var
  hSysTray: THandle;
begin
  hSysTray := GetSystrayHandle;
  SendMessage(hSysTray, WM_PAINT, 0, 0);
end;

function GetSystrayHandle: THandle;
var
  hTray, hNotify, hSysPager: THandle;
begin
  hTray := FindWindow('Shell_TrayWnd', '');
  if hTray = 0 then
  begin
    Result := hTray;
    exit;
  end;

  hNotify := FindWindowEx(hTray, 0, 'TrayNotifyWnd', '');
  if hNotify = 0 then
  begin
    Result := hNotify;
    exit;
  end;

  hSyspager := FindWindowEx(hNotify, 0, 'SysPager', '');
  if hSyspager = 0 then
  begin
    Result := hSyspager;
    exit;
  end;

  Result := FindWindowEx(hSysPager, 0, 'ToolbarWindow32', 'Notification Area');
end;
und immer noch nicht angezeigt.

Irgendwelche anderen Vorschläge?

    
Gustavo Carreno 16.09.2008, 17:18
quelle

6 Antworten

9

Sehen Sie sich diesen Blog-Eintrag an: ERFRISCHEN SIE DEN TASKBAR-BENACHRICHTIGUNGSBEREICH . Ich verwende diesen Code, um die Taskleiste zu aktualisieren, um verwaiste Symbole loszuwerden, und es funktioniert perfekt. Der Blogeintrag ist sehr informativ und gibt eine großartige Erklärung der Schritte, die der Autor unternommen hat, um seine Lösung zu finden.

%Vor%     
Louis Davis 27.06.2009, 14:33
quelle
9

Zwei wichtige Details für jeden, der Louis 'Antwort verwendet (aus ERFRISCHEND AUF DEN TASKBAR-BENACHRICHTIGUNGSBEREICH ) unter Windows 7 oder Windows 8:

Erstens, da die Antwort zu sehen war, heißt das Fenster mit dem Titel "Notification Area" in XP jetzt "User Promoted Notification Area" in Windows 7 (wahrscheinlich Vista) und höher.

Zweitens löscht dieser Code keine Symbole, die derzeit ausgeblendet sind. Diese sind in einem separaten Fenster enthalten. Verwenden Sie den Originalcode, um sichtbare Symbole zu aktualisieren, und Folgendes, um ausgeblendete Symbole zu aktualisieren.

%Vor%

Für jeden, der nur ein Dienstprogramm benötigt, um dies zu tun, anstatt Code, ich baute eine einfache exe mit diesem Update: Benachrichtigungsbereich aktualisieren

    
Stephen Klancher 03.08.2013 23:54
quelle
3

Fügen Sie den folgenden Code zu Ihrem hinzu, um die Taskleiste zu aktualisieren.

%Vor%     
Bob Dizzle 16.09.2008 17:24
quelle
2

Soweit ich weiß, ist das nicht möglich Gustavo - es liegt an jedem Antrag, sein Benachrichtigungssymbol in den Systray zu legen und sicherzustellen, dass es im richtigen Zustand gehalten wird.

Sie werden manchmal feststellen, dass explorer.exe abstürzt, wenn bestimmte Symbole nicht wieder auftauchen - das liegt nicht daran, dass ihr Prozess abgestürzt ist, sondern einfach, dass ihre Anwendung das Benachrichtigungssymbol nicht in den Systray gesetzt hat, wenn die neue Instanz von explorer .exe wurde gestartet. Noch einmal, es ist die Anwendung, die dafür verantwortlich ist.

Tut mir leid, keine besseren Nachrichten für Sie zu haben!

    
Jonathan Sayce 16.09.2008 17:23
quelle
2

Ich habe dieses Thema letztes Jahr in meinem Codeaholic Weblog in einem Artikel mit dem Titel [Delphi] Aktualisierung von SysTray .

Meine Lösung ist eine Delphi ActiveX / COM DLL. Der Download-Link funktioniert immer noch (obwohl ich nicht mehr weiß, wie meine PLUG Mitgliedschaft abgelaufen ist.)

    
bugmagnet 27.06.2009 14:45
quelle
1

Ich benutze den folgenden C ++ - Code, um den Fenstergriff zum Tray-Fenster zu bringen. Hinweis: Dies wurde nur unter Windows XP getestet.

%Vor%     
Mark Ransom 16.09.2008 17:35
quelle