2013-06-23 3 views
2

kinect를 사용하여 제스처를 분류하고 PC에서 실행되는 에뮬레이터에서 마리오 게임을하기 위해 이러한 제스처를 사용하려는 일부 소프트웨어를 만들었습니다.외부 응용 프로그램에 키 스트로크 보내기

재생하려면 키 입력을 에뮬레이터에 보냅니다.

Process process = Process.GetProcessesByName("nnnesterJ")[0]; 
SetForegroundWindow(process.MainWindowHandle); 

을 그리고 내가 키 입력을 보내려고 : 내 코드에서 내가 먼저 (이 작업) 창을 불러 내가이 시도 않았다

  case Movement.left: SendKeys.SendWait("{LEFT}"); break; 
     case Movement.right: SendKeys.SendWait("{RIGHT}"); break; 
     case Movement.upperleft: SendKeys.SendWait("{LEFT}{UP}"); current_move = Movement.stop; break; 
     case Movement.upperright: SendKeys.SendWait("{RIGHT}{UP}"); current_move = Movement.stop; break; 
     case Movement.jump: SendKeys.SendWait("{UP}"); current_move = Movement.stop; break; 
     case Movement.crouch: SendKeys.SendWait("{DOWN}"); break; 

그러나, 이것은 :(작동하지 않는 엑셀과는 작동합니까 (그래 나는 키가 실제로 올바른지 확인 해요)

내가이 일을하려고했습니다.

[DllImport("user32.dll", SetLastError = true)] 
     static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); 
     public static void PressKey(Keys key, bool up) 
     { 
      const int KEYEVENTF_EXTENDEDKEY = 0x1; 
      const int KEYEVENTF_KEYUP = 0x2; 
      if (up) 
      { 
       keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 
      } 
      else 
      { 
       keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); 
      } 
     } 

하지만 불행히도 이것도 작동하지 않습니다. 아무도 옵션을 가지고 있습니까?

종류와 관련, 헥터

+0

가 확인할 수 있습니까? 추가 정보를 줄 수도 있습니다. –

+0

화면 키보드 (예 : google)가 작동 중이고 다른 응용 프로그램 (예 : Excel)에서도 작동하는 키 명령을 전송합니다. –

답변

0

이 앱하지 않는 동안 상승 에뮬레이터 실행을 보인다.

트릭을 수행해야하는 애플리케이션으로 관리자 권한으로 실행 해보십시오.

+0

관리자로 응용 프로그램을 이미 실행하고 있습니다 –

-1

는 왜

+0

다른 응용 프로그램 작동 –

0

당신이 SendInput을 API를 사용하여 시도 가지고 그 문제 해결 것이라 생각합니다 .. 당신이 SetForegroundWindow (HWND) 후 USER32에서 SetActiveWindow을 (HWND) 시도 해달라고?

이 클래스를 사용 : https://github.com/Ben-Barron/PS3BluMote/blob/master/SendInputAPI.cs

사용하려면

var keyboard = new SendInputAPI.Keyboard(); 

// ... 

keyboard.sendKey(SendInputAPI.Keyboard.KeyCode.A); 

또는를 : 온 스크린 키보드 에뮬레이터로 작동하는지

var keys = new List<KeyCode> { KeyCode.Ctrl, KeyCode.C }; // order does matter. 

keyboard.sendKeysDown(keys); 
keyboard.releaseLastKeys(); 
+0

거기, 그 일을했습니다. –

관련 문제