Tôi đang cố gắng sử dụng thư viện Gma.UserActivityMonitor trong một dự án và tôi đã gặp phải lỗi mà tôi không thể tự khắc phục được.Gma.UserActivityMonitor & SetWindowsHookEx lỗi 126
Trong tập tin HookManager.Callbacks.cs
có một phương pháp tĩnh gọi EnsureSubscribedToGlobalMouseEvents
với đoạn mã sau (nhiều hơn hoặc ít hơn):
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);
}
Các SetWindowsHookEx
luôn trả 0
và mã ở trên giữ ném một ngoại lệ với thông điệp The specified module could not be found
và cuộc gọi đến Marshal.GetLastWin32Error
trả lại mã 126
. Tôi có thể chạy demo thành công được cung cấp với dự án ban đầu của Gma.UserActivityMonitor nhưng vì dự án của tôi hơi phức tạp để giải thích ở đây tôi không thể đi vào chi tiết giải thích sự khác biệt của nó với tôi. Tôi chỉ hy vọng một người nào đó mù có thể đoán được vấn đề.
BTW, trong Câu hỏi thường gặp của dự án nói rằng những người khác có vấn đề gần gũi với tôi (với SetWindowsHookEx
lỗi trả về) khi Enable Visual Studio hosting process
chỉ được chọn khi dự án được gỡ lỗi. Vì vậy, tôi bỏ chọn hộp đó trong tôi và vẫn còn tôi đang gặp vấn đề tương tự, và không chỉ trong chế độ gỡ lỗi mà còn khi tôi nhấp đúp vào tập tin phát hành trong Windows Explorer (không có Visual Studio tham gia).
Để cung cấp thêm thông tin, trong dự án demo (hoạt động tốt), các điểm biến số asm
đến {Gma.UserActivityMonitor.dll}
và giống như trong dự án của tôi mà ngoại lệ được ném!
nó có thể liên quan đến độ bit của các quy trình liên quan ... – Yahia
Bạn có thể giải thích thêm hoặc chỉ cho tôi đúng tài nguyên không? – Mehran
Hooking thường liên quan đến một số mã trở thành một phần của quá trình mục tiêu (es). Điều này có thể đạt được theo những cách khác nhau nhưng về cơ bản bất kỳ sự khác biệt nào về tính bit của quy trình của bạn, quy trình nối và hệ điều hành có thể dẫn đến các vấn đề và/hoặc hành vi erratci. – Yahia