2014-01-20 5 views
4

Я создаю программу для снятия скриншотов из игры, из игры. Когда я нажимаю горячую клавишу, она работает, но с открытой игрой в полноэкранном режиме она не обнаруживает ключ.Глобальная горячая клавиша не работает в полноэкранном режиме

Мой код:

protected override void WndProc(ref Message m) 
{ 
    const int WM_HOTKEY = 0x0312; 

    switch (m.Msg) 
    { 
     case WM_HOTKEY: 
     { 
      if ((short)m.WParam == 1) 
      { 
       start = DateTime.Now; 
       progressBar1.Maximum = 1; 
       progressBar1.Step = 1; 
       progressBar1.Value = 0; 

       DoRequest(); 
      } 
      break; 
     } 

     default: 
     { 
      base.WndProc(ref m); 
      break; 
     } 
    } 
} 

зарегистрировать глобальный ключ, используя:

RegisterHotKey(this.Handle, 1, (int)KeyModifier.None, Keys.F11); 

Помощь-я:/

РЕШИТЬ! Решено, мне удалось исправить с помощью этого проекта: http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook

Спасибо всем!

ответ

2

Проблема с большинством игр (не все из них) заключается в том, что они используют DirectInput (DirectX), а не насос сообщений Windows, чтобы читать нажатия клавиш. Я также написал приложение, использующее распознавание голоса, которое отправляет ключи в игры и испытывает ту же проблему, которую я решил, глядя на коды клавиш DirectX. ref: DirectInput

+0

Как я могу реализовать это в своем коде? Я не понимаю, я пытался поместить ключ F11 в DirectX и не работал. –

+0

Обратитесь к следующей ссылке: http://msdn.microsoft.com/en-us/library/windows/desktop/bb153252(v=vs.85).aspx может помочь вам. –

+0

Спасибо, мне удалось через этот проект: http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook –

0

У меня была аналогичная проблема, но я решил ее, запустив мою программу с привилегиями администратора.

Смежные вопросы