Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

ввод в чужом окне без keybd_Event   Найти похожие ветки 

 
__Ed__   (2003-08-02 14:08) [0]

Уважаемае мастера! Как корректно эмулировать в чужом окне
(есть хэндл) ввод символов, не используя keybd_Event?
Я пробовал SendMessage(Handle, WM_KEYDOWN, ...) и WM_KEYUP но
реакции не было. Может что то не то с параметрами намудрил,
а может этот метод не работает?

Заранее спасибо за развёрнутый ответ! :)


 
Delphi5.01   (2003-08-02 21:55) [1]

poprobui WM_SETETXT
no u mnea taje problema, v nekotorix oknax ne pishet, a s nekotorix ne mogu poluchit soderjimoe!


 
Spawn   (2003-08-03 10:53) [2]

ScanCode:=MapVirtualKey(Key,0);
lParam := ScanCode shl 16 or 1;
SendMessage(Wnd,WM_KEYDOWN,Key,lParam);


 
esVer   (2003-08-03 17:06) [3]

keybd_Event однозначно надежнее.


 
Diamond Cat   (2003-08-07 01:30) [4]

sendinput


 
Сергеич   (2003-08-07 11:40) [5]

Работал над этой пробл.
Спокойно можно посылать любые клавиши с помощью
PostMessage и\или Sendmessage, кроме vk_control, vk_shift.
Т.е. из сочетания Ctrl Home уйдет только Номе.
Текст программы могу послать.
Отлажена 90% с помощью keybd_event.
Пиши abc@aeroflot.ru


 
oni   (2003-08-07 19:07) [6]

//Try this:

procedure TForm1.PostKey(hWindow: HWnd; key: Word; const shift: TShiftState; specialkey: Boolean);
var
lParam: LongInt;
begin
if IsWindow(hWindow) then
begin
lParam := MakeLong(0, MapVirtualKey(key, 0));
if specialkey then
lParam := lParam or $1000000;
if ssShift in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_SHIFT, MakeLong(0, MapVirtualKey(VK_SHIFT, 0)));
if ssAlt in shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
lParam := lParam or $20000000;
end;
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
(* post the key messages *)
if ssAlt in Shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, key, lParam);
PostMessage(hWindow, WM_SYSKEYUP, key, lParam or $C0000000);
end
else
begin
PostMessage(hWindow, WM_KEYDOWN, key, lParam);
PostMessage(hWindow, WM_KEYUP, key, lParam or $C0000000);
end;
Application.ProcessMessages;
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYUP, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYUP, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYUP, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssAlt in shift then
( hWindow, WM_SYSKEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0) //Try this:

procedure TForm1.PostKey(hWindow: HWnd; key: Word; const shift: TShiftState; specialkey: Boolean);
var
lParam: LongInt;
begin
if IsWindow(hWindow) then
begin
lParam := MakeLong(0, MapVirtualKey(key, 0));
if specialkey then
lParam := lParam or $1000000;
if ssShift in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_SHIFT, MakeLong(0, MapVirtualKey(VK_SHIFT, 0)));
if ssAlt in shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
lParam := lParam or $20000000;
end;
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
(* post the key messages *)
if ssAlt in Shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, key, lParam);
PostMessage(hWindow, WM_SYSKEYUP, key, lParam or $C0000000);
end
else
begin
PostMessage(hWindow, WM_KEYDOWN, key, lParam);
PostMessage(hWindow, WM_KEYUP, key, lParam or $C0000000);
end;
Application.ProcessMessages;
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYUP, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYUP, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYUP, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssAlt in shift then
PostMessage(hWindow, WM_SYSKEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
end; { If }
end; { PostKey }

//Example:
PostKey(HWnd, VK_RETURN, [], FALSE);
//OR:
PostKey(TELL_HWnd, ORD("7"), [], FALSE);
//OR:
PostKey(TELL_HWnd, VK_DOWN, [], TRUE);



Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
1-40451
Andrey Voznesenskiy
2003-10-02 18:20
2003.10.13
Child формы


14-40661
Максим
2003-09-23 07:52
2003.10.13
Что делать когда пищит проц !!!


1-40412
Deb
2003-09-28 16:03
2003.10.13
Создание свойства компонента типа как у TImage.Picture


1-40406
w666w
2003-09-29 18:20
2003.10.13
Программное выделение текста в WB


3-40278
Andrei123
2003-09-22 19:59
2003.10.13
Error





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