Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
9-1066025914
@ndrew
2003-10-13 10:18
2004.04.18
обработка клавишь в DelphiX


14-1079710412
Orion2
2004-03-19 18:33
2004.04.18
Зацените рассказик


1-1080478216
Guest32545654
2004-03-28 16:50
2004.04.18
Как получить массив символов dos-окна?


1-1080554509
СержК
2004-03-29 14:01
2004.04.18
Синхронизация системного времени


1-1080526986
Алексей Петухов
2004-03-29 06:23
2004.04.18
Excel, обратный вызов?




   Наверх