а разве он что то не правильно сказал? я полистал немного, вроде бы действительно можно отправлять мессагу в окно, через SendMessage или PostMessage .. Тут уже я чото налепил, не люблю винапи :S Прошу уж подсказать как тут быть..
убрал, но я не понимаю почему процесс завершается как только я нажму на нужную кнопку
Вместо мессаг ставил просто cout, дабы посмотреть как оно там работает, оказывается проблема в самом цикле.. Хотя даже наверное не в самом цикле, а в GetAsyncKeyState(VK_SPACE).. То ли я не правильно что то указал, то ли она не хочет возвращать false что конечно маловероятно..
У меня такое ощущние - наугад как ночью по тайге.
Человек задает совершенно посторонние вопросы, мы ему даем совершенно посторонние ответы, а в конце он напишет - спасибо все получилось. Вот и думай что это было.
к стати, это правда, что GetAsyncKeyState() можно использовать только в win32 оконном приложении?Я же делал консольным, поэтому наверное и не получалось, т.к. точка входа там через WinMain().. В общем тут я вообще не знаю поэтому прошу подправить если что..
------------------------------------------
еще хотелось бы спросить, как считывать параметры запуска программы? например bhop.exe -space ?
Пробовал через char argv[], но передать параметры в GetAsyncKeyState() из нее у меня не получалось =/
Вложение: bhop.rar (0.3 кб)
Этот файл был скачан 199 раз. Дядя Миша проверил это вложение на вирусы 13-01-2010 в 21:08
Во-первых, посмотри внимально МСДН. Я смотрю, ты лихо поставил четвертый параметр в 0 в обоих вызовах.
Во-вторых, вот почитай:
Цитата:
Вот как работает SendMessage. Если поток вызывает SendMessage для посылки со-
общения окну, созданному им же, то функция просто обращается к оконной процедуре соответствующего окна как к подпрограмме. Закончив обработку, оконная процедура передает функции SendMessage некое значение, а та возвращает его вызвавшему потоку.
Однако, если поток посылает сообщение окну, созданному другим потоком, операции, выполняемые функцией SendMessage, значительно усложняются. Windows требует, чтобы оконное сообщение обрабатывалось потоком, создавшим окно. Поэтому, если вызвать SendMessage для отправки сообщения окну, созданному в другом процессе и, естественно, другим потоком, Ваш поток не сможет обработать это сообщение — ведь он не работает в адресном пространстве чужого процесса, а потому не имеет доступа к коду и данным соответствующей оконной процедуры. И действительно, Ваш поток приостанавливается, пока другой поток обрабатывает сообщение. Поэтому, чтобы один поток мог отправить сообщение окну, созданному другим потоком, система должна выполнить следующие действия.
Во-первых, переданное сообщение присоединяется к очереди сообщений потока-приемника, в результате чего для этого потока устанавливается флаг QS_SENDMESSAGE. Во-вторых, если поток-приемник в данный момент выполняет какой-то код и не ожидает сообщений (через вызов GetMessage, PeekMessage или WaitMessage), переданное сообщение обработать не удастся — система не прервет работу потока для немедленной обработки сообщения. Но когда поток-приемник ждет сообщений, система сначала проверяет, установлен ли флаг пробуждения QS_SENDMESSAGE, и, если да, просматривает очередь синхронных сообщений, отыскивая первое из них. В очереди может находиться более одного сообщения. Скажем, несколько потоков одновременно послали сообщение одному и тому же окну. Тогда система просто ставит эти сообщения в очередь синхронных сообщений потока.
Итак, когда поток ждет сообщений, система извлекает из очереди синхронных сообщений первое и вызывает для его обработки нужную оконную процедуру. Если таких сообщений больше нет, флаг QS_SENDMESSAGE сбрасывается. Пока поток-приемник обрабатывает сообщение, поток, отправивший сообщение через SendMessage, простаивает, ожидая появления сообщения в очереди ответных сообщений. По окончании обработки значение, возвращенное оконной процедурой, передается асинхронно в очередь ответных сообщений потока-отправителя. Теперь он пробудится и извлечет упомянутое значение из ответного сообщения. Именно это значение и будет результатом вызова SendMessage. С этого момента поток-отправитель возобновляет работу в обычном режиме.