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组件tstringlist中的重复项目

Delphi过滤一段字符里面的html代码的函数

Delphi 利用vclzip实现分卷压缩

Delphi 图像识别技术(逐行扫描识别)

Delphi windows api判断文件共享锁定状态

强大的Delphi rtti--兼谈需要了解多种开发语言

Delphi 圆角panel

Delphi 用api函数抓取屏幕图像

Delphi获取flash文件的影片时长,原始尺寸,帧数等信息

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



打赏

取消

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

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

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

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

评论

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