【发布时间】:2013-07-27 12:09:01
【问题描述】:
我正在尝试在一个项目中使用 Gma.UserActivityMonitor 库,但遇到了一个我自己无法克服的错误。
在HookManager.Callbacks.cs 文件中有一个名为EnsureSubscribedToGlobalMouseEvents 的静态方法,代码如下(或多或少):
var asm = Assembly.GetExecutingAssembly().GetModules()[0];
var mar = Marshal.GetHINSTANCE(asm);
s_MouseHookHandle = SetWindowsHookEx(
WH_MOUSE_LL,
s_MouseDelegate,
mar,
0);
//If SetWindowsHookEx fails.
if (s_MouseHookHandle == 0)
{
//Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.
int errorCode = Marshal.GetLastWin32Error();
//do cleanup
//Initializes and throws a new instance of the Win32Exception class with the specified error.
throw new Win32Exception(errorCode);
}
SetWindowsHookEx 总是返回 0 并且上面的代码不断抛出异常消息 The specified module could not be found 并且对 Marshal.GetLastWin32Error 的调用返回代码 126。我可以成功运行 Gma.UserActivityMonitor 的原始项目提供的演示,但由于我的项目有点太复杂,无法在这里解释,我无法详细解释它与我的区别。我只是希望有人能盲猜这个问题。
顺便说一句,在项目的常见问题解答中,当仅在调试项目时检查 Enable Visual Studio hosting process 时,据说其他人遇到了与我接近的问题(SetWindowsHookEx 返回错误)。所以我取消选中了我的那个框,但我仍然遇到同样的问题,不仅在调试模式下,而且当我在 Windows 资源管理器中双击发布文件时(不涉及 Visual Studio)。
为了提供更多信息,在演示项目(工作正常)中,asm 变量指向{Gma.UserActivityMonitor.dll},在我的项目中抛出异常也是如此!
【问题讨论】:
-
可能与所涉及进程的位数有关...
-
能否请您解释更多或指出正确的资源?
-
挂钩通常涉及一些代码成为目标进程的一部分。这可以通过不同的方式实现,但基本上任何关于您的进程、挂钩进程和操作系统的位数差异都可能导致问题和/或错误行为。
-
您能告诉我在这种情况下我该怎么办吗?有什么建议吗?
-
对于这个特定的库,更改源代码可能会有所帮助(有关详细信息,请参阅stackoverflow.com/questions/2774741/module-not-found)。
标签: c# setwindowshookex