Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.057 c
2-1340013571
IGray
2012-06-18 13:59
2013.03.22
Как правильно закрыть модальную форму из OnActivate?


15-1340569805
Юрий
2012-06-25 00:30
2013.03.22
С днем рождения ! 25 июня 2012 понедельник


15-1335792488
Knight
2012-04-30 17:28
2013.03.22
Триггер в FireBird


2-1330408314
AV
2012-02-28 09:51
2013.03.22
Владение критической секцией


15-1346054389
KSergey
2012-08-27 11:59
2013.03.22
Сопряжение компьютер <--> цифр. устройство





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский