Delphi获取外部程序菜单并模拟点击菜单


本文整理自网络,侵删。

  

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure TreeView1DblClick(Sender: TObject);
  private
    hnotepad: THandle;
    procedure AddChildMenus(pnd:TTreenode;m:hMenu);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddChildMenus(pnd:TTreenode;m:hMenu);
VAR
  i,id:integer;
  nd:TTreenode;
  MText : ARRAY[0..255] OF Char;
begin
  for i:=0 to GetMenuItemCount(m)-1 do begin
  Id := Integer(GetMenuItemID(m, i));
  GetMenuString(m, i, MText, 255, MF_BYPOSITION);
  if id = -1 then begin
    nd:=Treeview1.items.AddChild(pnd, mText);
    AddChildMenus(nd, GetSubMenu(m, i));
  end
  else if length(Trim(MText)) > 0 THEN
    Treeview1.items.AddChildObject(pnd, Format('%s {ID=%d}',[MText, Id]), Pointer(Id));
  END;
END;

 

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  root:TTreenode;
begin
  hnotepad:=FindWindow(nil, '记事本');
  if hnotepad <> 0 then
  if GetMenu(hnotepad) <> 0 then begin
    root:=Treeview1.items.Add(nil, 'Main Menu');
    AddChildMenus(root, GetMenu(hnotepad));
    Treeview1.FullExpand;
    Refresh;
  end;
end;

procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
  BringWindowToTop(hNotePad);
  PostMessage(hNotePad,WM_COMMAND,Integer(Treeview1.Selected.Data), 0);
end;

end.

相关阅读 >>

Delphi 将汉字翻译成拼音缩写的函数

Delphi用twebbrowser组件在Delphi中post数据和取得网页源文件

Delphi 2009 之 tstringbuilder 类[6]: equals

Delphi c语言对比指针的用法

Delphi winapi: openprocess、getexitcodeprocess、terminateprocess (qq)

Delphi win32_diskdrive 硬盘 参数说明

Delphi ip编辑控件

Delphi 创建大窗口

Delphi adoconnection1 事务

Delphi 结束360safe和360保险箱进程

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...