keybd_event 简便用法

本文介绍了一个使用C/C++实现的模拟键盘操作的示例代码,包括按键触发、发送Ctrl+S保存命令、Ctrl+A全选及输入文件名等操作。通过线程调用实现了模拟键盘事件的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define doKeyEvent(key, bUp, bExt) \
do{ \
  BYTE vsc = MapVirtualKey(key, MAPVK_VK_TO_VSC); \
  DWORD flag = ((bExt)? KEYEVENTF_EXTENDEDKEY:0)|((bUp)? KEYEVENTF_KEYUP:0); \
  keybd_event(key, vsc, flag, 0); \
  Sleep(10); \
}while(0);
#define doKeyClick(key, bExt) \
do \
{ \
  doKeyEvent(key, 0, bExt); \
  doKeyEvent(key, 1, bExt); \
}while(0);
 
DWORD __stdcall SimKeyboSave(LPVOID lParam)
{
  HWND hWnd = (HWND)lParam;
  SetForegroundWindow(hWnd);
 
  //Ctrl+S save
  doKeyEvent(VK_CONTROL, 0, 1);
  doKeyClick('S', 0);
  doKeyEvent(VK_CONTROL, 1, 1);
 
  //wait for dialog init
  Sleep(5000);
 
  //Ctrl+A select All
  doKeyEvent(VK_CONTROL, 0, 1);
  doKeyClick('A', 0);
  doKeyEvent(VK_CONTROL, 1, 1);
 
  //delete select string
  doKeyClick(VK_DELETE, 0);
 
  //enter new string abc.txt
  doKeyClick('A', 0);
  doKeyClick('B', 0);
  doKeyClick('C', 0);
  doKeyClick(VK_OEM_PERIOD, 0);
  doKeyClick('T', 0);
  doKeyClick('X', 0);
  doKeyClick('T', 0);
 
  //enter return
  doKeyClick(VK_RETURN, 0);
 
  return 0;
}
 
void CMainFrame::OnTest()
{
  // TODO: 在此添加命令处理程序代码
 
 CWnd *pWnd = AfxGetMainWnd();
  HANDLE hThread = CreateThread(NULL, 0, SimKeyboSave, m_hWnd, 0, NULL);
  CloseHandle(hThread);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值