eXeL@B —› Программирование —› [masm] Почему ьаймер падает |
Посл.ответ | Сообщение |
|
Создано: 16 октября 2008 03:09 · Личное сообщение · #1 Вот код программы DlgProc proc hDlg:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL wpos:POINT .IF uMsg==WM_CLOSE invoke PostQuitMessage,NULL;создать запрос на закрытие ветки .ELSEIF uMsg==WM_COMMAND mov eax,wParam;поместить в eax wParam(значения нажатых кнопок меню) .IF ax==IDM_EXIT;если нажато выйти invoke SendMessage,hDlg,WM_CLOSE,NULL,NULL;Уничтожить окно .ELSEIF ax==IDM_OPENPROC;Захватить клиент invoke SetTimer,hDlg,1,50,0 .ENDIF .ELSEIF uMsg==WM_TIMER .IF wParam==1 invoke GetKeyState,VK_G .IF eax invoke GetCursorPos,addr wpos invoke WindowFromPoint,wpos.x,wpos.y mov rhwnd,eax invoke GetWindowThreadProcessId,rhwnd,addr rpid mov rpid,eax .IF rpid invoke MessageBox,hDlg,addr ClassName,NULL,MB_OK invoke KillTimer,hDlg,1 .ENDIF .ENDIF .ENDIF .ELSE invoke DefDlgProc,hDlg,uMsg,wParam,lParam;обработать не нужные сообщения ret ;вернуться в точку вызова .ENDIF xor eax,eax ;функция вернёт ноль ret;вернуться в точку вызова DlgProc endp ;Конец процедцры окна end start ;указатель на точку входа Использую диалоговое окно как основное Нажымаю на пункт меню-захватить процес, тут должен быть становлен таймер, но сообщение таймера отправляетсья только один раз в момент нажатия пункта меню, что за херня?? Это как то связано с применением диалогового окна как основного? Или в чём беда?? |
|
Создано: 16 октября 2008 04:56 · Личное сообщение · #2 Во первых если у тебя дилог как основное окно (надо было еще показать как ты его создаешь) то ты не должен использовать godlsd пишет: invoke DefDlgProc,hDlg,uMsg,wParam,lParam;обработать не нужные сообщения Ты просто должен вернуть винде обработал ты это событие или нет, она сама разрулит дальше. Вот тебе пример из самплов masm32 Code:
----- Yann Tiersen best and do not fuck |
eXeL@B —› Программирование —› [masm] Почему ьаймер падает |