Сейчас на форуме: zombi-vadim, zds (+4 невидимых)

 [email protected] —› Программирование —› Программа работает только внутри отладчика
. 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение

Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 23 сентября 2013 20:27 · Поправил: Envy12
· Личное сообщение · #1

Есть код:
Code:
  1. proc check
  2. ;invoke RegisterHotKey,0,1,0x0004,0x41
  3. ;invoke RegisterHotKey,0,2,0x0004,0x4c
  4. start3:
  5.         invoke AdjustTokenPrivileges,[phToken],0,PrivilegeCount ,0,0,0
  6.         mov    [prcs.dwSize],sizeof.PROCESSENTRY32
  7.         invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
  8.         mov    [hSnapshot], eax
  9.         invoke Process32First,eax,prcs
  10.         mov edi,[memhandle2]
  11.  
  12. loop1:
  13.         invoke GetMessage,msg,0,0,0
  14.         cmp ecx,1
  15.         je stop
  16.         mov eax,[edi]
  17.         cmp dword [prcs.szExeFile],eax
  18.         jnz kill2
  19.         add edi,4
  20. next:
  21.         invoke Process32Next,[hSnapshot],prcs
  22.         cmp    eax,0
  23.         jne    loop1
  24.         jmp start3
  25. kill2:
  26. stdcall kill1
  27. jmp next
  28. stop:
  29. invoke GetMessage,msg,0,0,0
  30. cmp ecx,2
  31. jnz next
  32. invoke Sleep,1200000
  33. jmp next
  34. ret
  35. endp

Первые 2 стркои закоментил тк с ними функция отказывается работать вне отладчика, без них все ок, как в отладчике так и без. В чем тут дело?



Ранг: 19.7 (новичок), 14thx
Активность: 0.030
Статус: Участник

Создано: 23 сентября 2013 20:37
· Личное сообщение · #2

Envy12
Работает - не трогай. (с)




Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 23 сентября 2013 20:37
· Личное сообщение · #3

может стоило бы почитать про RegisterHotKey.
Code:
  1. BOOL RegisterHotKey( 
  2.   HWND hWnd, 
  3.   int id, 
  4.   UINT fsModifiers, 
  5.   UINT vk 
  6. );
  7.  
  8. hWnd  [in] Handle to the window that will receive WM_HOTKEY messages generated by the hot key. The value of <b>this parameter should not be NULL.</b>


если хотите использовать RegisterHotKey, то создавайте окошко, хотя бы невидимое, а там ловите WM_HOTKEY



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 23 сентября 2013 20:40 · Поправил: Envy12
· Личное сообщение · #4

Phantom007 пишет:
Работает - не трогай. (с)




UniSoft пишет:
если хотите использовать RegisterHotKey, то создавайте окошко, хотя бы невидимое, а там ловите WM_HOTKEY

Так и без окошка GetMessage ловит хоткеи. А нащет окна, незнаю, может есть какой-то нормальный способ, но для меня сделать в фасме окно почти непосильная задача, поэтому я всячески избегаю их. В msdn про hwnd не все так однозначно.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 23 сентября 2013 20:57
· Личное сообщение · #5

Программа работает только внутри отладчика - прям какой-то MRD (DRM наоборот)
Может там есть код:
Code:
  1. If(IsDebuggerPresent() == 0))
  2. {
  3. ExitProcess(0);
  4. }


| Сообщение посчитали полезным: deniskore

Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 23 сентября 2013 20:58 · Поправил: Envy12
· Личное сообщение · #6

ELF_7719116 пишет:
Программа работает только внутри отладчика - прям какой-то MRD (DRM наоборот)

Ну не совсем так конкретно, она работает, но функция не доходит до:
Code:
  1. stdcall kill1

а должна.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 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

Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 24 сентября 2013 19:40 · Поправил: Envy12
· Личное сообщение · #8

Проблемка с recource data, что нужно поставить туда? После CreateWindow входит в процедуру, но хендл не возвращает, ошибка 714. В мсдн описано 2 случая либо фейл, либо succeed, но у меня функция как бы сработала, однако hwnd нету.

Все разобрался) Только вот все равно не работает. Если в GetMessage указать hwnd, то прога останавливается, а оно мне ненужно.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 24 сентября 2013 22:03
· Личное сообщение · #9

Envy12

Ты бы свою задачу описал, а не ущербные попытки её решения



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 24 сентября 2013 22:36 · Поправил: dosprog
· Личное сообщение · #10

Envy12,
тут же написали, что обработку хоткеев нужно выполнять в оконной процедуре...
так и выполните обработку в ней - установите какой-нибудь флажок.
Класс окна должен быть зарегистрирован. При его регистрации - задаётся указатель на оконную процедуру.

Ещё лучше - найдите готовую программку, где это всё реализовано, и посмотрите, как сделано.



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 24 сентября 2013 22:41 · Поправил: Envy12
· Личное сообщение · #11

Dr0p пишет:
Ты бы свою задачу описал, а не ущербные попытки её решения

Нужно чтобы функция, работала и доходила до
Code:
  1. stdcall kill1
в оле все пашет, без неё нет.



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 24 сентября 2013 22:50 · Поправил: Envy12
· Личное сообщение · #12

dosprog пишет:
так и выполните обработку в ней - установите какой-нибудь флажок.
Класс окна должен быть зарегистрирован. При его регистрации - задаётся указатель на оконную процедуру.

Я уже все сделал, CreateWindows, класс зарегал. Если я сделаю проверку хоткея в оконной процедуре, то она зацикливается (выполняется слишком долго) и не выходит оттуда.
Code:
  1. proc check
  2. start3:
  3.         invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
  4.         mov    [hSnapshot], eax
  5.         invoke Process32First,eax,prcs
  6.         mov edi,[memhandle2]
  7.  
  8. loop1:
  9.      stdcall WindowsProc,[hwnd1],0,0,0
  10.         mov eax,[edi]
  11.         cmp dword [prcs.szExeFile],eax
  12.         jnz kill2
  13.         add edi,4
  14. next:
  15.         invoke Process32Next,[hSnapshot],prcs
  16.         cmp    eax,0
  17.         jne    loop1
  18.         jmp start3
  19. kill2:
  20. stdcall kill1
  21. jmp next
  22. ret
  23. endp
  24.  
  25. proc WindowsProc,hwnd,uint,wparam,lparam
  26. cmp [reg],0
  27. jnz next2
  28. mov eax,[hwnd]
  29. mov [hwnd1],eax
  30. invoke RegisterHotKey,[hwnd],1,0x0004,0x41
  31. invoke RegisterHotKey,[hwnd],2,0x0004,0x4c
  32. mov [reg],1
  33. next2:
  34. invoke GetMessage,msg,0,0,0
  35. cmp ecx,1
  36. jne exit1
  37. invoke GetMessage,msg,0,0,0
  38. cmp ecx,2
  39. jnz exit1
  40. invoke ExitProcess,0
  41. exit1:
  42. ret
  43. endp





Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 24 сентября 2013 22:55
· Личное сообщение · #13

Envy12

> Нужно чтобы функция, работала и доходила до

Ты бы свою задачу описал, а не ущербные попытки её решения



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 24 сентября 2013 22:57
· Личное сообщение · #14

Dr0p пишет:
Ты бы свою задачу описал, а не ущербные попытки её решения

Задача, сделать так чтобы записывался список исключения для процессов, а потом закрывать все что туда не входит + выключать по хоткею.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 24 сентября 2013 23:00 · Поправил: dosprog
· Личное сообщение · #15

Envy12,
короче, неправильно.
В оконной процедуре нужно ТОЛЬКО УСТАНАВЛИВАТЬ ФЛАЖКИ.
Только.

Найдите программку BAZARBOX.EXE - там корректно выполняется обработка горячих клавиш. Классика.

P.S. - вот она: 2030_24.09.2013_EXELAB.rU.tgz - BAZARBOX.RAR



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 24 сентября 2013 23:18 · Поправил: Envy12
· Личное сообщение · #16

Непойму, зачем там такой долгий цикл? Вроде в виндовой процедуре.
0040124D
Разобрался



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 25 сентября 2013 00:39 · Поправил: Envy12
· Личное сообщение · #17

Сделал виндовую процедуру, добавил туда проверку на хоткеи, все работает. В запущенном виде, без отладчика все равно не работает
Code:
  1. proc WindowsProc,hwnd,uint,wparam,lparam
  2. cmp [reg],0
  3. jnz exit1
  4. invoke RegisterHotKey,[hwnd],1,0x0004,0x41
  5. invoke RegisterHotKey,[hwnd],2,0x0004,0x4c
  6. mov [reg],1
  7. exit1:
  8. mov eax,[uint]
  9. cmp eax,0x312
  10. jne exit3
  11. mov eax,[wparam]
  12. cmp eax,1
  13. jne exit3
  14. invoke GetMessage,msg,0,0,0
  15. cmp ecx,2
  16. jne exit3
  17. invoke TranslateMessage,msg
  18. invoke DispatchMessage,msg
  19. stdcall pause1
  20. exit3:
  21. ret
  22. endp

Если приаттачится к процессу, то он стоит ничего не делает, даже незаходит на бряки, по которым в отладчике идет.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 25 сентября 2013 00:56 · Поправил: dosprog
· Личное сообщение · #18

--> Пост #15 <--



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 25 сентября 2013 13:43
· Личное сообщение · #19

То-есть мне нужно убрать из виндовой процедуры все кроме cmp eax,? Мне нужно обработать последовательно 2 хоткея, чтобы по отдельности они не работали, и чтобы строго после первого шел второй.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 25 сентября 2013 20:10 · Поправил: dosprog
· Личное сообщение · #20

Envy12,
вот странное дело, я же дал вам пример готовой работающей программки.
Ну что стОит напустить на неё IDA и выдрать оттуда интересующее?..

Вообще, как я понял, у вас консольная программа. WndProc при этом делать ничего не должна.
В ней - только обработка заранее назначенных хоткеев - установка своих внутренних флажков.
Как уже писалось выше от UniSoft...

Подумайте, а что программа будет делать с теми символами, которые будут скапливаться в STDIN
от случайных или неслучайных нажатий на любые кнопки во время её работы?
То-есть, помимо реакции на "горячие" клавиши должны обрабатываться и символы из STDIN,
иначе по завершении вашей программы все нажатия других ("негорячих") кнопок будут вывалены в
командную строку консоли.

P.S. - ((Учитывая следующий пост от UniSoft)) - если хотите, чтобы программа работала на всей
линейке систем MS, нужно "расслабиться и попытаться получить удовольствие" от всех их (MS) штучек,
сделав всё по документации. Это нелегко. ))




Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 25 сентября 2013 20:58
· Личное сообщение · #21

Code:
  1. invoke GetMessage,msg,0,0,0
  2. cmp ecx,2 ; <<<<<< как так?????
  3. jne exit3

WINAPI функция возвращает результат в eax/rax...
Ну а GetMessage возвращает BOOL...
значение в ecx по возвращению из функции считается случайным, и не должно использоваться.

| Сообщение посчитали полезным: dosprog

Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 25 сентября 2013 23:04 · Поправил: Envy12
· Личное сообщение · #22

Не знаю можно ли прогу считать консольной, если у ней нету окна или консоли запущенной.
Я вашу программу прогнал в оле и постарался сделать также.
То-есть вы считаете, что у меня прога не правильно работает без отладчика, по вине stdin? Какие данные туда идут? Я никаких манипуляций с ним не производил. У меня проблема состоит в том и только том, что функция перестает работать с хоткеями, без них же все ок, также как и в отладчике.
Максимум программа должна работать на хп и 7, минимум только на 7.
GetMessage в ecx пишет ид хоткея, случайных значений там не наблюдал.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 25 сентября 2013 23:26 · Поправил: dosprog
· Личное сообщение · #23

Envy12,
Программа BAZARBOX.EXE - не является консольной. Это GUI-приложение.
Прогу можно считать консольной, если она требует запуска консоли.
Консольная программа тоже может создавать окна, в том числе и видимые,
но консоль ей требуется по определению.
Ваш код не работает по той причине, что вы неверно используете функцию RegisterHotKey().
Может, вообще отказаться от хоткеев и обойтись работой со STDIN/STDOUT ?

Впрочем, вот скелет консольной программы с обработкой хоткеев, а дальше я пас.
923a_25.09.2013_EXELAB.rU.tgz - TEST_HOT.EXE




Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 26 сентября 2013 02:51 · Поправил: UniSoft
· Личное сообщение · #24

Envy12 пишет:
Не знаю можно ли прогу считать консольной, если у ней нету окна или консоли запущенной.

Нельзя.

Envy12 пишет:
То-есть вы считаете, что у меня прога не правильно работает без отладчика

Уже сказали почему, я даже вырезку привел из MSDN, но вы почему-то упорно не верите...
Не просто так там наверное сказали, что hWnd не может быть NULL.

Envy12 пишет:
GetMessage в ecx пишет ид хоткея, случайных значений там не наблюдал.

Да мало ли что вы наблюдаете в отладчике, есть некие стандарты,
хотите чтобы работало, пишите правильно... Придерживайтесь стандартов.
Примеров же навалом, на той же странице fasm'а...
В вашей ревизии ядра может случайно каким-то образом в ecx и попадает id хоткея (хотя я сомневаюсь), но никто не гарантирует, что в других ревизиях будет также...

Ну и вот рабочий код на закуску, набросал быстренько...
Скрытое окошко,
CTRL+F1 - выводит MessageBox,
CTRL+F2 (выводит MessageBox и далее выходит из проги)
(Хотя честно говоря, я никогда ранее не использовал связку PostThreadMessage/GetMessage)
Интересно было бы услышать отзывы от спецов

Code:
  1. format PE GUI 4.0
  2. entry start
  3.  
  4. include 'win32wx.inc'
  5.  
  6. section '.data' data readable writeable
  7.  
  8.   _class TCHAR 'FASMWIN32',0
  9.   _title TCHAR 'window example',0
  10.  
  11.   wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class
  12.  
  13. section '.bss' readable writeable
  14.   g_cookie dd ?
  15.   g_uniqmsg dd ?
  16.   g_hWnd dd ?
  17.   g_hThread dd ?
  18.   g_ThreadID dd ?
  19.   g_busy dd ?
  20.   g_msg MSG
  21.  
  22. section '.code' code readable executable
  23. ;======================================
  24.   start:
  25.         mov     [g_busy],FALSE
  26.         invoke  GetModuleHandle,0
  27.         mov     [wc.hInstance],eax
  28.         invoke  LoadIcon,0,IDI_APPLICATION
  29.         mov     [wc.hIcon],eax
  30.         invoke  LoadCursor,0,IDC_ARROW
  31.         mov     [wc.hCursor],eax
  32.         invoke  RegisterClass,wc
  33.         or      eax,eax
  34.         jz      exit_process
  35.         invoke  CreateWindowEx,0,_class,_title,WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL ;WS_VISIBLE+
  36.         mov     [g_hWnd], eax
  37.         test    eax,eax
  38.         jz      exit_process
  39.         invoke  ShowWindow,eax,SW_HIDE
  40.         invoke  GetTickCount
  41.         xor     eax,[g_hWnd]
  42.         mov     [g_cookie], eax
  43.         invoke  RegisterWindowMessage,"my_unique_message"
  44.         mov     ecx,WM_USER
  45.         or      eax,eax
  46.         cmovz   eax,ecx
  47.         mov     [g_uniqmsg],eax
  48.         invoke  CreateThread,NULL,0,ThreadProc,NULL,0,g_ThreadID
  49.         mov     [g_hThread], eax
  50.   msg_loop:
  51.         invoke  GetMessage,g_msg,NULL,0,0
  52.         or      eax,eax
  53.         jz      end_loop
  54.         invoke  TranslateMessage,g_msg
  55.         invoke  DispatchMessage,g_msg
  56.         jmp     msg_loop
  57.   end_loop:
  58.         invoke  PostThreadMessage,[g_ThreadID],WM_QUIT,0,0
  59.         invoke  WaitForSingleObject,[g_hThread],-1 ; INFINITE
  60.         invoke  MessageBox,NULL,"bye bye",_title,MB_OK+MB_SYSTEMMODAL
  61.   exit_process:
  62.         invoke  ExitProcess,[g_msg.wParam]
  63.  
  64. ;======================================
  65. proc WindowProc hwnd,wmsg,wparam,lparam
  66.         push    ebx esi edi
  67.         cmp     [wmsg],WM_CREATE
  68.         je      wmcreate
  69.         cmp     [wmsg],WM_DESTROY
  70.         je      wmdestroy
  71.         cmp     [wmsg],WM_HOTKEY
  72.         je      wmhotkey
  73.   defwndproc:
  74.         invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
  75.         jmp     finish
  76.   wmhotkey:
  77.         mov     eax,[wparam]
  78.         cmp     eax, 1
  79.         je      hotkey1
  80.         cmp     eax, 2
  81.         je      hotkey2
  82.         jmp     defwndproc
  83.   hotkey1:
  84.         cmp     [g_busy],FALSE
  85.         jnz     returnZ
  86.         mov     [g_busy],TRUE
  87.         invoke  PostThreadMessage,[g_ThreadID],[g_uniqmsg],[g_cookie],1
  88.         jmp     returnZ
  89.   hotkey2:
  90.         cmp     [g_busy],FALSE
  91.         jnz     returnZ
  92.         mov     [g_busy],TRUE
  93.         invoke  PostThreadMessage,[g_ThreadID],[g_uniqmsg],[g_cookie],2
  94.         jmp     returnZ
  95.   wmcreate:     
  96.         invoke  RegisterHotKey,[hwnd], 1, MOD_CONTROL, VK_F1
  97.         invoke  RegisterHotKey,[hwnd], 2, MOD_CONTROL, VK_F2
  98.         jmp     returnZ
  99.   wmdestroy:
  100.         invoke  UnregisterHotKey,[hwnd], 1
  101.         invoke  UnregisterHotKey,[hwnd], 2
  102.         invoke  PostQuitMessage,0
  103.   returnZ:
  104.         xor     eax,eax
  105.   finish:
  106.         pop     edi esi ebx
  107.         ret
  108. endp
  109.  
  110. ;======================================
  111. proc ThreadProc lparam
  112. local msg:MSG
  113.         push    ebx esi edi
  114.   thread_ready:
  115.         mov     [g_busy],FALSE
  116.   thread_msg_loop:
  117.         invoke  GetMessage,addr msg,NULL,0,0
  118.         or      eax,eax
  119.         jz      thread_end_loop
  120.         ; just in case
  121.         cmp    [msg.message],WM_QUIT
  122.         jz     thread_end_loop
  123.         ; Thread messages, posted by the PostThreadMessage function,
  124.         ; have a message hWnd value of NULL
  125.         cmp    [msg.hwnd],NULL ;
  126.         jnz    thread_msg_loop
  127.         ; is it our message ?
  128.         ; this is simple protection from messages send from another process
  129.         mov    eax,[g_uniqmsg]
  130.         cmp    [msg.message],eax
  131.         jnz    thread_msg_loop
  132.         mov    eax,[g_cookie]
  133.         cmp    [msg.wParam],eax
  134.         jnz    thread_msg_loop
  135.         ; here process our messages
  136.         cmp    [msg.lParam],1
  137.         jz     process_hotkey1
  138.         cmp    [msg.lParam],2
  139.         jz     process_hotkey2
  140.         ;----------------------
  141.         jmp     thread_msg_loop
  142.   process_hotkey1:
  143.         invoke  MessageBox,NULL,"pressed hotkey 1",_title,MB_OK+MB_SYSTEMMODAL
  144.         jmp     thread_ready
  145.   process_hotkey2:
  146.         invoke  MessageBox,NULL,"pressed hotkey 2",_title,MB_OK+MB_SYSTEMMODAL
  147.         invoke  SendMessage,[g_hWnd],WM_CLOSE,0,0
  148.         jmp     thread_ready
  149.   thread_end_loop:
  150.         pop     edi esi ebx
  151.         ret
  152. endp
  153.  
  154. section '.idata' import data readable writeable
  155.  
  156.   library kernel32,'KERNEL32.DLL',\
  157.           user32,'USER32.DLL'
  158.  
  159.   include 'api\kernel32.inc'
  160.   include 'api\user32.inc'




Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 26 сентября 2013 19:28 · Поправил: Envy12
· Личное сообщение · #25

dosprog пишет:
Программа BAZARBOX.EXE - не является консольной. Это GUI-приложение.

Я говорил про свою программу. У меня в ней нету консоли.

dosprog пишет:
Ваш код не работает по той причине, что вы неверно используете функцию RegisterHotKey().


UniSoft пишет:
Уже сказали почему, я даже вырезку привел из MSDN, но вы почему-то упорно не верите...
Не просто так там наверное сказали, что hWnd не может быть NULL.

А вы мне почему не верите? Я привел свой код:
Code:
  1. invoke RegisterHotKey,[hwnd],1,0x0004,0x41


UniSoft пишет:
Да мало ли что вы наблюдаете в отладчике, есть некие стандарты,
хотите чтобы работало, пишите правильно... Придерживайтесь стандартов.

Я сам долго не хотел делать в виндовой процедуре еще один вызов GetMessage, но мне нужно чтобы эти хоткеи обрабатывались последовательно.

У меня не было ShowWindow, возможно в этом проблема.
Так еще можно долго гадать, вот код, кому интересно:
Code:
  1. format PE GUI 4.0
  2. include 'win32a.inc'
  3. entry start
  4. section '.text' code readable executable
  5.  
  6. proc init
  7. start1:
  8.         invoke AdjustTokenPrivileges,[phToken],0,PrivilegeCount ,0,0,0
  9.         invoke HeapCreate,0x00040000,400,0x256
  10.         add eax,0x688
  11.         mov [memhandle2],eax
  12.         mov    [prcs.dwSize],sizeof.PROCESSENTRY32
  13.         invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
  14.         mov    [hSnapshot], eax
  15.         invoke Process32First,eax,prcs
  16.        mov edi,[memhandle2]
  17. .loop:
  18.         mov esi,prcs.szExeFile
  19.         movsd
  20.         inc [count]
  21.  
  22.         invoke Process32Next,[hSnapshot],prcs
  23.         cmp    eax,0
  24.         jne    .loop
  25. ret
  26. endp
  27.  
  28. proc kill1
  29. pushad
  30. mov eax,prcs.szExeFile
  31. mov eax,[eax]
  32. mov ecx,[count]
  33. shl ecx,1
  34. mov edi,[memhandle2]
  35. repne scasd
  36. jz end1
  37.  
  38. invoke StrStrI,prcs.szExeFile,process1
  39. cmp eax,0
  40. jne end1
  41.  
  42. invoke OpenProcess,0x1F0FFF,0,[prcs.th32ProcessID]
  43. invoke TerminateProcess,eax,NULL
  44. end1:
  45. popad
  46. ret
  47. endp
  48.  
  49. proc check
  50. start3:
  51.         invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
  52.         mov    [hSnapshot], eax
  53.         invoke Process32First,eax,prcs
  54.         mov edi,[memhandle2]
  55.  
  56. loop1:
  57.       stdcall message
  58.         mov eax,[edi]
  59.         cmp dword [prcs.szExeFile],eax
  60.         jnz kill2
  61.         add edi,4
  62. next:
  63.         invoke Process32Next,[hSnapshot],prcs
  64.         cmp    eax,0
  65.         jne    loop1
  66.         jmp start3
  67. kill2:
  68. stdcall kill1
  69. jmp next
  70. ret
  71. endp
  72.  
  73. proc message
  74. invoke GetMessage,msg,0,0,0
  75. test eax,eax
  76. jz exit
  77. invoke TranslateMessage,msg
  78. invoke DispatchMessage,msg
  79. exit:
  80. ret
  81. endp
  82.  
  83. proc pause1
  84. invoke MessageBoxA,0,0,0,0
  85. invoke ExitProcess,0
  86. ret
  87. endp
  88.  
  89. proc WindowsProc,hwnd,uint,wparam,lparam
  90. mov eax,[uint]
  91. cmp eax,0x312
  92. jne exit3
  93. mov eax,[wparam]
  94. cmp eax,1
  95. jne exit3
  96. invoke GetMessage,msg,0,0,0
  97. cmp dword [msg+8],2
  98. jne exit3
  99. stdcall pause1
  100. exit3:
  101. ret
  102. endp
  103.  
  104. start:
  105.  
  106. invoke GetModuleHandleA,0
  107. mov [wnd.hInstance],eax
  108. invoke RegisterClass,wnd
  109. invoke CreateWindowEx,0,class,menu1,WS_DISABLED,1,1,0,0,0,0,[wnd.hInstance],0
  110. mov [hwnd1],eax
  111. invoke  ShowWindow,eax,SW_HIDE
  112. invoke RegisterHotKey,[hwnd1],1,0x0004,0x41
  113. invoke RegisterHotKey,[hwnd1],2,0x0004,0x4c
  114. stdcall init
  115. stdcall check
  116. ret
  117.  
  118. section '.data' data readable writeable
  119. hwnd1 dd ?
  120. menu1 db 'fasm window',0
  121. class db 'fasm class',0
  122. wnd WNDCLASS 0,WindowsProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,menu1,class
  123. msg MSG
  124. count dd 0
  125. memhandle2 dd ?
  126.  
  127. TOKEN_QUERY_TOKEN_ADJUST_PRIVILEGES =28h
  128. TH32CS_SNAPPROCESS = 2
  129.  
  130. struct PROCESSENTRY32
  131.         dwSize dd ?
  132.         cntUsage dd ?
  133.         th32ProcessID dd ?
  134.         th32DefaultHeapID dd ?
  135.         th32ModuleID dd ?
  136.         cntThreads dd ?
  137.         th32ParentProcessID dd ?
  138.         pcPriClassBase dd ?
  139.         dwFlags dd ?
  140.         szExeFile db 260 dup(?)
  141. ends
  142.  
  143. PrivilegeCount dd 1
  144. pLocalId       dd ?
  145. Attributes     dd 2
  146. phToken        dd ?
  147. hSnapshot      dd ?
  148. prcs           PROCESSENTRY32
  149. process1       db 'taskmgr.exe',0
  150. Privilege      db 'SeDebugPrivilege',0
  151.  
  152.  
  153.  
  154. ;=============================================
  155. section '.idata' import data readable
  156. ;=============================================
  157.  
  158. library         kernel32,'KERNEL32.DLL',\
  159.                 advapi32,'ADVAPI32.DLL',\
  160.                 shell32,'SHELL32.DLL',\
  161.                 user32,'USER32.DLL'
  162.  
  163. include 'API\kernel32.inc'
  164. include 'API\advapi32.inc'
  165. include 'API\shell32.inc'
  166. include 'API\user32.inc'




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 27 сентября 2013 00:11 · Поправил: dosprog
· Личное сообщение · #26

Мне проще это сделать в MASM'e: acda_27.09.2013_EXELAB.rU.tgz - транслировалось MASM'ом.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 27 сентября 2013 03:12 · Поправил: dosprog
· Личное сообщение · #27

Envy12,
вы невнимательны...
вот она ваша программка: f45a_27.09.2013_EXELAB.rU.tgz - транслировалось FASM'ом.
Переделана WndProc.



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 27 сентября 2013 17:15
· Личное сообщение · #28

Эм, это тоже не работает



Ранг: 25.9 (посетитель), 1thx
Активность: 0.020
Статус: Участник

Создано: 09 октября 2013 20:16
· Личное сообщение · #29

Итак, веселье продолжается Убрал из проги все что связано с окнами, хоткеями и тд, оставил только процедуру остановки и опять же, вне отладчика половина кода из процедуры просто игнорируется и проходит мимо! Уважаемые форумчане, прошу помогите, тут что-то очень странное
Code:
  1. format PE GUI 4.0
  2. include 'win32a.inc'
  3. entry start
  4. section '.text' code readable executable
  5.  
  6. proc init
  7. start1:
  8.         invoke AdjustTokenPrivileges,[phToken],0,PrivilegeCount ,0,0,0
  9.         invoke HeapCreate,0x00040000,400,0x256
  10.         add eax,0x688
  11.         mov [memhandle2],eax
  12.         mov    [prcs.dwSize],sizeof.PROCESSENTRY32
  13.         invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
  14.         mov    [hSnapshot], eax
  15.         invoke Process32First,eax,prcs
  16.        mov edi,[memhandle2]
  17. .loop:
  18.         mov esi,prcs.szExeFile
  19.         movsd
  20.         inc [count]
  21.  
  22. .next:
  23.         invoke Process32Next,[hSnapshot],prcs
  24.         cmp    eax,0
  25.         jne    .loop
  26. ret
  27. endp
  28.  
  29. proc kill1
  30. pushad
  31. mov eax,prcs.szExeFile
  32. mov eax,[eax]
  33. mov ecx,[count]
  34. shl ecx,1
  35. mov edi,[memhandle2]
  36. repne scasd
  37. jz end1
  38.  
  39. invoke OpenProcess,0x1F0FFF,0,[prcs.th32ProcessID]
  40. invoke TerminateProcess,eax,NULL
  41. end1:
  42. popad
  43. ret
  44. endp
  45.  
  46. proc check
  47. start3:
  48.         invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
  49.         mov    [hSnapshot], eax
  50.         invoke Process32First,eax,prcs
  51.         mov edi,[memhandle2]
  52.  
  53. loop1:
  54.         invoke Sleep,500
  55.         mov eax,[edi]
  56.         cmp dword [prcs.szExeFile],eax
  57.         jnz kill2
  58.         add edi,4
  59. next:
  60.         invoke Process32Next,[hSnapshot],prcs
  61.         cmp    eax,0
  62.         jne    loop1
  63.         jmp start3
  64. kill2:
  65. stdcall kill1
  66. jmp next
  67. ret
  68. endp
  69.  
  70. proc pause1
  71. invoke MessageBoxA,0,caption,0,0
  72. invoke Sleep,3600000
  73. jmp start3
  74. endp
  75.  
  76. start:
  77. stdcall init
  78. stdcall check
  79. stdcall pause1
  80. ret
  81.  
  82. section '.data' data readable writeable
  83. caption db 'Пауза',0
  84. waitc db 5
  85. msg MSG
  86. count dd 0
  87. memhandle2 dd ?
  88. PID dd ?
  89.  
  90. TOKEN_QUERY_TOKEN_ADJUST_PRIVILEGES =28h
  91. TH32CS_SNAPPROCESS = 2
  92.  
  93. struct PROCESSENTRY32
  94.         dwSize dd ?
  95.         cntUsage dd ?
  96.         th32ProcessID dd ?
  97.         th32DefaultHeapID dd ?
  98.         th32ModuleID dd ?
  99.         cntThreads dd ?
  100.         th32ParentProcessID dd ?
  101.         pcPriClassBase dd ?
  102.         dwFlags dd ?
  103.         szExeFile db 260 dup(?)
  104. ends
  105.  
  106. PrivilegeCount dd 1
  107. pLocalId       dd ?
  108. Attributes     dd 2
  109. phToken        dd ?
  110. hSnapshot      dd ?
  111. prcs           PROCESSENTRY32
  112. class          WNDCLASS
  113. Privilege      db 'SeDebugPrivilege',0
  114.  
  115.  
  116.  
  117. ;=============================================
  118. section '.idata' import data readable
  119. ;=============================================
  120.  
  121. library         kernel32,'KERNEL32.DLL',\
  122.                 advapi32,'ADVAPI32.DLL',\
  123.                 shell32,'SHELL32.DLL',\
  124.                 user32,'USER32.DLL'
  125.  
  126. include 'API\kernel32.inc'
  127. include 'API\advapi32.inc'
  128. include 'API\shell32.inc'
  129. include 'API\user32.inc'





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 09 октября 2013 21:12
· Личное сообщение · #30

Какой процедуры половина проходит мимо? С чего ты это взял? Гадаю, что это потому, что нет у процесса дебажных привилегий, а под отладчиком есть.


. 1 . 2 . 3 . 4 . >>
 [email protected] —› Программирование —› Программа работает только внутри отладчика
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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