Autor Beitrag
Leo1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Win 98, Win XP
D5 Ent, D2005 Arch, Prof
BeitragVerfasst: Mo 24.10.05 16:38 
Servus,

ich versuche die Inhalte eines Menüs auszulesen. Die Ermittlung der Menüeinträge sollte möglichst mit API-Befehlen erfolgen, um das Ganze auch auf Fremdanwendungen auszudehnen. Mit der Taste [Alt] wechselt man ja in den ersten Menüeintrag einer Anwendung. Danach kann dann mit den Cursortasten innerhalb der Menüs gewechselt werden.

Meine Frage ist, wie bekomme ich mit, wann die entsprechenden Cursortasten gedrückt werden, da diese keine entsprechenden Events an das Formular liefern, sofern dieses Menüs, Buttons oder andere Steuerelemente enthält, auch wenn KeyPreview des Formulars auf True gesetzt ist?

Mein bisheriger Ansatz:

ausblenden volle Höhe Delphi-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:
var WindowHandle : HWND;
    MenuHandle : HMENU;
    MenuInfo : MENUITEMINFO;
    pMenuInfo : PMENUITEMINFO;
    iMenupos : Cardinal;
    bByMenuPos : Boolean;
    bReturn : Boolean;
    Buffer : Cardinal;
    MenuString : ShortString;
    strMenu : PChar;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if Key = VK_MENU then // bei Drücken von [Alt] Handle des aktivierten Menüs ermitteln
    begin
        WindowHandle := GetForegroundWindow; // Fensterhandle
        MenuHandle := GetMenu(WindowHandle);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    MenuInfo.cbSize := sizeof(MenuInfo);
    MenuInfo.cch := SizeOf(MenuString);
    MenuInfo.fMask := MIIM_TYPE;
    MenuInfo.dwTypeData := PChar(@MenuString);
    GetMenuItemInfo(MenuHandle, iMenupos, true, MenuInfo);
    strMenu := MenuInfo.dwTypeData;
    MessageDlg(strMenu, mtInformation, [mbOK], 0); //Ausgabe des mit [Alt] angewählten Eintrags
end;

Wenn ich nun wüsste, wie ich den Druck auf die Cursortasten ermittle, wär glaube ich der Rest kein großes Problem, da man dann in fast identischer Weise, wie oben verfahren könnte.


Gruß
Leo

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt

_________________
Bis die Tage
Leo