Rumah >pembangunan bahagian belakang >C++ >Mengapa Pengendali Peristiwa Tetikus Global Saya Tidak Melancarkan .NET 4 pada Sistem Pra-Windows 8?
Menyelesaikan masalah Pengendali Acara Tetikus Global Tidak Membakar dalam .NET 4 (Pra-Windows 8)
Artikel ini menerangkan sebab pengendali acara tetikus global mungkin tidak berfungsi dengan betul dalam .NET Framework 4 pada sistem pengendalian yang lebih lama daripada Windows 8 dan menyediakan penyelesaian.
Penjelasan Kod
Kod menggunakan API SetWindowsHookEx
untuk mencipta cangkuk tetikus global dan mentakrifkan acara MouseAction
. Fungsi HookCallback
memproses peristiwa tetikus peringkat rendah, menaikkan acara MouseAction
pada klik kiri.
Masalahnya: SetWindowsHookEx
Kegagalan
Masalahnya terletak pada panggilan fungsi SetWindowsHookEx
. Pada sistem pra-Windows 8, .NET 4 CLR tidak meniru pemegang modul tidak terurus untuk pemasangan terurus. Ini menyebabkan GetModuleHandle
(digunakan untuk mendapatkan pemegang pemasangan semasa) gagal, mengakibatkan SetWindowsHookEx
mengembalikan IntPtr.Zero
.
Pengendalian Ralat Hilang
Kod asal tidak mempunyai pengendalian ralat yang penting. Fungsi WinAPI tidak membuang pengecualian; anda mesti menyemak nilai pulangan secara eksplisit.
Penyelesaian: Menggunakan Pemegang Modul yang Dikenali
Pembetulan melibatkan menggantikan panggilan GetModuleHandle
dengan pemegang modul yang diketahui dan sah. Memandangkan user32.dll
sentiasa dimuatkan dalam aplikasi .NET, pemegangnya berfungsi dengan sempurna.
Coretan Kod Dibetulkan
Berikut ialah segmen kod yang diperbetulkan:
<code class="language-csharp">IntPtr hook = SetWindowsHookEx(WH_MOUSE_LL, proc, GetModuleHandle("user32"), 0); if (hook == IntPtr.Zero) { throw new System.ComponentModel.Win32Exception(); } return hook;</code>
Menambah semakan ralat ini dan menggunakan pemegang user32.dll
memastikan acara MouseAction
menyala dengan pasti, memulihkan kefungsian pengendalian klik tetikus yang dijangkakan.
Atas ialah kandungan terperinci Mengapa Pengendali Peristiwa Tetikus Global Saya Tidak Melancarkan .NET 4 pada Sistem Pra-Windows 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!