怎样模拟键盘的按下事件?(100分)

  • 主题发起人 主题发起人 asaili
  • 开始时间 开始时间
A

asaili

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序里面定义好了ESC的按键处理方法(例如弹出对话框),按下ESC键能够弹出对话框。
现在我希望有程序里面模拟一个按键事件,也就是当程序检测某项条件符合要求时,可以让程序
不用按下ESC键,也能够弹出对话框。
; ;我想用SENDMESSAGE(),谁能帮我一下吗?
 
[:)]

keybd_event [/red]

原型:
keybd_event ( bVk :byte; bScan : Byte; dwFlags: real; ;dwExtraInfo : real)
这个函数模拟了键盘行动
参数表 参数 类型及说明
bVk Byte,欲模拟的虚拟键码
bScan Byte,键的OEM扫描码
dwFlags Long,零;或设为下述两个标志之一
KEYEVENTF_EXTENDEDKEY 指出是一个扩展键,而且在前面冠以0xE0代码
KEYEVENTF_KEYUP 模拟松开一个键
dwExtraInfo Long,通常不用的一个值。api函数GetMessageExtraInfo可取得这个值。允许使用的值取决于特定的驱动程序
 
你使着在delphi ide ;里去看看把
 
谁再给我一点源码看看
 
呵呵!闲来无事,随手贴一段!

var i:boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
; i:=true;
; Form1.KeyPreview := true;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
; if key =#27 { ESC } then 你的sendmessage()事件;
end;

procedure TForm1.button1click(Sender: TObject);
begin
; i:=false;
end;

procedure TForm1.button2click(Sender: TObject);
begin
; if i then 你的sendmessage()事件 else 。。。
end;

你可以测试一下上面的代码,你点击ESC键 和 先点击Button1,再点击Button2的效果是完全一样的。
关键是你定义一个Boolean值,用它监测事件变化即可!
 
源码 ; ;源码 ; ;源码 ; ;源码
procedure TForm1.ButtonSnapShotClick(Sender: TObject);
var
; Bitmap: TBitmap; ; ; // holds a bitmap
begin
; {see which radio button is checked}
; if ImageOptions.ItemIndex = 0
; then keybd_event(VK_SNAPSHOT,1,0,0) ; ;{desktop window snapshot}
; else keybd_event(VK_SNAPSHOT,0,0,0); ; {client window snapshot}

; {check to see if there is a picture}
; if Clipboard.HasFormat(CF_BITMAP) then

; begin
; ; {Create a bitmap to hold the contents of the Clipboard}
; ; Bitmap := TBitmap.Create;

; ; {trap for clipboard bitmap errors}
; ; try
; ; ; {get the bitmap off the clipboard using Assign}
; ; ; Bitmap.Assign(Clipboard);

; ; ; {copy the bitmap to the Image}
; ; ; Image1.Canvas.Draw(0, 0, Bitmap);
; ; finally
; ; ; {the bitmap is no longer needed, so free it}

; ; ; Bitmap.Free;
; ; end;
; end;
end;
 
SendMessage(Handle, WM_CHAR, vk_Escape, 0);
 
你的 esc 处理是在哪儿定义的? OnKeyPress, OnKeyDown, OnKeyUp?

分别用 WM_CHAR, WM_KEYDOWN, WM_KEYUP 消息
用法就是龙丹兄那段代码
 
后退
顶部