C# обнаруживает все нажатия клавиш (Windows 8.1)

Я написал заставку для своего ПК Media Center (который работает под управлением Windows 8.1). Это простое приложение Windows Forms, которое отображает все изображения в папке "Мои рисунки" в произвольном порядке, подписывая каждое изображение с папкой, именем файла, датой съемки и т. Д. Оно обрабатывает события Click, MouseMove и KeyDown, завершая работу, если они получены.

Он работает нормально, за исключением того, что, если я нажму некоторые клавиши на пульте Media Center (например, ту, которая отображает все мои записи), экранная заставка не прекратит работу. Как будто эти ключи не генерируют событие KeyDown.

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

Любые предложения о том, как определить все ключи на пульте управления мультимедийным центром в приложении C# Windows Forms?

Исходный код на github

2 ответа

Обычно я использую эту программу, чтобы обнаружить любое нажатие клавиши с определенным идентификатором клавиши. Кстати, это написано в C++ Извините, что почти ничего не знаю C#, Дайте мне знать, если это помогает или нет., Спасибо @Psi:)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#if       _WIN32_WINNT < 0x0500
#undef  _WIN32_WINNT
#define _WIN32_WINNT   0x0500
#endif
#include <windows.h>
using namespace std;
int main ()
{
    char i;
    for(i=8; i<190; i++)
    {
        if(GetAsyncKeyState(i)== -32767)
        {
            cout<<int (i)<<endl;
        }
    }
    return 0;
} 

Самый простой способ, который я могу себе представить, это GetAsyncKeyState, https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx

    [DllImport( "user32.dll" )]
    static extern short GetAsyncKeyState( int KeyCode );

Это работает, по крайней мере, если ваш процесс является процессом переднего плана (как и должно быть, если это серьезная заставка).

Это также должно обрабатывать специальные клавиши (например, клавиши мультимедиа), так как они в основном просто переводятся на несколько сочетаний клавиш.

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

Другие вопросы по тегам