请教API高手有关keybd_event()的用法!!!

christopher_hp 2003-01-04 01:46:59
加精
对于keybd_event()的四个参数我不是很明白,想请问一下。还有用法
keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event('R', 0, 0 ,0);
keybd_event('R', 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
这段代码是打开运行,可是我不明白每一句的意思,为什么只执行第一句不能打开开始菜单!!!!
请教高手讲解一下!!
...全文
6264 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
constantine 2003-05-26
  • 打赏
  • 举报
回复
ii
zyl910 2003-01-10
  • 打赏
  • 举报
回复
函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生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)的前缀字节。DEYEVENTF_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。

dext 2003-01-08
  • 打赏
  • 举报
回复
第二个问题:Send WM_CHAR/WM_KEYDOWN message
dext 2003-01-08
  • 打赏
  • 举报
回复
就相当于 Win+R !
你当然是——
1.按下 Win Button
2.不放开 Win 按 R
3.松开 R
4.松开 Win

若想打开开始菜单,如下:

keybd_event(VK_LWIN, 0, 0 ,0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
zbc 2003-01-07
  • 打赏
  • 举报
回复
第一二行是按下相应的键,第三四行是松行相应的键
wormie4evr 2003-01-07
  • 打赏
  • 举报
回复
可以先 SetFocus 目标窗口再 keybd_event, 但这方法不十分保险~~
避免用 Send/PostMessage 发键盘鼠标消息.
christopher_hp 2003-01-07
  • 打赏
  • 举报
回复
但是这个函数并能对一个窗口发消息,它只能让触发它的窗口键盘消息。
比如在ButtonClick()里面写
{
keybd_event(VK_CONTROL, 0, 0 ,0);
keybd_event(VK_F3, 0, 0 ,0);
keybd_event(VK_F3, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
}
在FormKeyDown里面写,当键盘安下的是Ctrl+f3就ShowMessage("OK");是收不到的,只能在ButtonKeyDown里面写才可以显示消息,
那如果要给指定窗体发呢?尤其是组合键!
用SendMessage()怎么发组合键呢?
ccrun.com 2003-01-07
  • 打赏
  • 举报
回复
哇,老侃都两星了。向你学习。
ccrun.com 2003-01-07
  • 打赏
  • 举报
回复
是啊。后两句说的明白,key up嘛。呵呵。
NowCan 2003-01-07
  • 打赏
  • 举报
回复
为什么只执行第一句不能打开开始菜单!!!!
因为那只是按下<win>键,还要抬起<win>键才能打开开始菜单。
不信,你按住<win>键看看是什么效果
^^^^

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧