首頁 > 後端開發 > C++ > 為什麼我的全域滑鼠事件處理程序在 Windows 8 之前的系統上的 .NET 4 中不會觸發?

為什麼我的全域滑鼠事件處理程序在 Windows 8 之前的系統上的 .NET 4 中不會觸發?

DDD
發布: 2025-01-15 08:22:44
原創
336 人瀏覽過

Why Doesn't My Global Mouse Event Handler Fire in .NET 4 on Pre-Windows 8 Systems?

.NET 4 中的全域滑鼠事件處理:Windows 8 之前的相容性問題

本文解決了在早於 Windows 8 的系統上執行的 .NET Framework 4 應用程式中實作全域滑鼠事件處理程序時遇到的問題。核心問題在於 SetWindowsHookEx 函數和託管程式碼之間的互動。

問題描述

目標是使用SetWindowsHookEx建立一個全域滑鼠事件處理程序。當鉤子成功設定時,事件處理程序保持不活動狀態。這源自於 .NET 4 在 Windows 8 之前的環境中處理模組句柄的方式。 SetWindowsHookEx 需要為低階滑鼠掛鉤提供有效的模組句柄,但 .NET 4 的執行階段不再自動為舊作業系統上的託管組件提供這些句柄。

解決方案涉及向SetWindowsHookEx提供有效的模組句柄。 儘管低階滑鼠鉤子函數沒有主動使用該句柄,但仍需要有效的句柄。 最可靠的方法是傳遞 user32.dll 的句柄,這是一個始終在 .NET 應用程式中載入的系統 DLL。

更正後的程式碼片段是:

<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>
登入後複製

此修改可確保事件處理程序正常執行,並如預期回應指定的滑鼠事件。

以上是為什麼我的全域滑鼠事件處理程序在 Windows 8 之前的系統上的 .NET 4 中不會觸發?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板