Главная страница
    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
2-1242827643
Joy_25
2009-05-20 17:54
2009.07.12
работа с Word: выделение жирным шрифтом участков текста


2-1242802069
roadster
2009-05-20 10:47
2009.07.12
Зашитые в код строковые константы- как защитить их от просмотра?


2-1242753465
AV_Kit
2009-05-19 21:17
2009.07.12
Эмуляция служебных клавиш


2-1242712185
Abcdef123
2009-05-19 09:49
2009.07.12
Баг при вызове Хелпа проекта по клавише F1


15-1241601126
Kolan
2009-05-06 13:12
2009.07.12
Как повторить интерфейс Яндекс.Картинок.





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