HLFX.Ru Forum Страницы (3): « 1 [2] 3 »
Показать все 36 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- эмуляция нажатия (https://hlfx.ru/forum/showthread.php?threadid=2049)


Отправлено BioHazard 10-01-2010 в 14:20:

а разве он что то не правильно сказал? я полистал немного, вроде бы действительно можно отправлять мессагу в окно, через SendMessage или PostMessage .. Тут уже я чото налепил, не люблю винапи :S Прошу уж подсказать как тут быть..


Отправлено Дядя Миша 10-01-2010 в 14:25:

BioHazard выкинь среднюю мессагу нафиг. Не нужна она.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено BioHazard 10-01-2010 в 15:25:

убрал, но я не понимаю почему процесс завершается как только я нажму на нужную кнопку
Вместо мессаг ставил просто cout, дабы посмотреть как оно там работает, оказывается проблема в самом цикле.. Хотя даже наверное не в самом цикле, а в GetAsyncKeyState(VK_SPACE).. То ли я не правильно что то указал, то ли она не хочет возвращать false что конечно маловероятно..


Отправлено Дядя Миша 10-01-2010 в 16:32:

BioHazard да ты посмотри как в квейке устроено
Там маленький цикл, который считывает все пришедшие мессаги.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 10-01-2010 в 16:35:

да цикл у тебя организован неправильно, что тут думать?
надо его сделать бесконечным, и прерывать только при нажатии другой клавиши, скажем, еск.

__________________

xaerox on Vivino


Отправлено Дядя Миша 10-01-2010 в 18:37:

У меня такое ощущние - наугад как ночью по тайге.
Человек задает совершенно посторонние вопросы, мы ему даем совершенно посторонние ответы, а в конце он напишет - спасибо все получилось. Вот и думай что это было.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 10-01-2010 в 18:43:

Дядя Миша
Главное, чтобы у автора получилось.

__________________

xaerox on Vivino


Отправлено BioHazard 10-01-2010 в 19:01:

тык я спасибо написал за то что сказали куда копать..
А по делу - делов то, подправить цикл и разобраться с мессагами


Отправлено BioHazard 13-01-2010 в 16:22:

ну помогите хотябы с отправкой мессаги


Отправлено Дядя Миша 13-01-2010 в 17:10:

BioHazard да ты хотябы код покажы. Только не в теге, а вложением, блин.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено BioHazard 13-01-2010 в 19:51:

к стати, это правда, что GetAsyncKeyState() можно использовать только в win32 оконном приложении?Я же делал консольным, поэтому наверное и не получалось, т.к. точка входа там через WinMain().. В общем тут я вообще не знаю поэтому прошу подправить если что..

------------------------------------------

еще хотелось бы спросить, как считывать параметры запуска программы? например bhop.exe -space ?
Пробовал через char argv[], но передать параметры в GetAsyncKeyState() из нее у меня не получалось =/


Отправлено Дядя Миша 13-01-2010 в 21:08:

BioHazard это не код, а гамно какое-то. Тут все переделывать надо.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено BioHazard 13-01-2010 в 21:43:

не спорю. вот и прошу помощи..


Отправлено BioHazard 14-01-2010 в 15:16:

Со считыванием состояния кнопки разобрался. Остался вопрос с отправкой мессаги в окно.. Мессага в окно не отправляется вообще =(


Отправлено XaeroX 14-01-2010 в 15:41:

Во-первых, посмотри внимально МСДН. Я смотрю, ты лихо поставил четвертый параметр в 0 в обоих вызовах.
Во-вторых, вот почитай:

Цитата:
Вот как работает SendMessage. Если поток вызывает SendMessage для посылки со-
общения окну, созданному им же, то функция просто обращается к оконной процедуре соответствующего окна как к подпрограмме. Закончив обработку, оконная процедура передает функции SendMessage некое значение, а та возвращает его вызвавшему потоку.

Однако, если поток посылает сообщение окну, созданному другим потоком, операции, выполняемые функцией SendMessage, значительно усложняются. Windows требует, чтобы оконное сообщение обрабатывалось потоком, создавшим окно. Поэтому, если вызвать SendMessage для отправки сообщения окну, созданному в другом процессе и, естественно, другим потоком, Ваш поток не сможет обработать это сообщение — ведь он не работает в адресном пространстве чужого процесса, а потому не имеет доступа к коду и данным соответствующей оконной процедуры. И действительно, Ваш поток приостанавливается, пока другой поток обрабатывает сообщение. Поэтому, чтобы один поток мог отправить сообщение окну, созданному другим потоком, система должна выполнить следующие действия.

Во-первых, переданное сообщение присоединяется к очереди сообщений потока-приемника, в результате чего для этого потока устанавливается флаг QS_SENDMESSAGE. Во-вторых, если поток-приемник в данный момент выполняет какой-то код и не ожидает сообщений (через вызов GetMessage, PeekMessage или WaitMessage), переданное сообщение обработать не удастся — система не прервет работу потока для немедленной обработки сообщения. Но когда поток-приемник ждет сообщений, система сначала проверяет, установлен ли флаг пробуждения QS_SENDMESSAGE, и, если да, просматривает очередь синхронных сообщений, отыскивая первое из них. В очереди может находиться более одного сообщения. Скажем, несколько потоков одновременно послали сообщение одному и тому же окну. Тогда система просто ставит эти сообщения в очередь синхронных сообщений потока.

Итак, когда поток ждет сообщений, система извлекает из очереди синхронных сообщений первое и вызывает для его обработки нужную оконную процедуру. Если таких сообщений больше нет, флаг QS_SENDMESSAGE сбрасывается. Пока поток-приемник обрабатывает сообщение, поток, отправивший сообщение через SendMessage, простаивает, ожидая появления сообщения в очереди ответных сообщений. По окончании обработки значение, возвращенное оконной процедурой, передается асинхронно в очередь ответных сообщений потока-отправителя. Теперь он пробудится и извлечет упомянутое значение из ответного сообщения. Именно это значение и будет результатом вызова SendMessage. С этого момента поток-отправитель возобновляет работу в обычном режиме.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 15:30. Страницы (3): « 1 [2] 3 »
Показать все 36 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024