gpt4 book ai didi

.net - AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID 用于 Windows API 调用?

转载 作者:行者123 更新时间:2023-12-03 20:17:31 32 4
gpt4 key购买 nike

我正在尝试创建一个 Hook 来监视鼠标光标的当前位置。没什么重要的,我只需要在界面设计期间计算一些像素,并想学习如何创建一个钩子(Hook),所以我决定走一条艰难的路,而不是理智的路。

我找到了声明以下函数的示例代码:

 <DllImport("User32.dll", CharSet:=CharSet.Auto, _
CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function SetWindowsHookEx _
(ByVal idHook As Integer, ByVal HookProc As CallBack, _
ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
End Function

调用该函数时,使用以下代码:
        hHook = SetWindowsHookEx(WH_MOUSE, _
hookproc, _
IntPtr.Zero, _
AppDomain.GetCurrentThreadId())

但是 Appdomain.GetCurrentThreadID 会生成警告:“'Public Shared Function GetCurrentThreadId() As Integer' 已过时:'AppDomain.GetCurrentThreadId 已被弃用,因为当托管线程在纤程(又名轻量级线程)上运行时,它不提供稳定的 Id。要获得托管线程的稳定标识符,请使用 Thread 上的 ManagedThreadId 属性。”

我尝试过使用 ManagedThreadID,但这不起作用。返回的线程 ID 似乎是线程的逻辑线程 ID,因为它在 .net 运行时中运行,而不是 Win32 线程标识符。

使用 AppDomain.GetCurrentThreadID 调用该函数是可行的,但我真的很想为我的线程提供一个“稳定标识符”。

有人可以向我解释是否可以在这种情况下使用 ManagedThreadID(我假设不是),如果没有,我需要避免的事情是为了阻止 AppDomain.CurrentThreadID 变得“不稳定”?

干杯

最佳答案

采用:

[DllImport("kernel32.dll")]
静态外部 uint GetCurrentThreadId();

关于.net - AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID 用于 Windows API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/772354/

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