Главная страница
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.038 c
9-1066645311
MozG
2003-10-20 14:21
2004.04.18
Еще один вопрос, как сделать дым за каждой рокетой


3-1080121143
Dimedrol
2004-03-24 12:39
2004.04.18
Создаю процедуру, FB говорит - parameter mismatch.


9-1066374989
NailMan
2003-10-17 11:16
2004.04.18
Оптимизация рендера космического пространства


7-1076265430
axe_roma
2004-02-08 21:37
2004.04.18
доступ


3-1079606654
Чайник.
2004-03-18 13:44
2004.04.18
DBComboBox?