すいませんがもうひとつ質問があるのですが
GetMenuItemで、他アプリのメニューの一番上(メニューから選んだ中)の一覧は得られるのですが
その下の階層や、最後まで全部よみとる方法はございますでしょうか?
よろしくおねがいいたします。
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
}
if (GetMenuState(MenuID,i, MF_BYPOSITION) <>$FFFFFFFF) then
if ((GetMenuState(MenuID,i, MF_BYPOSITION)and $FF) and MF_SEPARATOR) = MF_SEPARATOR then
NewItem.Text := '-';
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;
ぺんぎんさん、どうもすいません
こんなに大変な事だったんですね
無事取得できました。
今後もよろしくお願いいたします。
感謝いたします(^_^)
ツイート | ![]() |