跨进程访问时  如何在对方程序中创建按钮

解决方案 »

  1.   

    接收處理鼠標的消息example:
    unit Unit1; interface uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    StdCtrls; type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    Button2: TButton; 
    Button3: TButton; 
    Edit1: TEdit; 
    Button4: TButton; 
    procedure FormCreate(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; var 
    Form1: TForm1; EventArr:array[0..1000]of EVENTMSG; 
    EventLog:Integer; 
    PlayLog:Integer; 
    hHook,hPlay:Integer; 
    recOK:Integer; 
    canPlay:Integer; 
    bDelay:Bool; 
    implementation {$R *.DFM} 
    Function PlayProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall; 
    begin 
    canPlay:=1; 
    Result:=0; if iCode < 0 then //必须将消息传递到消息链的下一个接受单元 
    Result := CallNextHookEx(hPlay,iCode,wParam,lParam) 
    else if iCode = HC_SYSMODALON then 
    canPlay:=0 
    else if iCode = HC_SYSMODALOFF then 
    canPlay:=1 
    else if ((canPlay =1 )and(iCode=HC_GETNEXT)) then begin 
    if bDelay then begin 
    bDelay:=False; 
    Result:=50; 
    end; 
    pEventMSG(lParam)^:=EventArr[PlayLog]; 
    end 
    else if ((canPlay = 1)and(iCode = HC_SKIP))then begin 
    bDelay := True; 
    PlayLog:=PlayLog+1; 
    end; 
    if PlayLog>=EventLog then begin 
    UNHookWindowsHookEx(hPlay); 
    end; 
    end; function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall; 
    begin 
    recOK:=1; 
    Result:=0; if iCode < 0 then 
    Result := CallNextHookEx(hHook,iCode,wParam,lParam) 
    else if iCode = HC_SYSMODALON then 
    recOK:=0 
    else if iCode = HC_SYSMODALOFF then 
    recOK:=1 
    else if ((recOK>0) and (iCode = HC_ACTION)) then begin 
    EventArr[EventLog]:=pEventMSG(lParam)^; 
    EventLog:=EventLog+1; if EventLog>=1000 then begin 
    UnHookWindowsHookEx(hHook); 
    end; 
    end; 
    end; procedure TForm1.FormCreate(Sender: TObject); 
    begin 
    Button1.Caption:='纪录'; 
    Button2.Caption:='停止'; 
    Button3.Caption:='回放'; 
    Button4.Caption:='范例'; 
    Button2.Enabled:=False; 
    Button3.Enabled:=False; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    begin 
    EventLog:=0; 
    //建立键盘鼠标操作消息纪录链 
    hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0); 
    Button2.Enabled:=True; 
    Button1.Enabled:=False; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin 
    UnHookWindowsHookEx(hHook); 
    hHook:=0; Button1.Enabled:=True; 
    Button2.Enabled:=False; 
    Button3.Enabled:=True; 
    end; procedure TForm1.Button3Click(Sender: TObject); 
    begin 
    PlayLog:=0; 
    //建立键盘鼠标操作消息纪录回放链 
    hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc, 
    HInstance,0); Button3.Enabled:=False; 
    end; end.  
      

  2.   

    我这里有一个在对方程序中创建菜单并实现功能的,和创建按钮有点区别,不过楼主可以看看。代码http://download.csdn.net/source/3063116
      

  3.   

    先找到目标窗口句柄
    然后创建一个线程CreateWindowExW(0,L"Button"...
    然后消息循环
      

  4.   


    怎么创建toolbutton 按钮
      

  5.   

    delphi的toolbutton不是windows内置的控件,除了delphi的vcl程序,其他进程都没有注册这种窗口类,所以不能用。你只能自己去模拟toolbutton