比如我要发送2个CTRL击键消息,该如何?

解决方案 »

  1.   

    在windows单元里,你可在你的程序里敲入vk_back,然后按住ctrl键,用鼠标左键点vk_back,在新开的窗口里就可发现定义的所有VK_****的定义。
    VK_LCONTROL
    VK_RCONTROL如:
      VK_LBUTTON = 1;
      {$EXTERNALSYM VK_RBUTTON}
      VK_RBUTTON = 2;
      {$EXTERNALSYM VK_CANCEL}
      VK_CANCEL = 3;
      {$EXTERNALSYM VK_MBUTTON}
      VK_MBUTTON = 4;  { NOT contiguous with L & RBUTTON }
      {$EXTERNALSYM VK_BACK}
      VK_BACK = 8;
      {$EXTERNALSYM VK_TAB}
      VK_TAB = 9;
      {$EXTERNALSYM VK_CLEAR}
      VK_CLEAR = 12;
      {$EXTERNALSYM VK_RETURN}
      VK_RETURN = 13;
      {$EXTERNALSYM VK_SHIFT}
      VK_SHIFT = $10;
      {$EXTERNALSYM VK_CONTROL}
      VK_CONTROL = 17;
      {$EXTERNALSYM VK_MENU}
      VK_MENU = 18;
      {$EXTERNALSYM VK_PAUSE}
      VK_PAUSE = 19;
      {$EXTERNALSYM VK_CAPITAL}
      VK_CAPITAL = 20;
      {$EXTERNALSYM VK_KANA }
      VK_KANA = 21;
      {$EXTERNALSYM VK_HANGUL }
      VK_HANGUL = 21;
      {$EXTERNALSYM VK_JUNJA }
      VK_JUNJA = 23;
      {$EXTERNALSYM VK_FINAL }
      VK_FINAL = 24;
      {$EXTERNALSYM VK_HANJA }
      VK_HANJA = 25;
      {$EXTERNALSYM VK_KANJI }
      VK_KANJI = 25;
      {$EXTERNALSYM VK_CONVERT }
      VK_CONVERT = 28;
      {$EXTERNALSYM VK_NONCONVERT }
      VK_NONCONVERT = 29;
      {$EXTERNALSYM VK_ACCEPT }
      VK_ACCEPT = 30;
      {$EXTERNALSYM VK_MODECHANGE }
      VK_MODECHANGE = 31;
      {$EXTERNALSYM VK_ESCAPE}
      VK_ESCAPE = 27;
      {$EXTERNALSYM VK_SPACE}
      VK_SPACE = $20;
      {$EXTERNALSYM VK_PRIOR}
      VK_PRIOR = 33;
      {$EXTERNALSYM VK_NEXT}
      VK_NEXT = 34;
      {$EXTERNALSYM VK_END}
      VK_END = 35;
      {$EXTERNALSYM VK_HOME}
      VK_HOME = 36;
      {$EXTERNALSYM VK_LEFT}
      VK_LEFT = 37;
      {$EXTERNALSYM VK_UP}
      VK_UP = 38;
      {$EXTERNALSYM VK_RIGHT}
      VK_RIGHT = 39;
      {$EXTERNALSYM VK_DOWN}
      VK_DOWN = 40;
      {$EXTERNALSYM VK_SELECT}
      VK_SELECT = 41;
      {$EXTERNALSYM VK_PRINT}
      VK_PRINT = 42;
      {$EXTERNALSYM VK_EXECUTE}
      VK_EXECUTE = 43;
      {$EXTERNALSYM VK_SNAPSHOT}
      VK_SNAPSHOT = 44;
      {$EXTERNALSYM VK_INSERT}
      VK_INSERT = 45;
      {$EXTERNALSYM VK_DELETE}
      VK_DELETE = 46;
      

  2.   

    VK_CONTROL
    SendMessage(handle,WM_KEYDOWN,VK_CONTROL,0);
      

  3.   

    帮我看一下,哪里有问题,感觉目标窗口没有收到消息unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        B1: TButton;
        E1: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        T1: TTimer;
        B2: TButton;
        L1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure B1Click(Sender: TObject);
        procedure T1Timer(Sender: TObject);
        procedure B2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function GetText(Wnd : HWND) : string;
    var
      textlength : integer;
      text : PChar;
    begin
      textlength:=SendMessage(Wnd,WM_GETTEXTLENGTH,0,0);
      if textlength=0 then
        Result := ''
      else begin
        getmem(text,textlength+1);
        SendMessage(Wnd,WM_GETTEXT,textlength+1,Integer(text));
        Result:=text;
        freemem(text);
      end;
    end;function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
    var
      st:string;
    begin
      Result := True;
      //if (IsWindowVisible(Wnd)) and (GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) and (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin
      if (GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) and (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin
        st:=GetText(Wnd);
        IF not(st='') THEN
            Form1.Listbox1.items.add(st);
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      Param : Longint;
    begin
      Form1.Listbox1.Clear;
      Param := 0 ;
      EnumWindows(@EnumWindowsProc , Param);end;
        
    procedure TForm1.B1Click(Sender: TObject);
    begin
        T1.Interval:=StrToInt(E1.Text)*1000;
        T1.Enabled := TRUE;
        L1.Caption :='目前状态:激活';
    end;procedure TForm1.B2Click(Sender: TObject);
    begin
        T1.Enabled := FALSE;
        L1.Caption :='目前状态:中止';
    end;procedure TForm1.T1Timer(Sender: TObject);
    var
      Handle: Integer;
      Param : Longint;
    begin
        Handle := FindWindow(nil,pchar(Form1.listbox1.Items[listbox1.ItemIndex]));
        if Handle<>0 then
        begin
            SendMessage(Handle,WM_KEYDOWN,VK_RETURN,0);
            SendMessage(Handle,WM_KEYUP,VK_RETURN,0);
        end;end;end.
      

  4.   

    EnumWindowsProc 要有一个return:=wnd;