Форум: "Начинающим";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];
ВнизЭмуляция служебных клавиш Найти похожие ветки
← →
AV_Kit (2009-05-19 21:17) [0]Вот этот код эмулирует нажатие клавиш в любом, даже не активном окне, однако Home, End, Delete и т.д. не проходят. Возможно как-то исправить?
procedure EmulateKey(Wnd: HWND; VKey: Integer);
asm
push 0
push edx
push 0102H //WM_CHAR
push eax
call PostMessage
end;
← →
Игорь Шевченко © (2009-05-19 21:30) [1]А че, типа
PostMessage(Wnd, WM_CHAR, VKey, 0) уже некошерно писать ?
Исправить возможно, посылать не WM_CHAR, а WM_KEYDOWN+WM_KEYUP
← →
KilkennyCat © (2009-05-19 21:52) [2]Как поразительно устроен человеческий мозг! Знать ассемблер, и при этом не знать элементарной работы с клавиатурой! Поразительно...
← →
AV_Kit (2009-05-19 22:11) [3]Спасибо большое, что нашли время ответить, но в Вашем варианте, ровно как и в моем, проходят к примеру:
vk_tab, vk_return, vk_escape
и не проходят
vk_end, vk_home, vk_delete
← →
AV_Kit (2009-05-19 22:22) [4]
> Как поразительно устроен человеческий мозг! Знать ассемблер,
> и при этом не знать элементарной работы с клавиатурой!
> Поразительно...
Ассемблер я тоже не знаю, этот пример мне не единожды попадался в литературе, и это последнее что я пробовал после PostMessage() и SendMessage(), результат примерно тот-же.
← →
Игорь Шевченко © (2009-05-19 22:37) [5]
> но в Вашем варианте, ровно как и в моем, проходят к примеру:
>
> vk_tab, vk_return, vk_escape
> и не проходят
> vk_end, vk_home, vk_delete
А как ты проверяешь ?
← →
Игорь Шевченко © (2009-05-19 22:41) [6]Например, в этом примере:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(Edit1.Handle, WM_KEYDOWN, VK_DELETE, 0);
PostMessage(Edit1.Handle, WM_KEYUP, VK_DELETE, 0);
end;
end.
Видно, что нажатие клавиши Delete посылается TEdit (текст удаляется)
А если передать VK_END и установить фокус на TEdit, то видно, то каретка находится в конце текста
← →
AV_Kit (2009-05-19 23:14) [7]Спасибо!
PostMessage(Edit1.Handle, WM_KEYDOWN, VK_DELETE, 0);
PostMessage(Edit1.Handle, WM_KEYUP, VK_DELETE, 0);
вроде работает.
А проверяю так, со своей программой открываю пустой блокнот, определяю Hndle и посылаю текст и коды клавиш на него.
← →
Игорь Шевченко © (2009-05-19 23:20) [8]Вообще есть полезная функция SendInput
← →
Германн © (2009-05-20 00:28) [9]
> Ассемблер я тоже не знаю, этот пример мне не единожды попадался
> в литературе, и это последнее что я пробовал после PostMessage()
> и SendMessage(), результат примерно тот-же.
>
> Спасибо!
> PostMessage(Edit1.Handle, WM_KEYDOWN, VK_DELETE, 0);
> PostMessage(Edit1.Handle, WM_KEYUP, VK_DELETE, 0);
> вроде работает.
No comments!
:)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c