GetAsyncKeyState на Windows 7 x64 - PullRequest
       20

GetAsyncKeyState на Windows 7 x64

0 голосов
/ 22 января 2012

Я пытаюсь использовать GetAsyncKeyState (i) на Windows7 x64 с C #, чтобы получить нажатие клавиш. Отлично работает на 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.
        }

любая ИДЕЯ?

Ответы [ 2 ]

5 голосов
/ 22 января 2012

Функция GetAsyncKeyState должна иметь тип возвращаемого значения short, а не int, а ее параметр должен быть набран в int, а не long

[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(int vKey);
0 голосов
/ 25 февраля 2014

Хотя на этот вопрос уже был дан правильный ответ, я хотел бы указать на мой опыт использования этого ответа и то, что его помещение в одну строку не работает.

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

НЕ работает.

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

работает .

(не знаю почему.)

...