Windows 7 x64 上的 GetAsyncKeyState

发布于 2024-12-28 11:40:26 字数 760 浏览 0 评论 0原文

我正在尝试在 windows7 x64 上使用 C# 的 GetAsyncKeyState(i) 来获取按下的按键。它在 x86 上完美运行。这是我的代码:

[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(long vKey);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode); 

        search = false;
        int key_my;
        for (i = 0; i < 255; i++)
        {
            key_my = GetAsyncKeyState(i); // this should return -3.... but it does 46...........
            if ( key_my == (System.Int16.MinValue + 1))
            { search = true; break; }
        }
        if ( search == true)
        {
           ...//using if to keys here.
        }

有什么想法吗?

I'm trying to use GetAsyncKeyState(i) on windows7 x64 with C# to get pressed keys. It works perfect on x86. Here are my codes:

[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(long vKey);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode); 

        search = false;
        int key_my;
        for (i = 0; i < 255; i++)
        {
            key_my = GetAsyncKeyState(i); // this should return -3.... but it does 46...........
            if ( key_my == (System.Int16.MinValue + 1))
            { search = true; break; }
        }
        if ( search == true)
        {
           ...//using if to keys here.
        }

any IDEA?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅沫记忆 2025-01-04 11:40:26

GetAsyncKeyState 函数的返回类型应为 short 而不是 int,并且其参数应输入为 int 而不是 <代码>长

[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(int vKey);

The GetAsyncKeyState function should have a return type of short not int and it's parameter should be typed to int not long

[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(int vKey);
夜未央樱花落 2025-01-04 11:40:26

尽管这个问题已经得到了正确的回答,但我想指出我使用这个答案的经验,并且将它放在一行中不起作用

        if (GetAsyncKeyState(27) == (System.Int16.MinValue + 1)) 

工作。

                int key_my = GetAsyncKeyState(27); 
                if (key_my == (System.Int16.MinValue + 1))

确实有效。

(我不知道为什么。)

Though this question has already been answered correctly, I'd like to point out my experience using this answer and that putting it in one line does not work.

        if (GetAsyncKeyState(27) == (System.Int16.MinValue + 1)) 

does NOT work.

                int key_my = GetAsyncKeyState(27); 
                if (key_my == (System.Int16.MinValue + 1))

does work.

(I don't know why.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文