AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Eigene Menuitems in taskbar-popup einschleusen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Menuitems in taskbar-popup einschleusen

Ein Thema von helgew · begonnen am 30. Jul 2008 · letzter Beitrag vom 3. Aug 2008
Antwort Antwort
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#1

Re: Eigene Menuitems in taskbar-popup einschleusen

  Alt 3. Aug 2008, 02:36
Es ist vollendet.

Dieses kleine Progrämmchen wird später mal als Dienst im Hintergrund laufen und Menüerweiterungen bereitstellen.
Momentan fügt es den Systemmenüs den Punkt "Process priority ..." hinzu, der beim Anklicken ein Fenster anzeigt, mit dem man die Prozesspriorität setzen kann ( bei jenem Prozess, dem das Fenster gehört )

http://c.imagehost.org/0652/ppGUI.png


Funktionsprinzip:
  • es werden beim Starten und alle 2.5 Sekunden bei jenen Systemmenüs, die noch kein selbstdefiniertes Item besitzen, ein "Set Process Priority ..." - Item mit ID $FCC0 hinzugefügt. (Die Standardbuttons rangieren im Bereich $F000-$F120 soweit ich das gesehen habe)
  • Die Callback-Prozedur ist in eine dll ausgelagert, diese wird geladen und der Hook mit dem Modulhandle hDLL angesprochen.
  • SetWindowsHookEX(WH_SYSMSGFILTER, ...,hDLL) setzt einen Hook, durch den insbesondere die Messages $A08XFXXX laufen, wobei $A080FXXX für MouseEnter in einen aktivierten MenüItem-Eintrag steht. Das Klick-Ereignis führt, wie auch das Bestätigen durch Enter, unter anderem zur $FFFF0000 Message, die ich als "menu close" interpretiere.
  • War die zuletzt durch $A08XFXXX festgestellte ID die selbstdefinierte Item ID $FCC0, so wird mit RegisterWindowMessage ein Messagetyp "WM_PROCESSPRIORITYSET_EXT" zum Broadcast registriert und mithilfe von SendMessageTimeout(HWND_BROADCAST, ...) und dieser Message eine Message mit ProcessID und Handle des Prozess-Hauptfensters als WParam und LParam ausgesandt. Ein Aufruf des Hauptprogrammes aus der DLL, welche in diesem Fall vom System genutzt wird, ist mit ShellExecute nicht möglich, da der Programmpfad nicht gespeichert werden kann ( wie auch? Ich sehe hier nur die Möglichkeit, irgendwie an den Pfad des Moduls heranzukommen, wenn überhaupt )
  • Das Hauptprogramm startet sich der Einfachheit halber und für mehr Crashsicherheit selbst erneut mit drei Parametern "setpriority <ProcessID> <hwndmainwindow>", wodurch das Formular randlos wird, nur das Steuerpanel anzeigt und sich an die Stelle der Clientfläche des angegebenen Fensters setzt. Die aktuelle priority class wird geladen und in die GUI übernommen. Ein Bestätigen setzt die neue Priorität und schließt das eingeblendete tool.
Angehängte Grafiken
Dateityp: png ppgui_344.png (29,4 KB, 23x aufgerufen)
Angehängte Dateien
Dateityp: rar processpriorityextension_108.rar (203,9 KB, 19x aufgerufen)
Dateityp: rar ppgui_949.rar (8,9 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz