Ich versuche, die Gma.UserActivityMonitor Bibliothek in einem Projekt zu verwenden, und ich habe einen Fehler konfrontiert, den ich allein nicht überwinden kann.Gma.UserActivityMonitor & SetWindowsHookEx Fehler 126
In der HookManager.Callbacks.cs
Datei gibt es eine statische Methode namens EnsureSubscribedToGlobalMouseEvents
mit dem folgenden Code (mehr oder weniger):
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);
}
Die SetWindowsHookEx
gibt immer 0
und den obigen Code hält mit der Meldung eine Ausnahme werfen The specified module could not be found
und den Anruf zu Marshal.GetLastWin32Error
gibt Code 126
zurück. Ich kann die mit dem ursprünglichen Projekt von Gma.UserActivityMonitor bereitgestellte Demo erfolgreich ausführen, aber da mein Projekt ein wenig zu kompliziert ist, um es hier zu erklären, kann ich nicht ins Detail gehen, um seinen Unterschied zu meinen zu erklären. Ich hoffe nur, dass jemand blind das Problem erraten kann.
BTW, in der FAQ des Projekts heißt es, dass andere ein Problem nahe bei mir haben (mit SetWindowsHookEx
Fehler zurück), wenn die Enable Visual Studio hosting process
nur geprüft wird, wenn das Projekt debuggt wird. Also habe ich diese Box in meiner deaktiviert und immer noch habe ich das gleiche Problem, und nicht nur im Debugging-Modus, sondern auch, wenn ich die Release-Datei im Windows Explorer doppelklicke (ohne Visual Studio).
Um mehr Informationen zu geben, in Demo-Projekt (das funktioniert gut) die asm
Variable zeigt auf {Gma.UserActivityMonitor.dll}
und das gleiche in meinem Projekt, die die Ausnahme ausgelöst wird!
es könnte sich auf Bitness der beteiligten Prozesse beziehen ... – Yahia
Könnten Sie bitte mehr erklären oder mich auf die richtige Ressource zeigen? – Mehran
Beim Hooking wird normalerweise ein Teil des Codes Teil des Zielprozesses (der Zielprozesse). Dies kann auf verschiedene Arten erreicht werden, aber im Grunde kann jeder Unterschied in der Bissigkeit in Bezug auf Ihren Prozess, die süchtig machenden Prozesse und das OS zu Problemen und/oder fehlerhaftem Verhalten führen. – Yahia