获取"应用程序名称"以及按键
getting the 'name of the application' along with the key taps
为了记录按键敲击,我将挂钩安装为:
BOOL WINAPI installHook(HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved) {
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hinstDLL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
// write here
}
有什么方法可以让我知道当前正在敲击按键的应用程序名称吗?就像我打开了记事本,写了什么东西一样,我能得到记事本应用程序的名称和按键吗?其他一些应用程序也是如此,比如mozilla firefox。
钩子的内部应该是这样的:
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// if it is not a keydown event, continue the chain
if(HC_ACTION != nCode || WM_KEYDOWN != wParam)
return CallNextHookEx(0, nCode, wParam, lParam);
const KBDLLHOOKSTRUCT* messageInfo = reinterpret_cast<const KBDLLHOOKSTRUCT*>(lParam);
// add more code here...
// tell Windows we processed the hook
return 1;
}
messageinfo.vkCode
将包含您要查找的密钥代码。这些代码的官方列表位于:http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx
按键通常会输入到前台窗口中(尽管有时会出现奇怪的窗口布局)。你可以得到前台窗口的标题如下:
TCHAR title[100]; // increase size for longer titles
GetWindowText(GetForegroundWindow(), title, 100);
如果您想获得程序的名称,请使用:
TCHAR title[100]; // increase size for longer program names
GetWindowModuleFileName(GetForegroundWindow(), title, 100);
而且,请记住添加错误检查和检查文档。
相关文章:
- 为什么从文件获取图标时应用程序有时会崩溃?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 以管理员身份运行应用程序时,有没有办法获取非管理员用户名
- 在C++中获取应用程序窗口的大小
- VCL 应用程序何时获取其应用程序>主窗体>句柄?
- 如何从二进制文件中获取应用程序的版本号?
- 按名称问题获取卸载应用程序路径
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何在QT中获取背景应用程序窗口标题
- 如何从 win32 控制台应用程序获取输入
- 在运行时从应用程序获取PE标头时发生运行时错误
- 在进行安装时,构建应用程序获取 ISO c 不允许命名可变
- Qt如何让应用程序获取自身的md5校验和
- 从Qt应用程序获取原始数据包数据
- 使用 AssocQueryString 从 32 位应用程序获取 64 位应用程序命令,但不起作用
- 如何从Adobe AIR应用程序获取HDC或ScreenShot
- 从windows应用程序获取正在运行的java应用程序的进程id
- 如何在GStreamer中从应用程序获取事件
- 无法从我的 c++ 应用程序获取输出
- 在QtC++中从另一个应用程序获取文本字段的值