SendMessage(hwnd,WM_CHAR ,'0',0)表示往某一edit box里输入一字符,如何用SendMessage模拟某一按钮被按下(例如ok按钮)被按下该如何写?我用::SendMessage(hwnd1,BN_CLICKED,0,0))

解决方案 »

  1.   

    错了,是: 
      {$EXTERNALSYM WM_LBUTTONDOWN}
      WM_LBUTTONDOWN      = $0201;
      {$EXTERNALSYM WM_LBUTTONUP}
      WM_LBUTTONUP        = $0202;
      

  2.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    sendmessage(button1.Handle, WM_LBUTTONDOWN,0,0);
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    sendmessage(button1.Handle,WM_LBUTTONUP,0,0);
    end;
      

  3.   

    上面的理解错误!!我另一个程序窗体指的是别的程序,比如qq,codesite,不是在同一个应用程序里面的
      

  4.   

    先使用FindWindow()函数找到该按钮的句柄,然后使用PostMessage()来发送WM_KEYDOWN消息。
      

  5.   

    好,贴出来!!!不起作用阿,不知道原因,请大师们指点!!!!!!
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        Memo1: TMemo;
        Button1: TButton;
        Edit1: TEdit;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
        hWnd:LongInt;
        thehwnd:longint;
    implementation{$R *.dfm}
     function  EnumChildWndProc(AhWnd:LongInt;
      AlParam:lParam):boolean;stdcall;
    var
      WndClassName: array[0..254] of Char;
      WndCaption: array[0..254] of Char;
    begin
      GetClassName(AhWnd,wndClassName,254);
      GetWindowText(aHwnd,WndCaption,254);
      if wndcaption='Close' then
           begin
           thehwnd:= AhWnd;
           showmessage(inttostr(thehwnd));
           end;
      with form1.memo1 do
      begin    lines.add( string(wndClassName));
        lines.add( string(wndCaption));
        lines.add('-------');
      end;
      result:=true;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      memo1.Lines.Clear;
      Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');
      hWnd:=FindWindow(nil,pchar(Edit1.Text));
      if hWnd<>0 then
      begin
        EnumChildWindows(hWnd,@EnumChildWndProc,0);
      end
      else  MessageBox(self.handle,'没找到该窗口句柄','提示',0);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
    bid:integer;
    begin
    //SendMessage(hWnd,WM_LBUTTONDOWN,0,LongInt(Pchar('sdafdsf')));
    bid:=getdlgctrlid(thehwnd);
    //getdlgitem
    SendMessage(hWnd,wm_command,MAKEWPARAM( bid, BN_CLICKED ),thehwnd);
    //上面不起作用阿,不知道原因,请大师们指点!!!!!!
    //SendMessage(hWnd,wm_command,bid,thehwnd);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    edit1.Text:='codesite dispatcher settings';end;end.
      

  6.   

    如上面兄弟所说,要Send两个MessageSendMessage(hWnd,WM_LBUTTONDOWN,0,0);
    SendMessage(hWnd,WM_LBUTTONUP,0,0);hWnd为你找到的按钮句柄
      

  7.   

    //这个可以解决你的问题
    //功能自动发送消息
    //你打开一个QQ‘发送消息的窗口‘
    procedure TForm1.Button1Click(Sender: TObject);
    var
     hwnd1,hwnd2,hwnd3: DWORD;
    begin
      hwnd1:=FindWindow(nil,'发送消息');
      if hwnd1<>0  then
      begin
        hwnd2:= findwindowex(hwnd1,0,'RICHEDIT','');
        hwnd3:=edit1.Handle;
        SendMessage(hwnd2, WM_SETTEXT, 1004,integer(pchar(edit1.Text)));
        SendMessage (hwnd1, WM_COMMAND, 1, 0);
      end;
    end;
      

  8.   

    SendMessage (hwnd1, WM_COMMAND, 1, 0);  //这句话可以发送消息
      

  9.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
        SendMessage(thehwnd, WM_LBUTTONDOWN, 0, 0);
        SendMessage(thehwnd, WM_LBUTTONUP, 0, 0);
    end;
      

  10.   

    //这样也可以实现procedure TForm1.Button1Click(Sender: TObject);
    var
     hwnd1,hwnd2,hwnd3,hwnd4: DWORD;
    begin
      hwnd1:=FindWindow(nil,'发送消息');
      if hwnd1<>0  then
      begin
        hwnd2:= findwindowex(hwnd1,0,'RICHEDIT','');
    //    hwnd2:=ChildWindowFromPoint(hwnd1, point(50, 50));
        hwnd3:=edit1.Handle;
        SendMessage(hwnd2, WM_SETTEXT, 1004,integer(pchar(edit1.Text)));
        hwnd4:= findwindowex(hwnd1,0,'Button','送讯息(&S)'); //找到送信息按钮,
        SendMessage (hwnd4,WM_LBUTTONDOWN , 0, 0);  //模拟按下
        SendMessage (hwnd4,WM_LBUTTONUp , 0, 0);
      end;
    end;