Необходимо было бы, вероятно, сохранить список процессов, которые Вы запускаете и уничтожаете их один за другим при выходе из программы. Я не уверен в специфических особенностях выполнения этого в C++, но это не должно быть твердо. Трудная часть, вероятно, гарантировала бы, что дочерние процессы являются завершением работы в случае сбоя приложения..Net имеет способность добавить функцию, которые добираются, звонил, когда необработанное исключение происходит. Я не уверен, предлагает ли C++ те же возможности.
[DllImport("user32.dll", EntryPoint = "GetKeyboardState", SetLastError = true)]
private static extern bool NativeGetKeyboardState([Out] byte[] keyStates);
private static bool GetKeyboardState(byte[] keyStates)
{
if (keyStates == null)
throw new ArgumentNullException("keyState");
if (keyStates.Length != 256)
throw new ArgumentException("The buffer must be 256 bytes long.", "keyState");
return NativeGetKeyboardState(keyStates);
}
private static byte[] GetKeyboardState()
{
byte[] keyStates = new byte[256];
if (!GetKeyboardState(keyStates))
throw new Win32Exception(Marshal.GetLastWin32Error());
return keyStates;
}
private static bool AnyKeyPressed()
{
byte[] keyState = GetKeyboardState();
// skip the mouse buttons
return keyState.Skip(8).Any(state => (state & 0x80) != 0);
}
Если вы используете Windows.Forms
, используйте событие KeyDown
и считайте конкретный ключ с помощью соответствующего KeyEventArgs
. Вы можете получить доступ к свойству KeyCode
в переменной KeyEventArgs
.
Чтобы проверить диапазоны, скажем, между A и Z:
if (e.KeyCode>=Keys.A && e.KeyCode<=Keys.Z)
{
// do stuff...or not
}
Откуда запущен этот код? Это в обработчике событий? Многие формы и элементы управления запускают событие KeyPress, а также событие KeyDown. Вы можете изучить эти события и установить для своего флага значение true, когда произойдет одно из них. Вам также нужно будет прослушивать соответствующее событие, которое сообщает вам, когда клавиша отпускается (я думаю, KeyUp также).
http://sourceforge.net/projects/keystate/ показывает "специальные" ключи. В противном случае, я думаю, вам просто придется их контролировать. Так вы хотите сделать это в масштабах всей системы? Чего вы пытаетесь достичь?
Вы можете увеличивать счетчик для каждого события нажатия клавиши и уменьшать его для каждого события нажатия клавиш. Когда счетчик равен нулю, никакие клавиши не работают.
normally I would use an event
Вы все равно должны использовать событие, желательно KeyDown, так как вам все равно, какая клавиша нажата, если вы программируете в Windows. Если нет, вы можете использовать что-то вроде Console.ReadLine (); .
edit: Если вы ищете что-то вроде
if (Keyboard.IsKeyDown(Key.AnyKey)) return true;
, значит, вы шутите ...
edit 2: Что ж, подход вашего регистратора интересен, но я думаю, что вы изобретаете велосипед заново. Все языки программирования предоставляют способ обработки нажатой клавиши, если это известно. В C # для Windows это делается с помощью событий. Кроме того, я думаю, что вы не сможете справиться с подобными вещами самостоятельно в .NET, так как вам нужно получить доступ к некоторым системным функциям из Win32 API, и, AFAIK, вам не разрешено это делать (по крайней мере, легко. ..) в управляемом коде. Некоторым решением было бы создать HOOK и отправлять сообщения оттуда в ваше приложение, но я не знаю, как это сделать на C #. Так было в Delphi, где у меня больше опыта.
Разрешено делать это (по крайней мере, легко ...) в управляемом коде. Некоторым решением было бы создать HOOK и отправлять сообщения оттуда в ваше приложение, но я не знаю, как это сделать на C #. Так было в Delphi, где у меня больше опыта. Разрешено делать это (по крайней мере, легко ...) в управляемом коде. Некоторым решением было бы создать HOOK и отправлять сообщения оттуда в ваше приложение, но я не знаю, как это сделать на C #. Так было в Delphi, где у меня больше опыта.