Bir projede Gma.UserActivityMonitor kütüphanesini kullanmaya çalışıyorum ve kendim üstesinden gelememem bir hatayla karşılaştım.Gma.UserActivityMonitor & SetWindowsHookEx 126
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
hep 0
döner ve yukarıdaki kod mesajında The specified module could not be found
ve çağrıyla istisna atıp duruyor: HookManager.Callbacks.cs
dosyasında
aşağıdaki kodla (daha fazla veya daha az) ile statik olarak adlandırılan yöntem EnsureSubscribedToGlobalMouseEvents
var Marshal.GetLastWin32Error
, 126
kodunu döndürür. Gma.UserActivityMonitor'un orijinal projesiyle sağlanan demoyu başarılı bir şekilde çalıştırabilirim ancak projem burada açıklamak için biraz karmaşık olduğundan, benimkiyle aradaki farkı açıklayamam. Sadece birisinin sorunu tahmin etmesini beklemesini umuyorum.
BTW, projenin SSS kısmında, Enable Visual Studio hosting process
yalnızca proje hata ayıklaması olduğunda işaretlendiğinde başkalarının benimki (SetWindowsHookEx
döndürme hatasıyla) sorunu olduğunu söyledi. Bu yüzden benim o kutudaki işareti kaldırdım ve hala aynı sorunu yaşıyorum ve sadece hata ayıklama modunda değil, Windows Gezgini'nde (Visual Studio dahil) yayımlama dosyasını çift tıklattığımda da.
Daha fazla bilgi vermek için, demo projesinde (hangisi iyi çalışıyor) asm
değişken noktaları {Gma.UserActivityMonitor.dll}
ve projemde istisna atılanla aynı!
ilgili süreçlerin bitkinliğiyle ilgili olabilir ... – Yahia
Lütfen daha fazla bilgi açıklayabilir misiniz, yoksa doğru kaynağa yönlendirebilir misiniz? – Mehran
Hooking, genellikle, bazı kodların hedef işlemlerin bir parçası haline gelmesini içerir. Bu, farklı şekillerde başarılabilir, ancak temel olarak işleminizle ilgili bitlikteki herhangi bir farklılık, çengelli süreç (ler) ve işletim sistemi problemlere ve/veya hatalı davranışlara yol açabilir. – Yahia