工控编程吧

标题: 上位机MFC如何模拟键盘按键 [打印本页]

作者: qq263946146    时间: 2019-8-20 10:27
标题: 上位机MFC如何模拟键盘按键
  1. void CDemoDlg::OnTest1()
  2. {
  3.         //模拟NUM LOCK按键
  4.         keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
  5.         keybd_event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);        
  6. }

  7. void CDemoDlg::OnTest2()
  8. {
  9.         //模拟CAPS LOCK按键
  10.         keybd_event(VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
  11.         keybd_event(VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);        
  12. }

  13. void CDemoDlg::OnTest3()
  14. {
  15.         //模拟SCROLL LOCK按键
  16.         keybd_event(VK_SCROLL, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
  17.         keybd_event(VK_SCROLL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);        
  18. }
复制代码


可以添加三个复选框来测试上面的代码。按钮状态 的自动获取,我们可以在PreTranslateMessage函数中添加。

  1. BOOL CDemoDlg::PreTranslateMessage(MSG* pMsg)
  2. {
  3.         if (pMsg->message == WM_KEYUP)
  4.         {
  5.                 BYTE KeyboardState[256];

  6.                 //获得虚拟键状态
  7.                 ::GetKeyboardState(KeyboardState);

  8.                 if (KeyboardState[VK_NUMLOCK] & 0x01)
  9.                 {
  10.                         CButton* pButton = (CButton*)GetDlgItem(IDC_TEST1);
  11.                         pButton->SetCheck(TRUE);
  12.                 }
  13.                 else
  14.                 {
  15.                         CButton* pButton = (CButton*)GetDlgItem(IDC_TEST1);
  16.                         pButton->SetCheck(FALSE);
  17.                 }

  18.                 if (KeyboardState[VK_CAPITAL] & 0x01)
  19.                 {
  20.                         CButton* pButton = (CButton*)GetDlgItem(IDC_TEST2);
  21.                         pButton->SetCheck(TRUE);
  22.                 }
  23.                 else
  24.                 {
  25.                         CButton* pButton = (CButton*)GetDlgItem(IDC_TEST2);
  26.                         pButton->SetCheck(FALSE);
  27.                 }

  28.                 if (KeyboardState[VK_SCROLL] & 0x01)
  29.                 {
  30.                         CButton* pButton = (CButton*)GetDlgItem(IDC_TEST3);
  31.                         pButton->SetCheck(TRUE);
  32.                 }
  33.                 else
  34.                 {
  35.                         CButton* pButton = (CButton*)GetDlgItem(IDC_TEST3);
  36.                         pButton->SetCheck(FALSE);
  37.                 }
  38.         }

  39.         return CDialog::PreTranslateMessage(pMsg);
  40. }

复制代码
(, 下载次数: 0)