Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Имуляция ввода текста с клавиатуры [D7, WinXP]


turonix ©   (2004-02-12 15:35:00) 

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


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

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


Dimka Maslov   (2004-02-17 12:16:00) [2]

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


turonix   (2004-02-17 11:11:00) [3]

Посмотрел на этот модуль 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 такие флаги есть. С другими флагами прога компилируется, но эмулировать ничего не хочет... В чем ошибка?


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

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


turonix   (2004-02-13 12:31:00) [5]

Почитал в 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)?


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

keybd_event + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо