Articles of 钩子

如何在Linux上使用input子系统来获取键盘事件

我正在用C写一个Linux程序,我需要截取某些键盘笔划。 使用input子系统(读/写/ dev /input/事件X),我可以接收键盘笔画(使用“读取”function)或模拟键盘笔画(使用“写入”function)。 当使用“读”function时,我可以捕捉用户的键盘笔画,但这个事件是传播的,我不知道如何使用它。

Linux X11 – 全局键盘钩子

是否可以(或如何)创build一个在Windows(SetWindowsHookEx())中像全局钩子一样工作的机制(在Linux X11,C ++中)? 我希望能够抓住关键事件,但有可能进一步传播 。 我试图使用XGrabKey解决scheme(就像在xbindkeys中 ),但是当我设置捕获关键事件,这个事件是“消耗”。 这个机制的要求如下: 全球/全系统 – 捕捉事件,不pipe重点窗口如何 “抓住”和“通过”的可能性 它一定很快 示例代码如下所示: bool myFlagIsSet = false; XEvent event; while (true) { while (XPending(display) > 0) { usleep(SLEEP_TIME); } XNextEvent(display, &event); switch (e.type) { case KeyPress: if (myFlagIsSet) { //do not propagate } // propagate break; case KeyRelease: if (myFlagIsSet) { //do not propagate […]

全局键盘钩子与C ++

我已经看到很多有关钩子的教程和文章,但是我不太明白。 主要是因为每个例子使用不同的解决scheme。 我知道我将不得不实施一些能够保持活力的东西。 通常这是一种循环。 Q1:如果这个循环在callback函数的某个类中,是否会阻止线程执行它们? 我知道这将需要一段时间,但我会高度赞赏一些很好解释的全球键盘钩子的例子。 或者简单地把我和一些可执行的例子联系起来。 (相信我,我一直试图谷歌过去几个小时)。 谢谢

在Windows中拦截移动命令

我正在为一个文档标记软件的插件工作。 我想拦截在Windows资源pipe理器中的移动操作,并让标记软件来处理它。 我正在考虑钩,DLL注入。 MOVE可以由用户以几种方式发起,我需要拦截所有这些。 有没有人有其他的想法。 如果你可以发布一些示例链接,这将是很好的。 TIA Sujay

挂钩线程创build/终止

是否有可能挂钩到Windows上的线程终止? IOW,如果进程中的线程(对其他进程和线程不感兴趣)已经终止(通常或者更重要 – 强制),我希望得到通知。 另外,挂钩到线程创build也可以。 理由:我有一个基于每个线程pipe理一些信息的库(把它想象成一个进程范围内的每个线程caching来获取一些信息)。 当线程被终止时,我必须从caching中删除所有线程特定的信息。 [caching关联是通过使用线程ID来实现的,这些线程可能会被重用于将来的线程。] “正常”执行顺序没有问题,因为库用户将从库中分离当前线程,这将清除状态。 如果有人杀死拥有caching资源的线程,就会出现问题。

创build一个Windows钩子来检测菜单点击

我想附加到一个单独的应用程序(例如Microsoft Excel),并检测某个菜单项何时被点击(或新版本中的function区命令,无论)。 我以为我可以使用user32.dll的RegisterWindowMessage来做到这一点,但我不知道要拦截哪些消息。 理想情况下,我想概括一下,并检测如下内容: "menu item XXX was clicked in the app YYY" 我发现这个CodeProject文章显示如何注册事件的钩子,如控件的创build,应用程序的启动/停止等,但我找不到如何获得button点击或菜单点击的例子。 这甚至有可能吗? 我在正确的轨道上,还是我需要采取不同的方法?

问题 – TCHAR作为LPARAM属于另一个进程/线程的窗口

所以我通过C书的例子来玩/执行与Windows窗口,有一些关于DLL注入部分,让我难以置信,我无法解决它。 我创build了一个属于另一个线程/进程的对话框,我试图发送它的TCHARvariables,以便它可以在某些函数中使用该var(函数和tchar都在同一个dll文件中) 所以当创build对话框并且坐在另一个线程中时,我会发送一条消息。 首先我声明tchar TCHAR finalpath[MAX_PATH]; 然后,我只是填充信息(我在dll线程中,而不是在对话框的线程中,让我也提到,我必须在dll线程中做到这一点,因为这只是填补所需的tchar(我需要得到dll的工作目录,并填写在tchar)) 所以,当我得到这个信息在我的tchar我想发送一个消息到对话框,并使用tchar作为LPARAM(wparam是hwnd顺便说一句) SendMessage(hWndDIPS, WM_APP, (WPARAM) lista, (LPARAM)finalpath); 之后,我在另一个线程对话框过程循环中做基本的功课… INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { chHANDLE_DLGMSG(hWnd, WM_CLOSE, Dlg_OnClose); case WM_APP: SaveListViewItemPositions((HWND) wParam, (TCHAR)lParam); break; } return(FALSE); } 应该接受参数的函数(这个函数驻留在共享dll中,并且如上所述被程序调用,定义如下.. void SaveListViewItemPositions(HWND hWndLV,TCHAR sejv []){…} 我得到的编译器错误是 Error 7 error C2664: 'SaveListViewItemPositions' : cannot convert […]

检测键盘挂钩

有没有办法来检测哪些程序或模块正在听一个键盘钩子? 通过Sysinternals也许?

在窗口中检索全局钩子链

我需要在Windows中获取全局钩子链中的函数列表,并在可能的情况下获取相应的应用程序。 但是我不知道如何从全局钩子链中获取信息 。 据我所知,没有Windows API这样做,所以我想我必须通过parsing钩链链接列表来find它们。 问题是,我不知道这个链接列表的数据结构,它的开始地址。 有谁知道Windows如何pipe理其全局钩链?

挂钩__thiscall而不使用__fastcall

假设您需要在x86 Windows上挂钩/绕行__thiscalltypes的函数,为了实现这一点,您需要将void *传递给shim函数。 是的,这在技术上是C ++的“可怕的滥用”,但这是函数挂钩,而不是编码便携式应用程序的练习。 例如,假设你需要挂钩一个这样的函数: void __thiscall SomeClass::MemberFunction(int b) { this->somevar = b; } 显然众所周知,你可以创build一个__fastcall函数来使用一个额外的参数来处理EDX,但这有点…蹩脚。 所以问题是: 你能想到能够将非静态C ++类成员函数的types转换为void *variables的技巧?