AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wie erkennen, wann System-Menü eines Fensters geöffnet wird?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie erkennen, wann System-Menü eines Fensters geöffnet wird?

Ein Thema von mh166 · begonnen am 12. Jan 2006 · letzter Beitrag vom 6. Feb 2006
 
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Wie erkennen, wann System-Menü eines Fensters geöffnet w

  Alt 31. Jan 2006, 20:32
um in fast alle Prozesse zu kommen brauchst du erstmal einen Hook. Dann könntest du darin dir alle Threads des Prozesses auflisten lassen und von jedem Thread die Fenster. (bzw. gleich alle Fenster auflisten und filtern welche zu diesem Prozess gehören).
Anschließend kannst du mit GetSystemMenu die Systemmenüs der Fenster ermitteln. Dann noch in diesen Systemmenüs einen Eintrag hinzufügen (weiß ich spontan nicht wie) und dann im Click des Menüeintrages mit FindWindow (oder wie auch immer) dein Fenster suchen und diesem eine Message schicken in welchem Fenster geklickt wurde.

Eventuell kannst auch auch mal schreiben was du genau vor hast, vielleicht gibt es ja einen besseren weg als in alle Systemmenüs irgendwas zu injezieren.

[Edit]
Hab mal bischen Hilfe gelesen und dabei ist folgendes raus gekommen. So erstellt man im Systemmenü 2 weitere Einträge (ein Text und 1 Seperator):
Delphi-Quellcode:
var LHandle: Cardinal;
    LInfo: TMenuItemInfo;
    LStr: String;
begin
  LStr := 'Neues Item';

  LHandle := GetSystemMenu(handle, False);
  ZeroMemory(@LInfo, SizeOf(LInfo));
  LInfo.cbSize := SizeOf(LInfo);
  LInfo.fMask := MIIM_TYPE;
  LInfo.fType := MFT_STRING;
  LInfo.fState := MFS_DEFAULT;
  LInfo.wID := 133;
  LInfo.dwTypeData := PChar(LStr);
  LInfo.cch := Length(LStr);

  InsertMenuItem(LHandle, 0, True, LInfo);
  LInfo.fType := MFT_SEPARATOR;
  InsertMenuItem(LHandle, 1, True, LInfo);
In diesem zusammenhang dürfte die Message "WM_INITMENU" für dich auch Interessant sein.
Du kannst ja ersmtal versuche ob du das alles hinbekommst solange du deine eigene Anwendung hookst, bzw. diese Message abfängst. Wenn du das geschafft hast dürfte der schritt für die Ausweitung auf andere Programme nicht all zu groß sein.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
 


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 22:53 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