请教:如何用SendMessage(or postmessgae)发送键组合Ctrl+Enter (100分)

  • 主题发起人 主题发起人 q2
  • 开始时间 开始时间
Q

q2

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个过程中,如何用SendMessage(or postmessgae)向一个控件发送
键组合(Ctrl+Enter)的消息
发送单个键的消息,没问题,问题是发送键组合
 
i want to know too
 
试试
keybd_event(VK_CONTROL ,0,0,0 );//按住ctrl键不放
keybd_event($59,0,0,0); //按V
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);//释放ctrl被按下的状态

 
这样也行
var
KeyState: TKeyBoardState;
begin
GetKeyboardState(KeyState);
KeyState[VK_CONTROL]:=KeyState[VK_CONTROL] or $80;
SetKeyboardState(KeyState);
Memo1.Perform(WM_KEYDOWN,VK_RETURN,0);
 
SendMessage(Handle, WM_KEYDOWN, VK_CONTROL , 0);
SendMessage(Handle, WM_KEYDOWN, VK_RETURN, $40000000);
 
同意 menxin
 
to zleo & menxin
你的方法,对有焦点窗体的控件是没问题的。其实,对焦点控件,也无须这么折腾。
我的目的是想,向另个未获焦点的窗体的控件“发送”(是发送消息,而不是别的)
键组合的消息。
 
是不能实现,还是没有人回答?
 
SendMessage(某窗口句柄, WM_KEYDOWN, VK_CONTROL , 0);
SendMessage(某窗口句柄, WM_KEYDOWN, VK_RETURN, $40000000);
应该就没问题,我曾经想Memo控件送过Ctrl-End,很好用
 
to astros
我试了您的办法,不知怎么就是不行,是不是我的代码有问题,请指教

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (key=13) then BEGIN
memo2.Lines.Append(memo1.text);
memo1.Clear;
END;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Handle, WM_KEYDOWN, VK_CONTROL , 0);
SendMessage(Handle, WM_KEYDOWN, VK_RETURN, $40000000);
end;

end.
 
那个办法当然不行,perform就是sendmessage
 
//举个例子,你把QQ程序,然后把要说的话打在“发送消息”窗体里,通常情况下按
//CTRL+Enter就可以将信息发送出去,现在你不急按,用程序去执行!!!
procedure TForm1.Button2Click(Sender: TObject);
var
h: THandle;
begin
h := FindWindow(nil,'发送消息');
PostMessage(h, WM_KEYDOWN, VK_CONTROL , 0);
PostMessage(h, WM_KEYDOWN, VK_RETURN, $40000000);
end;
 
我倒!要Memo1.Handle才行啊!
 

Similar threads

后退
顶部