Доброго времени суток, не пинайте за расспросы про апи функции, но в справочниках не понимаю описания: что должна делать функция PeekMessage из USER32.dll? для чего можно её применять? из того, что я читал в инете: функция долна возвращать строку после какого-то восстановления (примерно так)
msdn? она делает то же что и GetMessage только не убирает сообщение из очереди собщений нужна чтобы несколько раз прочитать сообщение перед тем как его прочитает GetMessage
GoldFinch > только не убирает сообщение из очереди собщений Зависит от ее последнего параметра. WantButCant > для чего можно её применять? Цикл выборки сообщений может выглядеть так Код (Text): while (GetMessage(&msg, (HWND) NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } если сообщений нет, то программа "висит" внутри GetMessage, если построить этот цикл так Код (Text): while ( !bQuit ) { if (PeekMessage( &msg, NULL, 0, 0, PM_REMOVE )) { if ( msg.message == WM_QUIT ) { bQuit = TRUE; } else { TranslateMessage( &msg ); DispatchMessage( &msg ); } } else { // тут можно заняться чем-нибудь еще } }
извиняюсь за свою тупость: что подразумевается под "сообщением"?, если это просто текст, то зачем какой-то функции его читать, перед тем, как его прочитает другая функция? и попутно: что делает GetMessage и для чего применяется?
WantButCant > что подразумевается под "сообщением"? Информация о каком-нибудь событии. > и попутно: ... Так не пойдет. Для начала почитай, например, Charles Petzold. Programming Windows.
WantButCant Сообщение это не текст а скорее номер. Например сообщение под номером 1 приходит к окну, когда окно создано, но перед его первым отображением на экране. Сообщение под номером 2 приходит когда окно закрывается, но перед тем как оно полностью разрушено. И так далее. У Petzold-а хорошо написано про такой вид программирования.
WantButCant разница между ними существенная в основном для программистов игр... почитай здесь... в общих чертах понятно, доходчево и по-русски... http://vsokovikov.narod.ru/New_MSDN_API/Message_queue/fn_peekmessage.htm http://vsokovikov.narod.ru/New_MSDN_API/Message_queue/fn_getmessage.htm
хм, интересные ссылки... но боюсь без знаний программирования под windows я действительно их не сомгу использовать на все 100%... посему ещё один вопрос: чем отследить (или как) входящие данные и возвращаемые значения API-шной функции? P.S. что-то поиск пока не очень итересные результаты по форуму выдаёт, продолжаю искать, но надеюсь на ответ
сейчас опишу подробней: имеется число, вычисляемое по неизвестному алгоритму реверс программы показал, что число приходит из PeekMessage, причём каждый раз число разное... и разумеется я пытаюсь узнать, что за данные приходят в PeekMessage и как они там изменяются проблема реверса PeekMessage в том, что бряки ставить там не получается - эта функция выполняется в бесконечном цикле...
Эта функция служит для того, чтобы программа не зависала, когда она перерабатывает большой поток данных. Некоторые программы, не использующие контроль очереди сообщений, просто не уступают очередь сообщений. В результате программа может просто-напросто зависнуть, а бедный пользлватель даже не сможет выключить своё "творение". Ну например программа выполняет некоторые действия циклически с большим буфером. Вот поссле каждого обновления буфера новой "порцией" данных неплохо использовать эту функцию. она смотрит - а нет ли в очереди ещё чего нибудь? Если нету - продолжаем действие. А если есть - уступим очередь. Как правило её суют перед очередным шагом прогрессбара.
PeekMessage не изменят никаких данных. Она просто извлекает сообщение из очереди сообщений. Сообщение - это просто числовое значение с возможными дополнительными параметрами. Какждую секудну в очередь сообщений могут помещаться сотни сообщений из разных источников.
Эта функция возвращает Ненулевое значение. если в очереди есть сообщение. PM_NOREMOVE - сообщение остаётся в очереди PM_REMOVE - удаляем из очереди Предотвращение зависания программы: if (PeekMessage (&message , hwnd , 0,0,PM_REMOVE) TranslateMessage (message) Dispatchmessage (message) .......... Выполняем нужное действие... (Если функция видит, что в очереди есть сообщение, оно обрабатывается также, как будто оно в основном цикле обработки сообщений)
Messages and Message Queues в частности "About Messages and Message Queues","Using Messages and Message Queues" ну и "PeekMessage"
o_O... я просто в панике... точно проверял, что именно после выполнения этой функции, в стэке по адресу 12F4C8 появляется число - при том, каждый раз разное и всегда после определённой последовательности других действий и самое странное, что число из стэка по адресу 12F4C8 потом ещё и используется xD и PeekMessage вызывается из стандартных библиотек, т.е. это не самопальный вариант если говорить совсем полно и ясно, ты выходит следующее: на одном из серверов (всем уже так надоевшей) Lineage II, стоит, ну просто, элементарная защита от ботов, в определённый пакет вместо "мусорных" байт (integer) дописывается число, при каждом конекте разное я решил отследить, откуда оно берётся, нашёл пакет, нашёл адрес, по которому появляется число - отреверсил и пришёл к PeekMessage - именно оттуда в 12F4C8 приходит число, которое в последствии переписывается в другой адрес