AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Menüpunkte eines fremden Programms
Thema durchsuchen
Ansicht
Themen-Optionen

Menüpunkte eines fremden Programms

Ein Thema von Cuchulainn · begonnen am 29. Mär 2004 · letzter Beitrag vom 7. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Cuchulainn

Registriert seit: 26. Aug 2003
182 Beiträge
 
Delphi 5 Enterprise
 
#1

Menüpunkte eines fremden Programms

  Alt 29. Mär 2004, 08:30
Guten Morgen.

Mit folgendem Quelltext möchte ich gerne die Menüpunkte des Hauptmenüs eines fremden Programms in einer Listbox anzeigen.

Delphi-Quellcode:
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;
Allerdings werden mir immer nur die die ersten drei Zeichen angezeigt. Weiß jemand, wo der Fehler liegt?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Menüpunkte eines fremden Programms

  Alt 29. Mär 2004, 10:48
Versuch mal (ungetestet):

Delphi-Quellcode:
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;
Ausserdem würde ich daraus eine Procedure machen:
procedure FillTStringsFromMenuHandle(hMenue: HMENU; list:TStrings);
und in irgeneine Unit mit weiteren Hilfsfunktionen packen.
Andreas
  Mit Zitat antworten Zitat
Cuchulainn

Registriert seit: 26. Aug 2003
182 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Menüpunkte eines fremden Programms

  Alt 29. Mär 2004, 10:55
Vielen Dank. Es hat funktioniert.

Zitat von shmia:
Ausserdem würde ich daraus eine Procedure machen:
procedure FillTStringsFromMenuHandle(hMenue: HMENU; list:TStrings);
und in irgeneine Unit mit weiteren Hilfsfunktionen packen.
Das ist eine gute Idee. Aber zuerst wollte ich einmal sicher sein, dass es überhaupt funktioniert
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 13:22
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?
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 13:25
Zitat:
...sodass die Items ohne Listbox mit Subitems in ein Mainmenü auf meiner Form...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 13:26
Zitat von DeddyH:
Zitat:
...sodass die Items ohne Listbox mit Subitems in ein Mainmenü auf meiner Form...


Also die Items aus dem fremden Menü sollen sammt Subitems in ein Mainmenü auf meiner Form kopiert werden.
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 13:32
Schau Dir mal MSDN-Library durchsuchenInsertMenuItem an.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 13:38
Und wass muss ich der Funktion in diesem Beipsiel für Parameter übergeben?

MSDN sagt folgendes:
Zitat:
BOOL InsertMenuItem(
HMENU hMenu,
UINT uItem,
BOOL fByPosition,
LPCMENUITEMINFO lpmii
);
Aber was muss da in meinen Fall rein?

Edit: Sicher, dass InserMenuItem richtig ist? Das erstellt ja in der fremden Anwendung MEnüeinträge oder kann man das auch anders nutzen?
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 14:02
Es steht doch da:
Zitat:
Parameters

hMenu
[in] Handle to the menu in which the new menu item is inserted.
uItem
[in] Identifier or position of the menu item before which to insert the new item. The meaning of this parameter depends on the value of fByPosition.
fByPosition
[in] Value specifying the meaning of uItem. If this parameter is FALSE, uItem is a menu item identifier. Otherwise, it is a menu item position.
lpmii
[in] Pointer to a MENUITEMINFO structure that contains information about the new menu item.
hMenu wäre also in Deinem Fall das Handle des Menüs, in das eingefügt werden soll. Ob das auf Deinem Formular oder woanders liegt, ist doch erstmal egal, oder?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Menüpunkte eines fremden Programms

  Alt 7. Okt 2008, 14:34
Muss das wirklich alle so kompliziert sein? Kann man nicht einfach das Mainmenü in mein Programm kopieren?
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz