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 );
Это работает, по крайней мере, если ваш процесс является процессом переднего плана (как и должно быть, если это серьезная заставка).
Это также должно обрабатывать специальные клавиши (например, клавиши мультимедиа), так как они в основном просто переводятся на несколько сочетаний клавиш.
Недостатком, однако, является то, что вы должны запрашивать каждый код ключа вручную. Но так как вы уже можете ловить обычные ключи, я думаю, что этого будет достаточно, чтобы опрашивать только медиа-ключи.