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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
14-1080113981
ИМХО
2004-03-24 10:39
2004.04.18
Еще одна задачка для шахматистов


1-1081084622
hammer
2004-04-04 17:17
2004.04.18
scrollbar


14-1080269816
Думкин
2004-03-26 05:56
2004.04.18
С днем рождения! 26 марта.


1-1080735684
Balkon
2004-03-31 16:21
2004.04.18
Печать StringGrid в QuickReport


7-1077352541
L.evil
2004-02-21 11:35
2004.04.18
Скрытый файл.