keybd_event函数

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:39   2106   0

keybd_event

   函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中该函数己被使用Sendlhput来替代它。
   函数原型:VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
   参数:
  bVk:定义一个虚据拟键码。键码值必须在1~254之间。
  bScan:定义该键的硬件扫描码。
  dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
  KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。
dwExtralnfo:定义与击键相关的附加的32位值。
   返回值:该函数无返回值。
   备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down位。应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。Windows CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。
  速查:Windows NT:3.1及以上版本;Windows:95及以上版本 ;Windows CE:1.0及以上版本;头文件:winuser.h;库文件:user32.lib。
举例说明:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
edit1 :TEdit;
Timer1 :TTimer;
label1 :TLabel;
FCount :Integer;
procedure OnTimer(Sender: TObject);
procedure OnKeyPress(Sender: TObject; var Key: Char);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1 := TEdit.Create(nil);
edit1.Parent := Self;
edit1.OnKeyPress := OnKeyPress;
Timer1 := TTimer.Create(nil);
Timer1.OnTimer := OnTimer;
label1 := TLabel.Create(nil);
label1.Parent := Self;
label1.Top := 30;
FCount := 0;
end;
procedure TForm1.OnKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
edit1.Text := IntToStr(FCount);
end;
procedure TForm1.OnTimer(Sender: TObject);
begin
Inc(FCount);
label1.Caption := IntToStr(FCount);
if (FCount mod 10) = 0 then
begin
Edit1.SetFocus;
keybd_event(13, 0, KEYEVENTF_EXTENDEDKEY OR 0, 0);
keybd_event(13, 0, KEYEVENTF_KEYUP, 0);
Edit1.Text := IntToStr(FCount);
end;
end;
end.
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP