gpt4 book ai didi

c# - WPF 中的全局鼠标 Hook

转载 作者:行者123 更新时间:2023-11-30 19:09:25 25 4
gpt4 key购买 nike

我需要获取屏幕上的鼠标位置不是在我的应用程序中。

我使用了全局鼠标和键盘钩子(Hook) here

它在 winforms 下工作正常,但在 wpf 下不工作。

我正在使用代码的版本 1,并使用了以下内容

var activity = new UserActivityHook();
activity.OnMouseActivity += activity_OnMouseActivity;

但它没有工作,而是给我以下错误:

Additional information: The specified module could not be found

下面的代码

public void Start(bool InstallMouseHook, bool InstallKeyboardHook)
{
// install Mouse hook only if it is not installed and must be installed
if (hMouseHook == 0 && InstallMouseHook)
{
// Create an instance of HookProc.
MouseHookProcedure = new HookProc(MouseHookProc);

//install hook
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure,
Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
//If SetWindowsHookEx fails.
if (hMouseHook == 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
Stop(true, false, false);
//Initializes and throws a new instance of the Win32Exception class with the specified error.
throw new Win32Exception(errorCode);
}
}
}

是否有 WPF 的替代方案,或者我是否遗漏了什么?

最佳答案

dotctor 的回答给出了鼠标位置,但没有给出我正在寻找的事件。

所以我自己想通了。以下是我的发现以供将来引用。

我们需要改变:

//install hook
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure,
Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);

以下内容:

// Install hook
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure, IntPtr.Zero, 0);

或者,您可以从here 下载编辑后的cs 文件。然后我们可以使用事件

activity.OnMouseActivity += activity_OnMouseActivity;

在其下我们可以使用e.Xe.Y 来获取鼠标位置。

关于c# - WPF 中的全局鼠标 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27133957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com