Saf C# Hook uygulaması
Sistem hooklarını uygulamak için aslında çok basit, sadece üç Win32 API'sini çağırmak yeterlidir. SetWindowsHookEx kancaları kurmak için kullanılır. (İhtiyacınız olan bilgileri kontrol etmek için bir kart kurun)
CallNextHookEx hook aktarmak için kullanılır (mesajlar önemlidir, bu yüzden nereden geldikleri yerden engellemek istediğiniz yere geri dönmelidir)
HookWindowsHookEx Bağlantıları kaldır (kaldırmak çok önemli, çok fazla ayar tıkanıklığa yol açar)
"HOW TO: Setting Window Hooks in Visual C# .NET" makalesi bunu şu şekilde tanımlıyor: .NET çerçevesinde küresel hooklar desteklenmez Microsoft .NET framework'te global hook'ları uygulayamazsınız. Küresel bir kanca kurmak için, hook'un geçerli ve tutarlı bir fonksiyona çağrılması gereken başka bir sürece eklenebilir bir yerel dinamik bağlantı kütüphanesi (DLL) dışına aktarılması gerekir. Bu, .NET çerçevesi tarafından desteklenmeyen bir DLL dışa aktarımı gerektirir. Yönetilen kod, fonksiyon işaretçileri için tekdüze bir değere sahip olma kavramına sahip değildir, çünkü bu fonksiyonlar dinamik olarak oluşturulmuş proxy'lerdir. İnternette çok sayıda kod buldum ve çoğu, lpfn tarafından atıfta bulunulan alt programı içeren DLL'yi tanımlamak için C++ DLL içeriyor, bu da bu iddiayı doğruluyor gibi görünüyor.
Ancak gerçekte durum böyle değildir ve küresel hook aşağıdaki kod kullanılarak uygulanabilir: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule ); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0); Not: ManifestModule özelliği .Net Framework 2.0'da yeni bir eklemedir, yani hâlâ kullandığınızda . Net Framework 1.x'te, mevcut montajın tüm modüllerini almak için GetModules metodunu kullanabilir ve ardından bunlardan birini GetHINSTAN metoduna parametre olarak kullanarak uygun tutucu işaretçisini elde edebilirsiniz.
|