Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск № 41-2003 BCBDEV.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"
Переводы многих функций Win32API, которые часто используются в данной рассылке, вы можете получать, подписавшись на дружественную рассылку "WinAPI на русском".
Справочник по функциям Win32API вы можете посмотреть на сайте BcbDev.ru в разделе MSDN по-русски.

Как виртуально нажать на клавишу?
Иногда необходимо нажать на кнопку виртуально. Например, примерно так работают автоматические переключатели раскладок (типа punto switcher (ну это я так предполагаю)). Ниже приведены некоторые примеры, позволяющие это проделать.
Вариант 1:
KEYBDINPUT ki;
ki.wVk = VK_RETURN;
ki.wScan = MapVirtualKeyEx(VK_RETURN, 0, GetKeyboardLayout(0));
ki.dwFlags = KEYEVENTF_EXTENDEDKEY; // или KEYEVENTF_KEYUP, одно из этого должно сработать :)
ki.time = 0;
ki.dwExtraInfo = 0;
INPUT ipEvent;
ipEvent.type = INPUT_KEYBOARD;
ipEvent.ki = ki;
UINT nNumEvents = SendInput(1, &ipEvent, sizeof(INPUT)); 
Вариант 2:
Вы должны получить дескриптор окна и затем послать сообщения WM_KEYDOWN и WM_KEYUP следующим образом:
SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(hWnd, WM_KEYUP, VK_RETURN, 0); 
Вариант 3:
Посылаем комбинацию ALT+SPACE в текущее окно с фокусом
 keybd_event(VK_MENU, 0, 0, 0);
 keybd_event(VK_SPACE, 0, 0, 0);
 keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
 keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); 
Вариант 4:
Этот пример для консольного окна. Печатает "CLS" затем нажимает ENTER.
char sc = 0;

 sc = MapVirtualKey(/*VK_C*/0x43, 0);
 SendMessage(hWnd, WM_KEYDOWN, sc, 1 | (1 << 30) | (sc << 16));
 SendMessage(hWnd, WM_KEYUP, sc, 1 | (3 << 30) | (sc << 16));

 sc = MapVirtualKey(/*VK_L*/0x4c, 0);
 SendMessage(hWnd, WM_KEYDOWN, sc, 1 | (1 << 30) | (sc << 16));
 SendMessage(hWnd, WM_KEYUP, sc, 1 | (3 << 30) | (sc << 16));

 sc = MapVirtualKey(/*VK_S*/0x53, 0);
 SendMessage(hWnd, WM_KEYDOWN, sc, 1 | (1 << 30) | (sc << 16));
 SendMessage(hWnd, WM_KEYUP, sc, 1 | (3 << 30) | (sc << 16));

 sc = MapVirtualKey(VK_RETURN, 0);
 SendMessage(hWnd, WM_KEYDOWN, sc, 1 | (1 << 30) | (sc << 16));
 SendMessage(hWnd, WM_KEYUP, sc, 1 | (3 << 30) | (sc << 16)); 

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное