c++使用 Timer 作为 Guard 发送 ENTER 键盘事件

发布于 2024-11-05 10:42:59 字数 1343 浏览 0 评论 0原文

std::cout<<"SendKeyBoardEvent "<<keyBEventType<<endl;
// Simulate a key press
  Sleep(200); //in

if (!strcmp(keyBEventType,"ENTER"))
{
    // ENTER key down
      keybd_event(VK_RETURN,0x9C,0,0);
    // ENTER key up
     keybd_event(VK_RETURN,0x9C, 0,0);
}

当我从我的工具运行此代码时,我必须使用两个向下箭头键和 Enter 或除 ALT-ENTER 之外的任何其他两个组合键。我用过 KEY_UP 和 CONTROL。有人在这里看到我的问题吗?我很感谢你的帮助。

以计时器作为守卫的 getch() 解决方案,以防万一 FTP 永远传输(特殊客户端)

计时器到期或用户先输入密钥

void waitBoostSleep(int seconds) 
{ 
  boost::this_thread::sleep(boost::posix_time::seconds(seconds)); 
} 

int waitTime(int sec)
{
  waitBoostSleep(sec);
  a->SendKeyBoardEvent("ENTER");
  std::cout<<"TimerExpired after "<<sec<<endl;
  return 0;
}

int StopSicFTPRingBuffer (int TimeInSeconds)
{
boost::thread t66(&waitTime,TimeInSeconds);
if  (getch() == 13)
{
    a->SendKeyBoardEvent("ENTER");
    return 1;
}
t66.join();

return 0;
}

从主程序

boost::thread t77(&StopSicFTPRingBuffer,45);
system(SicFTPR.str().c_str());                      
t77.join();

系统将调用一个特殊的 ftp 客户端,用户可以使用 ENTER 返回来中断它。

万一像我这样的人需要这样的要求。它对我来说非常有效。 我设置了45秒,如果定时器到期,那么ENTER键将执行自动停止FTP传输。如果用户在计时器到期之前先按 ENTER 键,则 FTP 传输将停止。

std::cout<<"SendKeyBoardEvent "<<keyBEventType<<endl;
// Simulate a key press
  Sleep(200); //in

if (!strcmp(keyBEventType,"ENTER"))
{
    // ENTER key down
      keybd_event(VK_RETURN,0x9C,0,0);
    // ENTER key up
     keybd_event(VK_RETURN,0x9C, 0,0);
}

When I run this code from my tool, I must use two keys arrow down and and enter or any other two keys combo except ALT-ENTER. I had used KEY_UP and CONTROL. anyone see my problem here? I appreciate for your help.

SOLUTION for getch() with Timer as Guard In-Case FTP Transferred(SpecialClient) Forever

Either Timer Expire or User Enter Key first

void waitBoostSleep(int seconds) 
{ 
  boost::this_thread::sleep(boost::posix_time::seconds(seconds)); 
} 

int waitTime(int sec)
{
  waitBoostSleep(sec);
  a->SendKeyBoardEvent("ENTER");
  std::cout<<"TimerExpired after "<<sec<<endl;
  return 0;
}

int StopSicFTPRingBuffer (int TimeInSeconds)
{
boost::thread t66(&waitTime,TimeInSeconds);
if  (getch() == 13)
{
    a->SendKeyBoardEvent("ENTER");
    return 1;
}
t66.join();

return 0;
}

From Main Program

boost::thread t77(&StopSicFTPRingBuffer,45);
system(SicFTPR.str().c_str());                      
t77.join();

Sytem will call a special ftp client where it can be interrupted by user with ENTER return.

In-case, someone like me needs this kind of requirements. It worked perfectly for me.
I had set 45 seconds, if the timer expired, then the ENTER key will execute automatic to stop FTP transferred. If user hit ENTER key first before the timer expired, then FTP transferred will be stopped.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女的英雄梦 2024-11-12 10:42:59

你没有按下按键,而是按下了两次按键。试试这个:

// ENTER key down
keybd_event(VK_RETURN, 0x9C, 0, 0);

// ENTER key up
keybd_event(VK_RETURN, 0x9C, KEYEVENTF_KEYUP, 0);

You weren't doing a keyup, you were doing two key downs. Try this:

// ENTER key down
keybd_event(VK_RETURN, 0x9C, 0, 0);

// ENTER key up
keybd_event(VK_RETURN, 0x9C, KEYEVENTF_KEYUP, 0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文