![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
послать нажатие клавиши
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)