GetMenuItemについて

解決


岸田光明  2005-01-11 09:27:24  No: 12648

すいませんがもうひとつ質問があるのですが

 GetMenuItemで、他アプリのメニューの一番上(メニューから選んだ中)の一覧は得られるのですが
その下の階層や、最後まで全部よみとる方法はございますでしょうか?

よろしくおねがいいたします。


ぺんぎん  2005-01-12 01:53:10  No: 12649

procedure TForm1.Button1Click(Sender: TObject);
  var AppHandle: HWND;
      TopItem : TTreeNode;

  procedure MakeTree(Item : TTreeNode; MenuID : HMENU);
    var i : integer;
        s : string;
        buf : array[0..1000] of Char;
        NewItem : TTreeNode;
        NewMenuID  : HMENU;
  begin
    for i := 0 to GetMenuItemCount(MenuID)-1 do
     begin
       if GetMenuString(MenuID,i, buf,SizeOf(buf),MF_BYPOSITION)>0 then
         s := buf else s := '';
       NewItem := TTreeView(Item.TreeView).Items.AddChild(Item,s);
       NewMenuID := GetSubMenu(MenuID,i);
       if (GetMenuState(MenuID,i, MF_BYPOSITION) and MF_SEPARATOR) = MF_SEPARATOR then
        NewItem.Text := '-';
       if GetMenuItemCount(NewMenuID)>0 then
          MakeTree(NewItem,NewMenuID);
     end;
  end;
  function GetTopParent(h:HWND) : HWND;
    var p : HWND;
  begin
    p := GetParent(h);
    if (P=h)or(p=0) then
      Result := h
      else
        Result := GetTopParent(p);
  end;
begin
  TopItem := TreeView1.Items.AddChild(nil,'Menu');
  if Length(Edit1.Text)>0 then
   AppHandle := GetTopParent(StrToInt(Edit1.Text)) else
  AppHandle := Handle;
  MakeTree(TopItem,GetMenu(AppHandle));
end;
{
GetMenu
GetMenuString
GetSubMenu
GetMenuItemCount
}


ぺんぎん  2005-01-12 02:06:11  No: 12650

if (GetMenuState(MenuID,i, MF_BYPOSITION) <>$FFFFFFFF) then
       if ((GetMenuState(MenuID,i, MF_BYPOSITION)and $FF) and MF_SEPARATOR) = MF_SEPARATOR then
        NewItem.Text := '-';


ぺんぎん  2005-01-12 05:51:37  No: 12651

procedure TForm1.Button1Click(Sender: TObject);
  var AppHandle: HWND;
      TopItem : TTreeNode;

  function isNumIn(Value,flg : word) : Boolean;
  begin
    Result := (Value and flg) = flg;
  end;
  procedure MakeTree(Item : TTreeNode; MenuID : HMENU);
    var i : integer;
        s : string;
        buf : array[0..1000] of Char;
        NewItem : TTreeNode;
        NewMenuID  : HMENU;
        MenuState  : word;
  begin
    for i := 0 to GetMenuItemCount(MenuID)-1 do
     begin
       if GetMenuString(MenuID,i, buf,SizeOf(buf),MF_BYPOSITION)>0 then
         s := buf else s := '';
       NewItem := TTreeView(Item.TreeView).Items.AddChild(Item,s);
       NewMenuID := GetSubMenu(MenuID,i);

       MenuState := GetMenuState(MenuID,i, MF_BYPOSITION);
       if isNumIn(MenuState, MF_SEPARATOR)
          and (Length(NewItem.Text)=0)
          then
        NewItem.Text := '-';
       if GetMenuItemCount(NewMenuID)>0 then
          MakeTree(NewItem,NewMenuID);
     end;
  end;
  function GetTopParent(h:HWND) : HWND;
    var p : HWND;
  begin
    p := GetParent(h);
    if (P=h)or(p=0) then
      Result := h
      else
        Result := GetTopParent(p);
  end;
begin
  TopItem := TreeView1.Items.AddChild(nil,'Menu');
  if Length(Edit1.Text)>0 then
   AppHandle := GetTopParent(StrToInt(Edit1.Text)) else
  AppHandle := Handle;
  MakeTree(TopItem,GetMenu(AppHandle));
end;


岸田光明  2005-01-12 06:28:38  No: 12652

ぺんぎんさん、どうもすいません

こんなに大変な事だったんですね
無事取得できました。

今後もよろしくお願いいたします。
感謝いたします(^_^)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加