Autor Beitrag
Matrikz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 12.09.02 07:45 
Hallo...

habe ein Problem. Und zwar will ich das Menü eines anderen Programms ansprechen. Ist das irgendwie möglich?
Habe mit die diesem ganzen FindWindow-Kram leider noch nicht so richtig Erfolg gehabt.

Ich danke schonmal für eure Antworten! :)

Ciao Thomas

_________________
ist doch alles nur spiel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 12.09.02 08:27 
Hol dir mit GetMenu ein Handle auf das Menü. Dann kannst du damit machen was du willst.
Zum Beispiel mit GetSubMenu ein Handle auf eine Eintrag holen.

Beispiel: Aus lesen des ersten Menüeintrages vom Editor.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
 hWindow, hMenu, hSubmenu: Cardinal;
 buffer: array[0..255] of Char;
begin
  ZeroMemory(@buffer, sizeof(buffer));
  hWindow := FindWindow(nil, 'Unbenannt - Editor');
  if hWindow <> 0 then
  begin
    hMenu := GetMenu(hWindow);
    if hMenu <> 0 then
    begin
      GetMenuString(hMenu, 0, buffer, sizeof(buffer), MF_BYPOSITION);
      label1.Caption := buffer;
    end;
  end;
end;
Matrikz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 12.09.02 09:08 
Danke erstmal...

Leider finde ich nicht das was ich will. Es wäre cool wenn ich mir alle Fenster auflisten lassen könnte.
Ich hatte auch schon mal einen entsprechenden Quellcode aber leider finde ich den nicht mehr...

Hat noch jemand was in Petto? wäre cool!

Ach ja... Gibt es eine Möglichkeit rauszufinden wie viele Einträge ein Menu hat?

Mit ner while Schleife klappt das nicht, weil GetMenuString auch bei einem Trennstrich 0 zurück gibt.

Danke nochmals!

_________________
ist doch alles nur spiel...


Zuletzt bearbeitet von Matrikz am Do 12.09.02 09:20, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 12.09.02 09:16 
Alle sichtbaren Fenster in eine Listbox:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type
PMyEnumParam = ^TMyEnumParam;
TMyEnumParam = record
  lb: TListbox;
end;

function GetWindows(const hWnd : Longword;
                          Param: PMyEnumParam): LongBool; stdcall;
var
  Len : Longint;
  S   : String;
begin
  Result := True;
  if not ( IsWindow(hWnd) and IsWindowVisible(hWnd) ) then Exit;
  Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
  if Len > 0 then
  begin
    SetLength(S, Len);
    SendMessage(hWnd, WM_GETTEXT, Len + 1, Longint(Pchar(S)));
    Param.lb.Items.Add(s);
  end;
  // mit Result = False kann die Callbackfunktion vorzeitig verlassen werden
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Param: TMyEnumParam;
begin
  Param.lb := Listbox1;
  EnumWindows(@GetWindows, LPARAM(@Param));
end;