GetAsyncKeyState DLLImport语句

时间:2017-08-11 13:34:25

标签: c# winapi interop pinvoke

我遇到了一个需要根据操作系统更改我正在使用的DLL Import语句的情况。我想知道是否有其他人观察到这一点,知道原因,或者是否有更好的方法来解决这个问题。

这是显示问题的最小代码段。它是一个简单的命令行应用程序,只输出shift键的状态。

using System;
using System.Runtime.InteropServices;

namespace Shift
{
    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        public static extern short GetAsyncKeyState(ushort virtualKeyCode);

        static void Main(string[] args)
        {
            Console.WriteLine("Shift is: " + GetAsyncKeyState(0x10));
        }
    }
}

在Windows 8.1 x64上运行或构建为32位并在Windows 7 x64上运行时,上述工作正常。但是,在为x64编译时,它不适用于Windows 7系统。在这种情况下,GetAsyncKeyState始终返回0.

如果我将DLLImport更改为以下版本,那么在为x64编译时,它将在Windows 7系统上运行。

[DllImport("user32.dll", SetLastError = true)]
public static extern short GetAsyncKeyState(int virtualKeyCode);

0 个答案:

没有答案