Существуют ли способы удерживать нажатие клавиши без использования клавиатуры? - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь контролировать нажатие клавиш от Kinect.Например, когда моя правая рука перемещается вправо, это означает, что я держу стрелку вправо на клавиатуре.Я закончил писать код для Kinect, но я не знаю, как сделать пользовательское устройство клавиатуры.Я пытался использовать SendKey , но это не сработало, потому что нет команды удержания клавиши.Я также использую цикл, поток, но он тоже не работает.Я пытаюсь использовать Kinect для управления Google Earth через приложение WPF.Любое движение от kinect будет переведено в нажатие или удержание клавиатуры, чтобы оно могло управлять приложением Google Планета Земля.Любое предложение?
С наилучшими пожеланиями,
C.Porawat

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Я получил ответ.Используя System.Windows.Interop и System.Runtime.InteropServices .Затем, используя:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, IntPtr dwExtraInfo);

Затем вызовите событие клавиатуры, когда я хочу использовать его:

 keybd_event(0x27, 0, KEYEVENTF_KEYDOWN, new System.IntPtr()); //press right arrow on the keyboard
1 голос
/ 24 марта 2011

Нет состояния удержания ключа или события. При удерживании клавиши на клавиатуре генерируется несколько событий клавиш. Этот пример win32 имитирует левую клавишу, удерживаемую вечно:

while(true)
{
    INPUT input =
    {
        INPUT_KEYBOARD
    };
    KEYBDINPUT tmp =
    {
        VK_LEFT,
        0,
        0,
        0,
        NULL
    };
    input.ki = tmp;
    SendInput(1, &input, sizeof(INPUT));
    ::Sleep(100);
}
...