Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1241988585
Petr V. Abramov
2009-05-11 00:49
2009.07.12
Лето неотвратимо, как оздоровление мировой экономики :)


2-1242301358
Nil
2009-05-14 15:42
2009.07.12
Объясните пож про сглаживание?


15-1242050148
and
2009-05-11 17:55
2009.07.12
система поиска изображений


2-1242755410
@!!ex
2009-05-19 21:50
2009.07.12
Как реализовать сортировку по приоритетам?


3-1220962765
Николай 2
2008-09-09 16:19
2009.07.12
ненадёжность связи и TpFIBDatabase.Execute





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский