请问如何给一个应用程序发消息,比如是模拟按键或鼠标,就好象是外挂程序一样,请举个例子!谢谢!

解决方案 »

  1.   

    http://delphi.about.com/od/windowsshellapi/l/aa093003a.htm
      

  2.   

    SendMessage(GetHandle, WM_LBUTTONDOWN, 0, MAKELPARAM(x,y));
    SendMessage(GetHandle, WM_LBUTTONUP, 0, MAKELPARAM(x,y));getHandle是获取目标句柄;在x/y位置实现鼠标 onclick
      

  3.   

    给你个鼠标模拟的例子:
    下面给你写了个例子:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
    rect:TRect;
    x,y,lPara:Integer;
    begin
    GetWindowRect(Self.Handle,rect);//获得当前窗口的位置
    x:=rect.Left+10;                //当前窗口左上角x坐标加10
    y:=rect.Top+10;                //当前窗口左上角y坐标加10
    lPara:=x+(y shl 16);            //就算出lParam的值//向当前窗口发送左键按下消息,相当于鼠标在相对窗口(10,10)的位置按下
    PostMessage(Self.Handle,WM_LBUTTONDOWN,MK_LBUTTON,lpara);end;//相应鼠标按下事件
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    showmessage('WM_lbuttondown 在 ' + IntToStr(X) + ','+ IntToStr(y));
    end;end.
      

  4.   


    简单点的可以用键盘/鼠标 事件
    给你个键盘事件的例子:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    const
    vk_o=79;
    vk_k=75;
    begin
    edit1.SetFocus;
    keybd_event (VK_O, 0, 0, 0);   //press H
    keybd_event (VK_O, 0, KEYEVENTF_KEYUP, 0);   // release H
    keybd_event (VK_K, 0, 0, 0);   //press H
    keybd_event (VK_K, 0, KEYEVENTF_KEYUP, 0);   // release H
    end;end.
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    beginwinexec('notepad',1);
    //把记事本窗口激活
    setforegroundwindow(findwindow(nil,'无标题-记事本'));//模拟输入 'abc'
    keybd_event(65,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(65,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
    keybd_event(66,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(66,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(67,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//模拟 alt + F 打开文件菜单
    keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(70,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(70,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
    keybd_event(VK_MENU,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);//模拟输入 按 s  保存
    keybd_event(83,0,KEYEVENTF_EXTENDEDKEY or 0,0);
    keybd_event(83,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
    end;