Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 28.04.2008, 17:22   #11
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Zeraim Посмотреть сообщение
Если несложно ктонибудь дайте описание SendInput() на русском, английский словарный запас мой скуден, а переводчики чушь выдают.
Функция SendInput синтезирует нажатия клавиш, движения мыши и нажатие кнопок мыши.
Синтаксис
UINT SendInput(UINT nInputs,
LPINPUT pInputs,
int cbSize
);
Параметры
nInputs
[in] Количество структур в массиве pInputs.
pInputs
[in] Указатель на массив структур INPUT. Каждая структура представляет одно событие для вставки во входной поток клавиатуры или мыши.
cbSize
[in] Содержит размер в байтах структуры INPUT. Если cbSize не равен размеру структуры INPUT, функция завершается с ошибкой.
Возвращаемое значение
Функция возвращает количество событий, успешно помещённых во входной поток клавиатуры или мыши. Если функция возвращает ноль, значит ввод был заблокирован другим потоком. Чтобы получить более подробную информацию, вызовите GetLastError.
Microsoft Windows Vista. Функция завершается с ошибкой, если её блокирует User Interface Privilege Isolation (UIPI). Заметьте, что ни GetLastError, ни возвращаемое значение не показывают, что функция завершилась с ошибкой блокировкой UIPI.
Замечания
Microsoft Windows Vista. Функция является предметом UIPI. Приложениям разрешается вставлять ввод только в приложения, имеющие меньший или равный уровень integrity [защищённости?].
Somebody вне форума Ответить с цитированием
Старый 30.04.2008, 16:48   #12
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Спасибо Somebody за описание SendInput(), я им воспользовался, но игра Holic Online не реагировала на нажитие Ф2 хотя другие приложения реагировали:
Код:
Inp.Itype := INPUT_KEYBOARD;
Inp.ki.wVk := VK_F2;
Inp.ki.dwFlags := 0;
SendInput(1, Inp, SizeOf(Inp));
sleep(500);
Inp.ki.dwFlags := KEYEVENTF_KEYUP;
SendInput(1, Inp, SizeOf(Inp));
Сейчас сижу читаю про хуки, но столкнулся с некоторыми вопросами:
setwindowshookex(idhook: integer; lpfn: tfnhookproc; hmod: hinst; dwthreadid: dword): hhook;
idhook - тип хука который ставим, на мышку или на клаву и тд...
lpfn - указатель на саму hook функцию. Как этот указатель получить ?
hmod - принимает значение hinstance или дескриптор dll. А если не глобальный хук, какое значение принимает?
dwthreadid - идентифицирует поток, в который вставляется ловушка. Поток надо самому указывать или есть функция которая его определяет? А если поток будет занят то что делать?
Zeraim вне форума Ответить с цитированием
Старый 01.05.2008, 09:08   #13
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

ЧИТАЙ MSDN!!!
Цитата:
Сообщение от Zeraim Посмотреть сообщение
lpfn - указатель на саму hook функцию. Как этот указатель получить ?
допустим функция MyFunc1 у тебя обработчик хука, тогда @MyFunc1 - это и есть указатель на твою хук-функцию

Цитата:
Сообщение от Zeraim Посмотреть сообщение
hmod - принимает значение hinstance или дескриптор dll. А если не глобальный хук, какое значение принимает?
если хук ставится на текущий поток, то это значение равно нулю.

Цитата:
Сообщение от Zeraim Посмотреть сообщение
dwthreadid - идентифицирует поток, в который вставляется ловушка. Поток надо самому указывать или есть функция которая его определяет?
если глобальный хук, то значение равно нулю. Если не глобальный, то ID потока, на который надо поставить хук.
функция GetCurrentThreadId определяет ID текущего потока.

Цитата:
Сообщение от Zeraim Посмотреть сообщение
А если поток будет занят то что делать?
это бред!
rpy3uH вне форума Ответить с цитированием
Старый 01.05.2008, 12:56   #14
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Zeraim Посмотреть сообщение
но игра Holic Online не реагировала на нажитие Ф2 хотя другие приложения реагировали
А игры - это отдельная тема, там бывает DirectX и опрос нажатых клавиш по таймеру.
Somebody вне форума Ответить с цитированием
Старый 05.05.2008, 01:36   #15
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Здрасте, у меня чтото несовсем работает:
Код:
SendMessage(FindWindow('Notepad2',nil),wm_SetFocus,0,0);
SendMessage(FindWindow('Notepad2',nil),wm_KeyDown,vk_NUMPAD1,0);
sleep(100);
SendMessage(FindWindow('Notepad2',nil),wm_KeyUp,vk_NUMPAD1,0);
фокус блокнот получает а писть непишет 1, подскажите где ошибка.
=================================== ========================
Спасибо, незнал если чесно 8(

Последний раз редактировалось Zeraim; 05.05.2008 в 21:10.
Zeraim вне форума Ответить с цитированием
Старый 05.05.2008, 20:35   #16
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

сообщение надо отправлять не главному окну блокнота, а его полю ввода. Поле ввода это тоже окно!!! Его надо найти через FindWindowEx.
rpy3uH вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация нажатия клавиш Air Свободное общение 28 04.02.2010 13:38
Эмуляция нажатия нескольких клавиш -=Shad0www Общие вопросы Delphi 3 12.05.2008 08:13
Как заставить программу реагтровать на нажатия клавиш? AngelOfDeath Общие вопросы Delphi 9 07.04.2008 23:58
Проверка нажатия клавиш в компоненте Мемо|Delphi GAGARIN-NEW Помощь студентам 4 09.12.2007 20:59
программа по эмуляции нажатия клавиш sr_lexx Win Api 3 03.12.2007 16:40