Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Имуляция ввода текста с клавиатуры   Найти похожие ветки 

 
turonix ©   (2004-02-12 15:35) [0]

Здравствуйте. У меня такой вопрос: я хочу , чтобы моя программа могла печатать текст в других программах (например вводить логин в заданное поле). Короче ситуация такая: выделено окно ввода (курсор туда уже установлен) и теперь моя программа должна ввести туда текст. Как это можно сделать?


 
Рамиль ©   (2004-02-12 15:40) [1]

keybd_event + F1


 
turonix ©   (2004-02-13 12:31) [2]

Почитал в msdn про эту функцию. Для XP рекомендуется функция UINT SendInput(      

   UINT nInputs,
   LPINPUT pInputs,
   int cbSize
);

,где
nInputs
[in] Specifies the number of structures in the pInputs array.

pInputs
[in] Pointer to an array of INPUT structures. Each structure represents an event to be inserted into the keyboard or mouse input stream.

cbSize
[in] Specifies the size, in bytes, of an INPUT structure. If cbSize is not the size of an INPUT structure, the function will
fail.

В свою очередь структура Input имеет вложенные структуры:MOUSEINPUT mi; KEYBOARDINPUT ki; HARDWAREINPUT hi;

Очевидно мне нужна KEYBOARDINPUT. Данная структкра так-же имеет кучу полей для заполнения.

Вопрос такой: каким будет синтаксис всей этой хрени? Я просто с WIN API мало имел дело и как определять и заполнять структуры имею лишь поверхностное представление. Так что не могли\ли кто-нибудь привести пример? И еще: как узнать размер массива INPUT (третий параметр функции SendInput)?


 
SasaR   (2004-02-16 17:05) [3]

На этом и на других сайтах валялся модуль "SendKeys". Как раз, что Вам нужно. Нужно Handle (или имя окна) + посылаемые клавиши.


 
turonix ©   (2004-02-17 11:11) [4]

Посмотрел на этот модуль SendKeys. Не спорю штука хорошая, но хотелось бы самому немного разобраться. Вот что я написал

procedure TForm1.Button1Click(Sender: TObject);
var
inp : tagINPUT;
begin
   Edit1.SetFocus;
   inp.ki.wVk := ord("1");
   inp.ki.wScan := ord("2");
   inp.ki.dwFlags :=  KEYEVENTF_SCANCODE;
   inp.ki.time := 0;
   SendInput(1, inp, sizeOf(inp));
end;

самое интересное, что на "inp.ki.dwFlags :=  KEYEVENTF_SCANCODE;"
компилятор выдает ошибку: [Error] Unit1.pas(35): Undeclared identifier: "KEYEVENTF_SCANCODE"  ,то же самое для флага KEYEVENTF_UNICODE, хотя в MSDN такие флаги есть. С другими флагами прога компилируется, но эмулировать ничего не хочет... В чем ошибка?


 
Dimka Maslov ©   (2004-02-17 12:16) [5]

Не всё, что есть в MSDN и последних сишных заголовках, есть и в Delphi. Так-что смотри в каком заголовке объявлена структура, ищи его и узнай значение


 
juicenman   (2004-02-18 22:10) [6]

Чем SendMessage не подходит?



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

Форум: "Система";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.033 c
3-1079872042
Vilux
2004-03-21 15:27
2004.04.18
Ado и многопоточность


6-1076345884
Budy
2004-02-09 19:58
2004.04.18
Проверка соединений


7-1076865401
Тупикин Илья
2004-02-15 20:16
2004.04.18
Работа с реестром


1-1080140043
ricks
2004-03-24 17:54
2004.04.18
Методы ActiveX


3-1079605222
sergej
2004-03-18 13:20
2004.04.18
Local sql





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