gpt4 book ai didi

c# - 为什么 AutoIt 成功地将输入发送到 directx 应用程序而 SendInput/SendMessage 却没有?

转载 作者:行者123 更新时间:2023-12-05 07:58:21 26 4
gpt4 key购买 nike

最近我制作了一个将击键发送到 DirectX 应用程序的程序。当用户单击某个键时,应用程序会更改光标。当我用 C# 代码 (Window API) 尝试它时它没有工作,但是当我用 AutoIt 尝试它时它工作得很好。

我想知道为什么它不适用于 C#。使用的代码(C# 和 AutoIt)有什么区别?

我认为 AutoIt 是一个易于使用的 Win API 包装器,但结果并没有显示出这一点,那么这些函数是如何构建的?

希望大家能帮助我更透彻地理解它,谢谢。

这是我的代码。

C#:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]
internal static extern uint SendInput(uint nInputs,[MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,int cbSize);

AutoIt:

Send("{F1 down}")
Sleep(300)
Send("{F1 up}")

AutoIt 代码有效,而 C# 代码无效。为什么?

最佳答案

我从未在 C# 中使用过 SendInput()SendMessage() 方法。

我是 AutoIt 和 C# 用户,所以我用来替换 C# 中 AutoIt 的 Send()Sleep() 函数的函数是 keybd_eventSystem.Threading.Thread.Sleep() .

这是 keybd_event 方法:

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

....
keybd_event(0x52, 0, 1 | 0, 0);
keybd_event(0x52, 0, 1 | 2, 0);

检查 MSDN 以获取 table of virtual key codes and their values

关于c# - 为什么 AutoIt 成功地将输入发送到 directx 应用程序而 SendInput/SendMessage 却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24961257/

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