Wie kann ich ein Systray (Infobereich) Symbol WM_MOUSEWHEEL Nachrichten empfangen?

StackOverflow https://stackoverflow.com/questions/90411

  •  01-07-2019
  •  | 
  •  

Frage

Ich mag eine bestehende Anwendung erweitern Ich habe es Mischer Volumen von Set zu machen Rad-Scrolling über das Symbol im Infobereich ist.

Soweit ich weiß, das Infobereich erhält keine WM_MOUSEWHEEL Nachrichten, aber ich fand noch eine Anwendung, die genau das tut, was ich ( http://www.actualsolution.com/power_mixer ). Mit WinspectorSpy habe ich einige seltsame Botschaften des Formulars Anwendung bemerkt erhält: 0x000003d0 und 0x000003d1, aber ich fand keine Hinweise über sie

.

Hat jemand eine Idee, wie ich die gewünschte Funktionalität erreichen konnte?

War es hilfreich?

Lösung

Wenn Sie die Maus / Tastatur-Ereignisse außerhalb Ihrer Anwendung aufnehmen möchten, müssen Sie Low-Level-Hooks .

Ein schöner Anfänger Artikel über ein Maus-Hook in Delphi ist die Installation Wie Hook die Maus zu fangen Ereignisse außerhalb Ihrer Anwendung auf About.com geschrieben von Zarko Gajic.

Der Benutzer, die Ihre Anwendung gestartet werden Administratorrechte benötigen, um einen Haken zu installieren.

Nachdem Sie die Nachricht erfassen, sollten Sie bestimmen, ob es über das Symbol ist in der Benachrichtigungsleiste (was schwierig sein kann, weil es keine genaue api ist Ihre Position auf der Bar zu bekommen) und als Prozess das Scroll-Ereignis.

Andere Tipps

Ich erklärte sich über die Maus Einhaken, und erwähnte es schwierig sein könnte, Ihr genaues Symbol zu finden. Ich habe den folgenden Artikel über gefunden, wie ein Tray-Icon zu finden.

CTrayIconPosition - wo ist mein Tray-icon von Irek Zielinski?. Ich denke, wenn Sie versuchen, zu verstehen, wie es funktioniert, wie Sie es sich umdrehen und es verwenden, um zu überprüfen, ob Sie mit der Maus zur Zeit über dem Symbol positioniert ist.

Aber Sie sollten zunächst prüfen, ob die Maus auch im Tray-Bereich ist. Ich fand einigen alten Code von mir (2005), die die richtigen Region lokalisiert.

var
 hwndTaskBar, hwndTrayWnd, hwndTrayToolBar : HWND;
 rTrayToolBar : tRect;
begin
 hwndTaskBar  := FindWindowEx (0, 0, 'Shell_TrayWnd', nil);
 hwndTrayWnd  := FindWindowEx (hwndTaskBar , 0, 'TrayNotifyWnd',nil);
 hwndTrayToolBar := FindWindowEx(hwndTrayWnd, 0, 'ToolbarWindow32',nil);

 Windows.GetClientRect(hwndTrayToolBar, rTrayToolBar);
end

Mit diesem Stück Code und das Wissen aus dem erwähnten Artikel Ich glaube, Sie die Funktionalität implementieren können, die Sie wollten.

Nicht sicher, ob dies das Problem zu lösen, aber es könnte einen Versuch als Ausgangspunkt wert sein. Sie könnten ein Top-Level-transparentes Fenster erstellen, die Sie dann Position über dem oberen Rand des Taskleistensymbol. Die Top-Level-Fenster Maus-Benachrichtigungen erhalten, wenn die Maus über sie ist. Sie können sie dann verarbeiten je nach Bedarf. Die Bildschirm Position der Taskleiste Symbol zu finden, ist etwas, das ich nicht kenne und so, dass ein Problem sein könnte.

Id weiß nicht, ob dies wird Ihnen helfen, aber in Delphi die Standard-Nachrichtenbibliothek lautet:

WM_MOUSEWHEEL = $ 020A;

Es wäre auch hilfreich, wenn Sie wie wissen lassen, welche Sprache Sie verwenden.

dachte, ich würde darauf hinweisen, dass Power Mixer Scrollrad Ereignisse auf der gesamten Taskleiste aufnehmen, während die Maus Mitte Klicken Sie einfach auf das Systray-Symbol arbeitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top