Сейчас на форуме: zombi-vadim, zds (+4 невидимых) |
eXeL@B —› Программирование —› Программа работает только внутри отладчика |
. 1 . 2 . 3 . 4 . >> |
Посл.ответ | Сообщение |
|
Создано: 23 сентября 2013 20:27 · Поправил: Envy12 · Личное сообщение · #1 Есть код: Code:
Первые 2 стркои закоментил тк с ними функция отказывается работать вне отладчика, без них все ок, как в отладчике так и без. В чем тут дело? |
|
Создано: 23 сентября 2013 20:37 · Личное сообщение · #2 |
|
Создано: 23 сентября 2013 20:37 · Личное сообщение · #3 может стоило бы почитать про RegisterHotKey. Code:
если хотите использовать RegisterHotKey, то создавайте окошко, хотя бы невидимое, а там ловите WM_HOTKEY |
|
Создано: 23 сентября 2013 20:40 · Поправил: Envy12 · Личное сообщение · #4 Phantom007 пишет: Работает - не трогай. (с) UniSoft пишет: если хотите использовать RegisterHotKey, то создавайте окошко, хотя бы невидимое, а там ловите WM_HOTKEY Так и без окошка GetMessage ловит хоткеи. А нащет окна, незнаю, может есть какой-то нормальный способ, но для меня сделать в фасме окно почти непосильная задача, поэтому я всячески избегаю их. В msdn про hwnd не все так однозначно. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 23 сентября 2013 20:57 · Личное сообщение · #5 Программа работает только внутри отладчика - прям какой-то MRD (DRM наоборот) Может там есть код: Code:
| Сообщение посчитали полезным: deniskore |
|
Создано: 23 сентября 2013 20:58 · Поправил: Envy12 · Личное сообщение · #6 |
|
Создано: 24 сентября 2013 04:27 · Поправил: dosprog · Личное сообщение · #7 Envy12, невидимое окошко-то создайте. Мало ли что там "и так работает"... - - - - - - - - - - - - -- - - - -- - - - - -- >8 ;;Create invisible main window: push 0 ;; lParam push hInst ;; hInstance push 0 ;; menu push 0 ;; Parent hWnd push 0 ;; height push 0 ;; width push 1 ;; start_y push 1 ;; start_x push WS_DISABLED ;; 8000000h - window style push offset szTitleName ;; any title string ptr push offset szClassName ;; Register class structure first! push 0 ;; extra style call CreateWindowEx - - - - - -- - - - -- - - - - -- >8 Как заполнять WNDCLASS STRUC - гляньте в примерах. | Сообщение посчитали полезным: Envy12 |
|
Создано: 24 сентября 2013 19:40 · Поправил: Envy12 · Личное сообщение · #8 Проблемка с recource data, что нужно поставить туда? После CreateWindow входит в процедуру, но хендл не возвращает, ошибка 714. В мсдн описано 2 случая либо фейл, либо succeed, но у меня функция как бы сработала, однако hwnd нету. Все разобрался) Только вот все равно не работает. Если в GetMessage указать hwnd, то прога останавливается, а оно мне ненужно. |
|
Создано: 24 сентября 2013 22:03 · Личное сообщение · #9 |
|
Создано: 24 сентября 2013 22:36 · Поправил: dosprog · Личное сообщение · #10 Envy12, тут же написали, что обработку хоткеев нужно выполнять в оконной процедуре... так и выполните обработку в ней - установите какой-нибудь флажок. Класс окна должен быть зарегистрирован. При его регистрации - задаётся указатель на оконную процедуру. Ещё лучше - найдите готовую программку, где это всё реализовано, и посмотрите, как сделано. |
|
Создано: 24 сентября 2013 22:41 · Поправил: Envy12 · Личное сообщение · #11 |
|
Создано: 24 сентября 2013 22:50 · Поправил: Envy12 · Личное сообщение · #12 dosprog пишет: так и выполните обработку в ней - установите какой-нибудь флажок. Класс окна должен быть зарегистрирован. При его регистрации - задаётся указатель на оконную процедуру. Я уже все сделал, CreateWindows, класс зарегал. Если я сделаю проверку хоткея в оконной процедуре, то она Code:
|
|
Создано: 24 сентября 2013 22:55 · Личное сообщение · #13 |
|
Создано: 24 сентября 2013 22:57 · Личное сообщение · #14 |
|
Создано: 24 сентября 2013 23:00 · Поправил: dosprog · Личное сообщение · #15 Envy12, короче, неправильно. В оконной процедуре нужно ТОЛЬКО УСТАНАВЛИВАТЬ ФЛАЖКИ. Только. Найдите программку BAZARBOX.EXE - там корректно выполняется обработка горячих клавиш. Классика. P.S. - вот она: 2030_24.09.2013_EXELAB.rU.tgz - BAZARBOX.RAR |
|
Создано: 24 сентября 2013 23:18 · Поправил: Envy12 · Личное сообщение · #16 |
|
Создано: 25 сентября 2013 00:39 · Поправил: Envy12 · Личное сообщение · #17 Сделал виндовую процедуру, добавил туда проверку на хоткеи, Code:
Если приаттачится к процессу, то он стоит ничего не делает, даже незаходит на бряки, по которым в отладчике идет. |
|
Создано: 25 сентября 2013 00:56 · Поправил: dosprog · Личное сообщение · #18 |
|
Создано: 25 сентября 2013 13:43 · Личное сообщение · #19 |
|
Создано: 25 сентября 2013 20:10 · Поправил: dosprog · Личное сообщение · #20 Envy12, вот странное дело, я же дал вам пример готовой работающей программки. Ну что стОит напустить на неё IDA и выдрать оттуда интересующее?.. Вообще, как я понял, у вас консольная программа. WndProc при этом делать ничего не должна. В ней - только обработка заранее назначенных хоткеев - установка своих внутренних флажков. Как уже писалось выше от UniSoft... Подумайте, а что программа будет делать с теми символами, которые будут скапливаться в STDIN от случайных или неслучайных нажатий на любые кнопки во время её работы? То-есть, помимо реакции на "горячие" клавиши должны обрабатываться и символы из STDIN, иначе по завершении вашей программы все нажатия других ("негорячих") кнопок будут вывалены в командную строку консоли. P.S. - ((Учитывая следующий пост от UniSoft)) - если хотите, чтобы программа работала на всей линейке систем MS, нужно "расслабиться и попытаться получить удовольствие" от всех их (MS) штучек, сделав всё по документации. Это нелегко. )) |
|
Создано: 25 сентября 2013 20:58 · Личное сообщение · #21 Code:
WINAPI функция возвращает результат в eax/rax... Ну а GetMessage возвращает BOOL... значение в ecx по возвращению из функции считается случайным, и не должно использоваться. | Сообщение посчитали полезным: dosprog |
|
Создано: 25 сентября 2013 23:04 · Поправил: Envy12 · Личное сообщение · #22 Не знаю можно ли прогу считать консольной, если у ней нету окна или консоли запущенной. Я вашу программу прогнал в оле и постарался сделать также. То-есть вы считаете, что у меня прога не правильно работает без отладчика, по вине stdin? Какие данные туда идут? Я никаких манипуляций с ним не производил. У меня проблема состоит в том и только том, что функция перестает работать с хоткеями, без них же все ок, также как и в отладчике. Максимум программа должна работать на хп и 7, минимум только на 7. GetMessage в ecx пишет ид хоткея, случайных значений там не наблюдал. |
|
Создано: 25 сентября 2013 23:26 · Поправил: dosprog · Личное сообщение · #23 Envy12, Программа BAZARBOX.EXE - не является консольной. Это GUI-приложение. Прогу можно считать консольной, если она требует запуска консоли. Консольная программа тоже может создавать окна, в том числе и видимые, но консоль ей требуется по определению. Ваш код не работает по той причине, что вы неверно используете функцию RegisterHotKey(). Может, вообще отказаться от хоткеев и обойтись работой со STDIN/STDOUT ? Впрочем, вот скелет консольной программы с обработкой хоткеев, а дальше я пас. 923a_25.09.2013_EXELAB.rU.tgz - TEST_HOT.EXE |
|
Создано: 26 сентября 2013 02:51 · Поправил: UniSoft · Личное сообщение · #24 Envy12 пишет: Не знаю можно ли прогу считать консольной, если у ней нету окна или консоли запущенной. Нельзя. Envy12 пишет: То-есть вы считаете, что у меня прога не правильно работает без отладчика Уже сказали почему, я даже вырезку привел из MSDN, но вы почему-то упорно не верите... Не просто так там наверное сказали, что hWnd не может быть NULL. Envy12 пишет: GetMessage в ecx пишет ид хоткея, случайных значений там не наблюдал. Да мало ли что вы наблюдаете в отладчике, есть некие стандарты, хотите чтобы работало, пишите правильно... Придерживайтесь стандартов. Примеров же навалом, на той же странице fasm'а... В вашей ревизии ядра может Ну и вот рабочий код на закуску, набросал быстренько... Скрытое окошко, CTRL+F1 - выводит MessageBox, CTRL+F2 (выводит MessageBox и далее выходит из проги) (Хотя честно говоря, я никогда ранее не использовал связку PostThreadMessage/GetMessage) Интересно было бы услышать отзывы от спецов Code:
|
|
Создано: 26 сентября 2013 19:28 · Поправил: Envy12 · Личное сообщение · #25 dosprog пишет: Программа BAZARBOX.EXE - не является консольной. Это GUI-приложение. Я говорил про свою программу. У меня в ней нету консоли. dosprog пишет: Ваш код не работает по той причине, что вы неверно используете функцию RegisterHotKey(). UniSoft пишет: Уже сказали почему, я даже вырезку привел из MSDN, но вы почему-то упорно не верите... Не просто так там наверное сказали, что hWnd не может быть NULL. А вы мне почему не верите? Я привел свой код: Code:
UniSoft пишет: Да мало ли что вы наблюдаете в отладчике, есть некие стандарты, хотите чтобы работало, пишите правильно... Придерживайтесь стандартов. Я сам долго не хотел делать в виндовой процедуре еще один вызов GetMessage, но мне нужно чтобы эти хоткеи обрабатывались последовательно. У меня не было ShowWindow, возможно в этом проблема. Так еще можно долго гадать, вот код, кому интересно: Code:
|
|
Создано: 27 сентября 2013 00:11 · Поправил: dosprog · Личное сообщение · #26 |
|
Создано: 27 сентября 2013 03:12 · Поправил: dosprog · Личное сообщение · #27 Envy12, вы невнимательны... вот она ваша программка: f45a_27.09.2013_EXELAB.rU.tgz - транслировалось FASM'ом. Переделана WndProc. |
|
Создано: 27 сентября 2013 17:15 · Личное сообщение · #28 |
|
Создано: 09 октября 2013 20:16 · Личное сообщение · #29 Итак, веселье продолжается Убрал из проги все что связано с окнами, хоткеями и тд, оставил только процедуру остановки и опять же, вне отладчика половина кода из процедуры просто игнорируется и проходит мимо! Уважаемые форумчане, прошу помогите, тут что-то очень странное Code:
|
|
Создано: 09 октября 2013 21:12 · Личное сообщение · #30 |
. 1 . 2 . 3 . 4 . >> |
eXeL@B —› Программирование —› Программа работает только внутри отладчика |