c# - 如何在 Windows 7 下记录来自非标准按键的按键事件

标签 c# c++ c windows windows-7

我有一个双重问题,我对它的两个分支都不熟悉。

背景: 我从 MSI 购买了一台新笔记本电脑。作为我以前从未见过的功能,CD 驱动器上没有安装机械弹出按钮。相反,数字弹出按钮是功能键上方“智能栏”的一部分。不幸的是,智能栏的底层软件非常糟糕。即使在被动模式下,它也会占用屏幕空间并且它会占用任务栏上的空间。*我已经卸载了这个软件。

项目: 我想编写一个在启动时运行并隐蔽在后台的程序。该程序的唯一功能是使弹出按钮弹出 CD 驱动器。

第一步:我想知道当我按下那个按钮时会发生什么。我怀疑我不需要编写任何代码,但可以使用一个实用程序——我的一位同事提到了一个“事件记录器”,但谷歌没有提供任何用处。

第二步:我想编写所述程序,这意味着我需要与 WIN32 或可能与 .net 框架交互,以执行当我右键单击“我的电脑”下的 CD 驱动器时 Windows 使用的相同功能调用然后点击“弹出”。

问题: 第一个问题:您知道一个实用程序可以告诉我按下按钮时会发生什么吗?

第二个问题:你知道我需要调用什么函数来弹出驱动器吗?

第三个问题:我是否忽略了一些明显的其他路径?

我愿意接受从“我遇到了同样的问题,这是我编写的解决方案的源代码”到“我想本教程可能对您有帮助吗?”的任何答案

我更愿意在 C/C++/C# 中工作,但我愿意接受其他建议。如标题所述,我在 Windows 7 下工作。

*出于好奇,该软件是 MSI S-Bar,出于某种原因被吹捧为该系列笔记本电脑的“功能”。

最佳答案

我自己也遇到过同样的问题。不知道大家对autohotkeys熟悉不熟悉,但是用它写了一个脚本来替换s-bar。

AutoHotKey (AHK) 是一种用于 Windows 的开源宏创建和脚本语言,具有大量功能。您可以通过程序本身运行脚本,或将它们编译成可在任何计算机上运行的可执行文件。

只需几行代码就可以使弹出 CD 驱动器工作:

;CD eject button
SC142::
Drive, Eject
return

SC142 是键码。它在每台 MSI 笔记本电脑上可能都不一样,但是如果您将“#InstallKeybdHook”行放在脚本的顶部。您可以通过 GUI 查看 AHK 看到的所有键盘事件。

我能够将大多数按钮映射到我的 MSI 笔记本电脑上的各种功能,尽管 AHK 不会从其中一个按钮捕获键盘事件。

例如:

;Star key (AHK only receives KeyUp event)
SC139 UP::
Run, Control
return

;CinemaPro Key
SC13B::
Run, "C:\Program Files\Media Player Classic\mpc-hc64.exe"
return

关于c# - 如何在 Windows 7 下记录来自非标准按键的按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7191857/

相关文章:

c# - 如何在 .NET Core 1.0 中使用 Entity Framework 运行 sql 脚本?

c# - 估计 GUID 中数字出现的概率

c++ - C++: vector 数组

c++ - 如何控制两个线程访问同一个共享数据的执行顺序

c - 是否有必要将 0 传递给数组

c# - 我应该为包含 10 个或更少项目的集合使用字典,还是有更好的选择?

c# - 使用 Reactive Extensions (Rx) 进行套接字编程实用吗?

C++ .hpp 和 .cpp

c - 在 Turbo C 中覆盖背景的移动对象

objective-c - 没有环境变量的参数数组?