Re: Генерация нажатий клавиш
От: Akzhan Россия http://www.akzhan.midi.ru/devcorner/
Дата: 06.05.03 10:18
Оценка: 4 (1)
Здравствуйте, ZmaximI, Вы писали:

ZI>У меня такая проблема — ОЧЕНЬ нужно сгенерировать нажатия клавишь на КЛАВИАТУРЕ, не нажимая их руками. Другими словами, как послать какой-либо символ в буфер клавиатуры ?


Самый правильный способ: keybd_event.

The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function.

Windows NT/2000/XP: This function has been superseded. Use SendInput instead.

VOID keybd_event(
  BYTE bVk,               // virtual-key code
  BYTE bScan,             // hardware scan code
  DWORD dwFlags,          // function options
  ULONG_PTR dwExtraInfo   // additional keystroke data
);

Parameters
bVk
[in] Specifies a virtual-key code. The code must be a value in the range 1 to 254. For a complete list, see Virtual-Key Codes.
bScan
This parameter is not used.
dwFlags
[in] Specifies various aspects of function operation. This parameter can be one or more of the following values. Value Meaning
KEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
KEYEVENTF_KEYUP If specified, the key is being released. If not specified, the key is being depressed.


dwExtraInfo
[in] Specifies an additional value associated with the key stroke.
Return Values
This function has no return value.

Remarks
An application can simulate a press of the PRINTSCRN key in order to obtain a screen snapshot and save it to the clipboard. To do this, call keybd_event with the bVk parameter set to VK_SNAPSHOT.

Windows NT/2000/XP: The keybd_event function can toggle the NUM LOCK, CAPS LOCK, and SCROLL LOCK keys.

Windows 95/98/Me: The keybd_event function can toggle only the CAPS LOCK and SCROLL LOCK keys. It cannot toggle the NUM LOCK key.

Example Code
The following sample program toggles the NUM LOCK light by using keybd_event() with a virtual key of VK_NUMLOCK. It takes a Boolean value that indicates whether the light should be turned off (FALSE) or on (TRUE). The same technique can be used for the CAPS LOCK key (VK_CAPITAL) and the SCROLL LOCK key (VK_SCROLL).

   #include <windows.h>

   void SetNumLock( BOOL bState )
   {
      BYTE keyState[256];

      GetKeyboardState((LPBYTE)&keyState);
      if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
          (!bState && (keyState[VK_NUMLOCK] & 1)) )
      {
      // Simulate a key press
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );

      // Simulate a key release
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
      }
   }

   void main()
   {
      SetNumLock( TRUE );
   }


Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.

С уважением,
Акжан, http://www.akzhan.midi.ru/devcorner/ — мой уголок разработчика
Генерация нажатий клавиш
От: ZmaximI  
Дата: 04.05.03 13:28
Оценка:
Доброе время суток.

У меня такая проблема — ОЧЕНЬ нужно сгенерировать нажатия клавишь на КЛАВИАТУРЕ, не нажимая их руками. Другими словами, как послать какой-либо символ в буфер клавиатуры ?

Заранее благодарен.

04.05.03 19:24: Перенесено модератором из 'C/C++' — ПК
Re: Генерация нажатий клавиш
От: LCR Россия lj://_lcr_
Дата: 04.05.03 13:49
Оценка:
Здравствуйте, ZmaximI, Вы писали:

ZI>Доброе время суток.


ZI>У меня такая проблема — ОЧЕНЬ нужно сгенерировать нажатия клавишь на КЛАВИАТУРЕ, не нажимая их руками. Другими словами, как послать какой-либо символ в буфер клавиатуры ?


SendMessage/PostMessage WM_KEYPRESS (WinAPI).
Ещё есть функция ungetch() (conio.h) — более переносимый вариант

Ы?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Генерация нажатий клавиш
От: KonstBez  
Дата: 04.05.03 14:15
Оценка:
Здравствуйте, ZmaximI, Вы писали:

ZI>Доброе время суток.


ZI>У меня такая проблема — ОЧЕНЬ нужно сгенерировать нажатия клавишь на КЛАВИАТУРЕ, не нажимая их руками. Другими словами, как послать какой-либо символ в буфер клавиатуры ?


ZI>Заранее благодарен.


Посылать WM_KEYDOWN, WM_KEYUP. Главное после DOWN не забыть сделать UP .
Есть еще API keybd_event — более мощное и универсальное средство.
Re[2]: Генерация нажатий клавиш
От: ZmaximI  
Дата: 04.05.03 14:57
Оценка:
Здравствуйте, LCR, Вы писали:

LCR>Здравствуйте, ZmaximI, Вы писали:


ZI>Доброе время суток.


ZI>У меня такая проблема — ОЧЕНЬ нужно сгенерировать нажатия клавишь на КЛАВИАТУРЕ, не нажимая их руками. Другими словами, как послать какой-либо символ в буфер клавиатуры ?


LCR>SendMessage/PostMessage WM_KEYPRESS (WinAPI).

LCR>Ещё есть функция ungetch() (conio.h) — более переносимый вариант

LCR>Ы?


Спасибо, но, если не трудно, пакажи пожалуйста на примере нажатия клавиши "Tab"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.