Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

послать нажатие клавиши


Страницы:   1 2

Jonis_84 ©   (2012-05-11 13:20:00) 

Доброго времени суток!Подскажите пожалуйста как послать нажатие Ctrl+X в другое приложение?


procedure TForm2.Timer1Timer(Sender: TObject);
begin
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('X'), 0, 0, 0);
keybd_event(Ord('X'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;

end.

есть какие нибудь ещё варианты?


Омлет   (2012-05-15 15:34:00) [1]

Да, он есть-таки в описании: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx


Омлет   (2012-05-15 15:31:00) [2]

Хотя, может и нет. Не помню, важен ли он для keybd_event.


Омлет   (2012-05-15 15:27:00) [3]

А, ты, похоже, просто забыл указать флаг KEYEVENTF_EXTENDEDKEY для контрола (VK_CONTROL).


Омлет   (2012-05-15 15:16:00) [4]


> Jonis_84

У тебя точно фокус на нужном окне находится?
Попробуй ещё через SendInput:

const
 ExtendedKeys: set of Byte = [
       VK_LBUTTON, VK_RBUTTON, VK_CANCEL, VK_MBUTTON, VK_BACK, VK_TAB, VK_CLEAR,
       VK_RETURN, VK_SHIFT, VK_CONTROL, VK_MENU, VK_PAUSE, VK_CAPITAL, VK_KANA,
       VK_HANGUL, VK_JUNJA, VK_FINAL, VK_HANJA, VK_KANJI, VK_ESCAPE,
       VK_CONVERT, VK_NONCONVERT, VK_ACCEPT, VK_MODECHANGE, VK_SPACE, VK_PRIOR, VK_NEXT,
       VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_SELECT, VK_PRINT, VK_EXECUTE,
       VK_SNAPSHOT, VK_INSERT, VK_DELETE, VK_HELP, VK_LWIN, VK_RWIN, VK_APPS, VK_NUMPAD0,
       VK_NUMPAD1, VK_NUMPAD2, VK_NUMPAD3, VK_NUMPAD4, VK_NUMPAD5, VK_NUMPAD6,
       VK_NUMPAD7, VK_NUMPAD8, VK_NUMPAD9, VK_MULTIPLY, VK_ADD, VK_SEPARATOR,
       VK_SUBTRACT, VK_DECIMAL, VK_DIVIDE, VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6, VK_F7,
       VK_F8, VK_F9, VK_F10, VK_F11, VK_F12, VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18,
       VK_F19, VK_F20, VK_F21, VK_F22, VK_F23, VK_F24, VK_NUMLOCK, VK_SCROLL, VK_LSHIFT,
       VK_RSHIFT, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, VK_PROCESSKEY, VK_ATTN,
       VK_CRSEL, VK_EXSEL, VK_EREOF, VK_PLAY, VK_ZOOM, VK_NONAME, VK_PA1, VK_OEM_CLEAR
 ];

procedure SendKeyInput(AKey: Byte; IsKeyUp: boolean = false);
var
 Input: TInput;
begin
 Input.Itype := INPUT_KEYBOARD;
 with Input.ki do
 begin
   wVk := AKey;
   if AKey in ExtendedKeys then
     dwFlags := KEYEVENTF_EXTENDEDKEY
   else
     dwFlags := 0;
   if IsKeyUp then
     dwFlags := dwFlags or KEYEVENTF_KEYUP;
   time := 0;
   dwExtraInfo := 0;
 end;
 SendInput(1, Input, SizeOf(Input));
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
 SendKeyInput(VK_CONTROL);
 SendKeyInput(Ord('X'));
 SendKeyInput(Ord('X'), true);
 SendKeyInput(VK_CONTROL, true);
end;


stas   (2012-05-15 13:34:00) [5]

Можешь дать приложение посмотреть (в котором окно)?


Jonis_84   (2012-05-15 12:54:00) [6]

Все предложенные варианты работают в др. приложениях а с этим окном нет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!


Jonis_84   (2012-05-15 12:48:00) [7]

Есть ещё варианты?Или где почитать?


Jonis_84   (2012-05-15 12:46:00) [8]

Окно определяется HWND выводиться в Edit.Закрыть нельзя

> окно закрыть которое можно одной из предложеных комбинаций
> клавиш,их всего 5 (ctrl+x,alt+d ......)
>

Почему..........не знаю!!!по этому перебираю.


stas   (2012-05-14 10:22:00) [9]

А окно определяется правильно?
Может быть проще посылать окну сообщение на закрытие?


Jonis_84   (2012-05-13 13:21:00) [10]

Удалено модератором


Inovet   (2012-05-12 20:27:00) [11]

> [15] brother ©   (12.05.12 20:05)
> похоже на сообщение о триальности или не зарегистрированности
> программы...

которое надо загасить.


brother   (2012-05-12 20:05:00) [12]

> после непродолжительного времени 1-я выдаёт окно закрыть
> которое можно одной из предложеных комбинаций клавиш

похоже на сообщение о триальности или не зарегистрированности программы...


sniknik   (2012-05-12 18:19:00) [13]

чем варианты перебирать лучше бы разобрался почему не работает...


Jonis_84   (2012-05-12 18:07:00) [14]

нет больше вариантов, да?


Jonis_84   (2012-05-12 14:30:00) [15]

не один из вариантов не работает.Есть 2-е проги ,после непродолжительного времени 1-я выдаёт окно закрыть которое можно одной из предложеных комбинаций клавиш,их всего 5 (ctrl+x,alt+d ......)


Leonid Troyanovsky   (2012-05-12 09:11:00) [16]

http://www.delphimaster.net/view/2-1246437194


stas   (2012-05-11 14:18:00) [17]

PostMessage(Des,WM_SYSKEYDOWN,VK_CONTROL,0);
 PostMessage(Des,WM_KeyDown,Ord('X'),0);
 PostMessage(Des,WM_KeyUp,Ord('X'),0);
 PostMessage(Des,WM_SYSKEYUP,VK_CONTROL,0);


sniknik   (2012-05-11 14:14:00) [18]

http://www.delphimaster.net/view/4-7256


sniknik   (2012-05-11 14:08:00) [19]

есть еще WM_SYSKEYDOWN


Dimka Maslov   (2012-05-11 14:05:00) [20]

Прога, которая получает сообщения может проверять нажатие Ctrl через GetAsyncKeyState, тогда способ с сообщениями не прокатит. Ну а кроме того, существует сообщение WM_CUT (если я правильно понял, зачем надо посылать Ctrl-X)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо