【问题标题】:C/C++ program to press key every X secondsC/C++ 程序每 X 秒按键一次
【发布时间】:2013-08-01 15:52:57
【问题描述】:

我有一些使用 C/C++ 语言的经验。 但是我正在玩一个游戏(我的独立软件),我想制作一个与游戏交互的 C 程序,按 2Space键> 每两秒。 它适用于 Windows。

有什么想法吗?

【问题讨论】:

  • 取决于操作系统。 windows还是linux?
  • 我建议您使用以下之一:en.wikipedia.org/wiki/Drinking_bird
  • 好的,它适用于 Windows。我明白你的意思,josh,但现在我需要一个函数来生成一个模拟我从键盘按下一个键的事件。

标签: c++ c time key


【解决方案1】:

查看函数SendInputkeybd_event。这些函数会告诉 Windows 按下一个键。

您需要做的就是创建一个每 2 秒休眠一次的循环。 keybd_event 是旧约定,但它是我熟悉的约定。

VOID WINAPI keybd_event(
  _In_  BYTE bVk,
  _In_  BYTE bScan,
  _In_  DWORD dwFlags,
  _In_  ULONG_PTR dwExtraInfo
);

下面会模拟按下NumLock

// Simulate a key press
keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0);

// Simulate a key release
keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

【讨论】:

  • keybd_event 比 SendMessage() 差得多。在我所有的项目中,相比之下 keybd_event 是一件很痛苦的事情。
  • 我从来没有遇到过任何问题。我曾经用它来让我用 WiiMote 打字,但使用标准窗口消息是一种更好的方法。
  • keybd_event 我认为仅适用于前台窗口,这实际上可能无法很好地转化为游戏。我知道对于网站,keybd_event 缺少很多功能。
【解决方案2】:

在 Windows 中,这很容易。制作一个 C++ 控制台程序。在您的程序中,您需要搜索 Windows 中的所有“窗口”。 Microsoft 将这些 Windows 窗口句柄 (HWND) 称为。您可以使用 FindWindowEx 搜索它们:http://msdn.microsoft.com/en-us/library/windows/desktop/ms633500(v=vs.85).aspx。一旦你找到你的窗口(按名称),你可以发送到窗口 HWND 按键。这是通过 SendMessage() 完成的;每 2 秒循环一次,就完成了!

您可以使用 Visual Studio 的 Spy++ 找到您正在搜索的窗口的属性。这将使您轻松知道要搜索的窗口名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多