Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизпослать нажатие клавиши Найти похожие ветки
← →
Jonis_84 © (2012-05-11 13:20) [0]Доброго времени суток!Подскажите пожалуйста как послать нажатие 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.
есть какие нибудь ещё варианты?
← →
Dimka Maslov © (2012-05-11 13:33) [1]Найти ХВНД через ЕнумВиндовс и послать правильную последовательность сообщений ВМ_КЕЙДОВН и ВМ_КЕЙУП
← →
stas © (2012-05-11 13:40) [2]Так: "А не пошло бы ты - нажатие Ctrl+X, в другое приложение?" )
← →
Jonis_84 © (2012-05-11 13:41) [3]
procedure TForm2.Timer1Timer(Sender: TObject);
Var
Des:HWND;
begin
Des:=GetForegroundWindow;
PostMessage(Des,WM_KeyDown,Ord("X"),0);
PostMessage(Des,WM_KeyUp,Ord("X"),0);
end;
end.
Так?
← →
Jonis_84 © (2012-05-11 13:42) [4]Не пашет!!!!
← →
Jonis_84 © (2012-05-11 13:45) [5]
procedure TForm2.Timer1Timer(Sender: TObject);
Var
Des:HWND;
begin
Des:=GetForegroundWindow;
PostMessage(Des,WM_KeyDown,VK_CONTROL,0);
PostMessage(Des,WM_KeyDown,Ord("X"),0);
PostMessage(Des,WM_KeyUp,Ord("X"),0);
PostMessage(Des,WM_KeyUp,VK_CONTROL,0);
end;
← →
Jonis_84 © (2012-05-11 13:49) [6]"X" жмёт 2-а раза , а Ctrl не нажимает
← →
Dimka Maslov © (2012-05-11 14:05) [7]Прога, которая получает сообщения может проверять нажатие Ctrl через GetAsyncKeyState, тогда способ с сообщениями не прокатит. Ну а кроме того, существует сообщение WM_CUT (если я правильно понял, зачем надо посылать Ctrl-X)
← →
sniknik © (2012-05-11 14:08) [8]есть еще WM_SYSKEYDOWN
← →
sniknik © (2012-05-11 14:14) [9]http://www.delphimaster.net/view/4-7256
← →
stas © (2012-05-11 14:18) [10]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);
← →
Leonid Troyanovsky © (2012-05-12 09:11) [11]http://www.delphimaster.net/view/2-1246437194
← →
Jonis_84 © (2012-05-12 14:30) [12]не один из вариантов не работает.Есть 2-е проги ,после непродолжительного времени 1-я выдаёт окно закрыть которое можно одной из предложеных комбинаций клавиш,их всего 5 (ctrl+x,alt+d ......)
← →
Jonis_84 © (2012-05-12 18:07) [13]нет больше вариантов, да?
← →
sniknik © (2012-05-12 18:19) [14]чем варианты перебирать лучше бы разобрался почему не работает...
← →
brother © (2012-05-12 20:05) [15]> после непродолжительного времени 1-я выдаёт окно закрыть
> которое можно одной из предложеных комбинаций клавиш
похоже на сообщение о триальности или не зарегистрированности программы...
← →
Inovet © (2012-05-12 20:27) [16]> [15] brother © (12.05.12 20:05)
> похоже на сообщение о триальности или не зарегистрированности
> программы...
которое надо загасить.
← →
Jonis_84 © (2012-05-13 13:21) [17]Удалено модератором
← →
stas © (2012-05-14 10:22) [18]А окно определяется правильно?
Может быть проще посылать окну сообщение на закрытие?
← →
Jonis_84 © (2012-05-15 12:46) [19]Окно определяется HWND выводиться в Edit.Закрыть нельзя
> окно закрыть которое можно одной из предложеных комбинаций
> клавиш,их всего 5 (ctrl+x,alt+d ......)
>
Почему..........не знаю!!!по этому перебираю.
← →
Jonis_84 © (2012-05-15 12:48) [20]Есть ещё варианты?Или где почитать?
← →
Jonis_84 © (2012-05-15 12:54) [21]Все предложенные варианты работают в др. приложениях а с этим окном нет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!
← →
stas © (2012-05-15 13:34) [22]Можешь дать приложение посмотреть (в котором окно)?
← →
Омлет © (2012-05-15 15:16) [23]
> 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;
← →
Омлет © (2012-05-15 15:27) [24]А, ты, похоже, просто забыл указать флаг KEYEVENTF_EXTENDEDKEY для контрола (VK_CONTROL).
← →
Омлет © (2012-05-15 15:31) [25]Хотя, может и нет. Не помню, важен ли он для keybd_event.
← →
Омлет © (2012-05-15 15:34) [26]Да, он есть-таки в описании: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.088 c