轮询操纵杆C#

时间:2009-04-09 01:51:23

标签: c# .net multithreading polling input-devices

我有一个应用程序,记录按空格键的日期/时间 不幸的是,由于各种原因,窗户并不总是有焦点。例如病毒检查器弹出窗口,itunes更新,Windows更新等

所以我觉得很酷的想法是使用操纵杆按钮,然后无论哪个窗口都有焦点,我总能检测按钮按下事件并记录按下的日期/时间。

现在我看了几个游戏教程,但他们似乎将操纵杆轮询绑定到屏幕刷新事件中,因为在游戏中我猜计算机是否很慢并且屏幕不经常刷新,按下的操纵杆按钮无论如何都没有区别。

这不太适合我的需要,所以我正在寻找运行一个会经常轮询操纵杆的线程

我的问题是

  1. 是后台主题最佳解决方案
  2. 我应该多久轮询一次操纵杆
  3. 我应该使用什么样的计时器来确定轮询频率。
  4. 我希望这些回复至少相当于一个键盘。如果触发按下,还需要确保它不会自动重复。

    任何示例代码(C#)赞赏

    感谢

    亚历

3 个答案:

答案 0 :(得分:2)

如果您只是因为无法捕获键盘事件而想要轮询操纵杆,我认为您需要重新制定策略。

即使您的表单没有焦点,也有一些方法可以确保您知道键盘状态。

  1. 您可以设置一个系统范围的键盘钩子,可以使用SetWindowsHookEx API调用在C#中完成。
  2. 这在非托管代码和Windows API中有点钻研,但我认为这比轮询操纵杆更好,因为您不需要在计算机上添加操纵杆只是因为您需要在记录时捕获日期时间空格键。

    在谷歌搜索C#中的键盘钩子。它比许多人相信容易。

    我认为使用计时器对象来做这件事根本不是一个好主意。因为我相信你说你需要按下按键才能这样做。

答案 1 :(得分:1)

您最好的选择是在表单上创建一个Timer对象,并将操纵杆检查绑定到Tick事件。

我还发现每100毫秒(每秒10次)运行这样的简单内容对CPU使用率的影响可以忽略不计。

答案 2 :(得分:1)

使用像AHK (Auto HotKey)之类的东西它是一种可以编译成EXE的简单语言,专为自动键盘和鼠标而设计,我不是百分之百确定它与操纵杆的工作情况有多好,但是我“我相信他们有可能为wii遥控器写了一些东西。

如果需要,IRC频道和论坛也总是有人愿意提供帮助。