Сейчас на форуме: morgot, Rio, CDK123, zds, tyns777, tihiy_grom, rmn (+4 невидимых)

 eXeL@B —› Программирование —› [masm] Почему ьаймер падает
Посл.ответ Сообщение

Ранг: 2.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 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 ;указатель на точку входа
Использую диалоговое окно как основное
Нажымаю на пункт меню-захватить процес, тут должен быть становлен таймер, но сообщение таймера отправляетсья только один раз в момент нажатия пункта меню, что за херня?? Это как то связано с применением диалогового окна как основного?
Или в чём беда??




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 16 октября 2008 04:56
· Личное сообщение · #2

Во первых если у тебя дилог как основное окно (надо было еще показать как ты его создаешь) то ты не должен использовать
godlsd пишет:
invoke DefDlgProc,hDlg,uMsg,wParam,lParam;обработать не нужные сообщения


Ты просто должен вернуть винде обработал ты это событие или нет, она сама разрулит дальше.

Вот тебе пример из самплов masm32
Code:
  1. ; -------------------------------------------
  2. ; Call the dialog box stored in resource file
  3. ; -------------------------------------------
  4.         invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR MonthCalendar,0
  5.         invoke ExitProcess,0
  6. ; ###############################################################
  7. MonthCalendar proc hWin:DWORD,uMsg:DWORD,aParam:DWORD,bParam:DWORD
  8.     LOCAL Ps:PAINTSTRUCT
  9.         .if uMsg == WM_INITDIALOG
  10.                     mov VerInfo.dwOSVersionInfoSize,sizeof OSVERSIONINFO
  11.                     invoke GetVersionEx,ADDR VerInfo
  12.                     .if VerInfo.dwMajorVersion >= 5   ; Win2000 or XP ?
  13.                         invoke FadeInOpen,hWin
  14.                     .else
  15.                         invoke AnimateOpen,hWin
  16.                     .endif
  17.                     invoke SetTimer,hWin,ID_TIMER,5000,0
  18.                     invoke SetFocus,hWin
  19.         .elseif uMsg == WM_COMMAND
  20.                         mov eax,aParam
  21.                         .if eax == ID_BUTTON
  22.                             invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
  23.                         .endif
  24.         .elseif uMsg == WM_NOTIFY
  25.                         mov eax,bParam
  26.                         mov eax,(NMHDR PTR [eax]).code
  27.                         .if eax == DTN_CLOSEUP
  28.                             mov eax,aParam
  29.                             .if eax == ID_DATETIMEPICKER
  30.                                 invoke GetDlgItemText,hWin,ID_DATETIMEPICKER,ADDR DateString,20 
  31.                                 invoke MessageBox,hWin,ADDR DateString,ADDR DatePicker,MB_OK
  32.                             .endif 
  33.                         .endif
  34.         .elseif uMsg == WM_PAINT
  35.                         invoke BeginPaint,hWin,ADDR Ps
  36.                         invoke Paint_Goofy_Eyes,hWin
  37.                         invoke Paint_Goofy_Title,hWin 
  38.                         invoke EndPaint,hWin,ADDR Ps
  39.         .elseif uMsg == WM_CLOSE
  40.                         .if VerInfo.dwMajorVersion >= 5   ; Win2000 or XP ?
  41.                             invoke FadeOutClose,hWin
  42.                         .else
  43.                             invoke AnimateClose,hWin
  44.                         .endif
  45.                         invoke KillTimer,hWin,ID_TIMER
  46.                         invoke EndDialog,hWin,NULL
  47.         .elseif uMsg == WM_TIMER
  48.                         mov bitmapflag,1
  49.                         invoke Paint_Goofy_Eyes,hWin
  50.                         invoke Sleep,200
  51.                         mov bitmapflag,0
  52.                         invoke Paint_Goofy_Eyes,hWin
  53.         .endif
  54.         xor eax,eax
  55.         ret
  56.                     
  57. MonthCalendar endp


-----
Yann Tiersen best and do not fuck



 eXeL@B —› Программирование —› [masm] Почему ьаймер падает
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати