keybd_event怎么让某个键一直按住

policelorl 2013-11-13 08:49:51
打开记事本,
如果一直按住‘s’键不放的话,记事本会一直不停的有“s”键入。
以下是用keybd_event来模拟按下S键,但是为什么记事本里只有一个S呢?


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
BOOL ret = RegisterHotKey(0,0x10000,0,VK_F8);
ret = RegisterHotKey(0,0x10000,0,VK_ESCAPE);
if(ret==0) return 0;
MSG m;
WORD *b;
BYTE bt = 0;
while(1)
{
GetMessage(&m,0,0,0);
//TranslateMessage(&m);
//DispatchMessage(&m);
if(m.message == WM_HOTKEY && m.wParam==0x10000)
{
b = (WORD*)&m.lParam;
b++;
switch(*b)
{
case VK_F8:
if(bt==0)
{
keybd_event('S',0,0,0);
bt =1;
}
else
{
keybd_event('S',0,KEYEVENTF_KEYUP,0);
bt = 0;
}
break;
case VK_ESCAPE:
UnregisterHotKey(0,0x10000);
ExitProcess(0);
break;
}
}
}
return 0;
}

...全文
480 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
policelorl 2013-11-16
  • 打赏
  • 举报
回复
不行啊,按一下F8,出一个s,按第二下没反应,按第三下再出一个s,以此类推。。。。。
  • 打赏
  • 举报
回复
引用 2 楼 policelorl 的回复:
VK_F8确认已经注册成功,不然不会打出一个s的。
你别扯了,用我的那个代码,就能要出连续的s来,不信你试
policelorl 2013-11-15
  • 打赏
  • 举报
回复
第四个参数一般不是设置为0吗?
xiaohuh421 2013-11-15
  • 打赏
  • 举报
回复
或许第四个参数对你有帮助.
policelorl 2013-11-14
  • 打赏
  • 举报
回复
VK_F8确认已经注册成功,不然不会打出一个s的。
  • 打赏
  • 举报
回复
很明显 BOOL ret = RegisterHotKey(0,0x10000,0,VK_F8); ret = RegisterHotKey(0,0x10000,0,VK_ESCAPE); //你这相当于VK_F8未注册... 改成下同,就可以了

#include "windows.h"
int APIENTRY WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR     lpCmdLine,
	int       nCmdShow)
{
	BOOL ret = RegisterHotKey(0,0x10001,0,VK_F8);
	ret = RegisterHotKey(0,0x10000,0,VK_ESCAPE);
	if(ret==0) return 0;
	MSG m;
	WORD *b;
	BYTE bt = 0;
	while(1)
	{
		GetMessage(&m,0,0,0);
		//TranslateMessage(&m);
		//DispatchMessage(&m);
		if(m.message == WM_HOTKEY && (m.wParam==0x10000||m.wParam==0x10001))
		{
			b = (WORD*)&m.lParam;
			b++;
			switch(*b)
			{
			case VK_F8:
				if(bt==0)
				{
					keybd_event('S',0,0,0); 
					bt =1;
				}
				else
				{
					keybd_event('S',0,KEYEVENTF_KEYUP,0);
					bt = 0;
				}
				break;
			case VK_ESCAPE:
				UnregisterHotKey(0,0x10000);
				ExitProcess(0);
				break;
			}
		}
	}
	return 0;
}


64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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