![]() |
Menüpunkte eines fremden Programms
Guten Morgen.
Mit folgendem Quelltext möchte ich gerne die Menüpunkte des Hauptmenüs eines fremden Programms in einer Listbox anzeigen.
Delphi-Quellcode:
Allerdings werden mir immer nur die die ersten drei Zeichen angezeigt. Weiß jemand, wo der Fehler liegt?
procedure TFrmMenues.FormCreate(Sender: TObject);
var hBiss: HWND; hMenue: HMENU; IntZaehler: Integer; StrText: String; begin hBiss := FindWindow(nil, 'Biss+'); hMenue := GetMenu(hBiss); SetLength(StrText, 255); for IntZaehler := 0 to GetMenuItemCount(hMenue) - 1 do begin GetMenuString(hMenue, IntZaehler, pchar(StrText), SizeOf(StrText), MF_BYPOSITION); ListBoxHaupt.Items.Add(StrText); end; end; |
Re: Menüpunkte eines fremden Programms
Versuch mal (ungetestet):
Delphi-Quellcode:
Ausserdem würde ich daraus eine Procedure machen:
procedure TFrmMenues.FormCreate(Sender: TObject);
var hBiss: HWND; hMenue: HMENU; IntZaehler, len: Integer; StrText: String; begin hBiss := FindWindow(nil, 'Biss+'); hMenue := GetMenu(hBiss); for IntZaehler := 0 to GetMenuItemCount(hMenue) - 1 do begin // benötigte Länge abfragen len := GetMenuString(hMenue, IntZaehler, nil, 0, MF_BYPOSITION); // Speicher bereitstellen SetLength(StrText, len+1); // +1 für terminating null character if GetMenuString(hMenue, IntZaehler, pchar(StrText), len+1, MF_BYPOSITION) <> 0 then ListBoxHaupt.Items.Add(Copy(StrText,1, len)) else ListBoxHaupt.Items.Add(Format('GetMenuString(,%d,,) failed', [IntZaehler]) end; end; procedure FillTStringsFromMenuHandle(hMenue: HMENU; list:TStrings); und in irgeneine Unit mit weiteren Hilfsfunktionen packen. |
Re: Menüpunkte eines fremden Programms
Vielen Dank. Es hat funktioniert.
Zitat:
|
Re: Menüpunkte eines fremden Programms
Auch wenns schon ziemlich alt ist. Wie muss ich die Procedur umbauen sodass die Items ohne Listbox mit Subitems in ein Mainmenü auf meiner Form kopiert werden?
|
Re: Menüpunkte eines fremden Programms
Zitat:
|
Re: Menüpunkte eines fremden Programms
Zitat:
Also die Items aus dem fremden Menü sollen sammt Subitems in ein Mainmenü auf meiner Form kopiert werden. |
Re: Menüpunkte eines fremden Programms
Schau Dir mal
![]() |
Re: Menüpunkte eines fremden Programms
Und wass muss ich der Funktion in diesem Beipsiel für Parameter übergeben?
MSDN sagt folgendes: Zitat:
Edit: Sicher, dass InserMenuItem richtig ist? Das erstellt ja in der fremden Anwendung MEnüeinträge oder kann man das auch anders nutzen? |
Re: Menüpunkte eines fremden Programms
Es steht doch da:
Zitat:
|
Re: Menüpunkte eines fremden Programms
Muss das wirklich alle so kompliziert sein? Kann man nicht einfach das Mainmenü in mein Programm kopieren?
|
Re: Menüpunkte eines fremden Programms
Tja, schon eine Frechheit, dass Microsoft so etwas wie
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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