Sto provando a utilizzare la libreria Gma.UserActivityMonitor in un progetto e ho riscontrato un errore che non riesco a superare da solo.Gma.UserActivityMonitor & SetWindowsHookEx error 126
Nel file HookManager.Callbacks.cs
c'è un metodo statico chiamato EnsureSubscribedToGlobalMouseEvents
con il seguente codice (più o meno):
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);
}
Il SetWindowsHookEx
restituisce sempre 0
e il codice di cui sopra mantiene un'eccezione con il messaggio The specified module could not be found
e la chiamata a Marshal.GetLastWin32Error
restituisce il codice 126
. Posso eseguire correttamente la demo fornita con il progetto originale di Gma.UserActivityMonitor ma poiché il mio progetto è un po 'troppo complicato da spiegare qui non posso entrare nei dettagli spiegando la sua differenza con il mio. Spero solo che qualcuno possa indovinare il problema.
BTW, nelle Domande frequenti del progetto si dice che altri hanno un problema vicino al mio (con SetWindowsHookEx
errore di ritorno) quando lo Enable Visual Studio hosting process
viene controllato solo quando il progetto è debuggato. Così ho deselezionato quella casella nella mia e ho ancora lo stesso problema, e non solo in modalità di debug, ma anche quando faccio doppio clic sul file di rilascio in Windows Explorer (non è coinvolto Visual Studio).
Per fornire ulteriori informazioni, nel progetto dimostrativo (che funziona correttamente) la variabile asm
punta a {Gma.UserActivityMonitor.dll}
e lo stesso nel mio progetto che viene generata l'eccezione!
potrebbe essere correlato alla testimonianza dei processi coinvolti ... – Yahia
Potresti spiegarci di più o indicarmi la risorsa giusta? – Mehran
L'aggancio di solito comporta che alcuni codici diventino parte dei processi di destinazione. Questo può essere ottenuto in modi diversi, ma fondamentalmente qualsiasi differenza nel controllo del processo, i processi collegati e il sistema operativo possono portare a problemi e/o comportamenti erratici. – Yahia