Вниз  Ассемблер
- 16.05.2010 / 16:59copy  #10285
miha
  Пользователь

miha 
Сейчас: Offline
Нашёл на хабрахабре интересную статейку о написании плагина для Winamp'a на ассемблере. Компилятор: masm32.

Cсылка

У меня получилось откомпилировать только первую часть. Работало только сообщение при инициализации плагина и о его выгрузке.

Изменено miha (16.05 / 17:00) (всего 1 раз)


Прикрепленные файлы:
gen_test_winamp.zip (4.69 кб.) Скачано 96 раз
- 16.05.2010 / 22:10copy  #10318
miha
  Пользователь

miha 
Сейчас: Offline
Вот исходничек простенькой программы-прикола. Бинарник выложу в теме Ваши программы и игры

  1. .data
  2. first db 'Shell_TrayWnd', 0
  3. .code
  4. start:
  5.  
  6.  
  7. mov ebx, 1
  8.  
  9. .while (ebx < 20)
  10.  
  11. invoke FindWindow, addr first, 0
  12.     invoke ShowWindow,eax,SW_SHOW
  13. invoke Sleep, 200
  14. invoke FindWindow, addr first, 0
  15.     invoke ShowWindow,eax,SW_HIDE
  16. invoke Sleep, 200
  17. inc ebx
  18. .endw
  19.  
  20. invoke FindWindow, addr first, 0
  21.     invoke ShowWindow,eax,SW_SHOW
  22.  
  23. invoke ExitProcess, 0
  24. end start


Изменено vladgba (25.11 / 14:38) (всего 1 раз)
- 16.05.2010 / 22:23copy  #10320
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
miha, Панель задач прячет и показывает? Или окна сворчивает и разворачивает?
__________________
 let live
- 16.05.2010 / 22:25copy  #10321
miha
  Пользователь

miha 
Сейчас: Offline
aNNiMON, панель задач. Моргнёт 19 раз и перестанет.

Изменено miha (16.05 / 22:28) (всего 1 раз)
- 16.05.2010 / 22:27copy  #10323
miha
  Пользователь

miha 
Сейчас: Offline
Хотел в цикле использовать eax, но там хранится дескриптор окна
- 23.05.2010 / 23:07copy  #10846
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
  1. format PE GUI 4.0
  2. entry WinMain
  3.  
  4. include '%fasminc%\win32a.inc'
  5. include '%fasminc%\equates\kernel32.inc'
  6. include '%fasminc%\equates\gdi32.inc'
  7. include '%fasminc%\equates\user32.inc'
  8. include '%fasminc%\equates\comctl32.inc'
  9.  
  10. section '.code' code readable executable
  11.  
  12. proc WinMain
  13.      local swid: DWORD, shgt: DWORD, dwid: DWORD, hDC: DWORD, cDC: DWORD, hScr: DWORD, hBmp: DWORD,\
  14.        hOld: DWORD
  15.  
  16.      mov     [hScr], 0
  17.      invoke  GetDC, [hScr]
  18.      mov     [hDC], eax
  19.      invoke  GetSystemMetrics, SM_CXSCREEN  ; получаем ширину
  20.      mov     [swid], eax
  21.      add     eax, eax  
  22.      mov     [dwid], eax  
  23.      invoke  GetSystemMetrics, SM_CYSCREEN  ;; получаем высоту
  24.      mov     [shgt], eax
  25.      invoke  CreateCompatibleBitmap, [hDC], [dwid], [shgt]
  26.      mov     [hBmp], eax
  27.      invoke  CreateCompatibleDC, [hDC]
  28.      mov     [cDC], eax
  29.      invoke  SelectObject, [cDC], [hBmp]
  30.      mov     [hOld], eax
  31.  
  32.      invoke  BitBlt, [cDC], 0, 0, [swid], [shgt], [hDC], 0, 0, SRCCOPY
  33.      invoke  BitBlt, [cDC], [swid], 0, [swid], [shgt], [hDC], 0, 0, SRCCOPY
  34.  
  35.      push    esi
  36.      mov     esi, [swid]
  37.      .repeat
  38.          invoke  BitBlt, [hDC], 0, 0, [swid], [shgt], [cDC], esi, 0, SRCCOPY
  39.          sub     esi, 1
  40.      .until  signed esi < 0
  41.      pop     esi
  42.  
  43.      invoke  SendMessage, 0, WM_PAINT, [hDC], 0
  44.  
  45.      invoke  DeleteObject, [hBmp]
  46.      invoke  SelectObject, [cDC], [hOld]
  47.      invoke  DeleteDC, [cDC]
  48.      invoke  ReleaseDC, [hScr], [hDC]
  49.      invoke  ExitProcess, 0
  50.      return
  51. endp
  52.  
  53. section '.idata' import data readable writeable
  54.  
  55.   library kernel32,'KERNEL32.DLL',\
  56.       user32,'USER32.DLL',\
  57.       gdi32,'GDI32.DLL',\
  58.       comctl32,'COMCTL32.DLL'
  59.  
  60.   include '%fasminc%\apia\kernel32.inc'
  61.   include '%fasminc%\apia\gdi32.inc'
  62.   include '%fasminc%\apia\user32.inc'
  63.   include '%fasminc%\apia\comctl32.inc'

__________________
 let live

Изменено aNNiMON (9.10 / 21:43) (всего 2 раза)
- 23.05.2010 / 23:13copy  #10849
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
  1. format PE GUI 4.0
  2. entry WinMain
  3. include '%fasminc%\win32a.inc'
  4. include '%fasminc%\equates\kernel32.inc'
  5. include '%fasminc%\equates\gdi32.inc'
  6. include '%fasminc%\equates\user32.inc'
  7. NUM = 300
  8. section '.data' data readable writeable
  9.   szAppName  db "GrafMenu",0
  10.   align 4
  11.   hwnd  dd 0
  12. section '.bss' data readable writeable
  13.   iKeep dd NUM*sizeof.RECT dup(?)
  14. section '.code' code readable executable
  15. proc WinMain hInstance, hPrevInstance, szCmdLine, iCmdShow
  16.      local msg:MSG, wndclass:WNDCLASSA, hdcScr:DWORD, hdcMem:DWORD, cxx:DWORD, cy:DWORD,\
  17.        hBitmap:DWORD, i:DWORD, j:DWORD, x1:DWORD, y1:DWORD, x2:DWORD, y2:DWORD, paddr:DWORD
  18.      cinvoke memset, iKeep, 0, NUM*sizeof.RECT
  19.      cinvoke memset, addr wndclass, 0, sizeof.WNDCLASSA
  20.      invoke  GetDesktopWindow
  21.      mov     [hwnd], eax
  22.      invoke  LockWindowUpdate, eax
  23.      .if     eax <> NULL
  24.          invoke  GetDCEx, [hwnd], NULL, DCX_CACHE or DCX_LOCKWINDOWUPDATE
  25.          mov     [hdcScr], eax
  26.          invoke  CreateCompatibleDC, [hdcScr]
  27.          mov     [hdcMem], eax
  28.          invoke  GetSystemMetrics, SM_CXSCREEN
  29.          mov     ecx, 10
  30.          mov     edx, 0
  31.          div     ecx
  32.          mov     [cxx], eax
  33.          invoke  GetSystemMetrics, SM_CYSCREEN
  34.          mov     ecx, 10
  35.          mov     edx, 0
  36.          div     ecx
  37.          mov     [cy], eax
  38.          invoke  CreateCompatibleBitmap, [hdcScr], [cxx], [cy]
  39.          mov     [hBitmap], eax
  40.          invoke  SelectObject, [hdcMem], [hBitmap]
  41.          invoke  GetTickCount
  42.          cinvoke srand, eax
  43.          mov     [i], 0 ; i < 2   ; i++
  44.          .repeat
  45.              mov     [j], 0 ; j < NUM ; j++
  46.              .repeat
  47.                  .if     [i] = 0
  48.                      mov     eax, sizeof.RECT
  49.                      mul     [j]
  50.                      add     eax, iKeep
  51.                      mov     [paddr], eax
  52.                      cinvoke  rand
  53.                      mov      ecx, 10
  54.                      mov      edx, 0
  55.                      div      ecx
  56.                      mov      eax, edx
  57.                      mul     [cxx]
  58.                      mov     ecx, [paddr]
  59.                      mov     [ecx], eax
  60.                      mov     [x1], eax
  61.                      cinvoke  rand
  62.                      mov      ecx, 10
  63.                      mov      edx, 0
  64.                      div      ecx
  65.                      mov      eax, edx
  66.                      mul     [cy]
  67.                      mov     ecx, [paddr]
  68.                      mov     [ecx + 4], eax
  69.                      mov     [y1], eax
  70.                      cinvoke  rand
  71.                      mov      ecx, 10
  72.                      mov      edx, 0
  73.                      div      ecx
  74.                      mov      eax, edx
  75.                      mul     [cxx]
  76.                      mov     ecx, [paddr]
  77.                      mov     [ecx + 8], eax
  78.                      mov     [x2], eax
  79.                      cinvoke  rand
  80.                      mov      ecx, 10
  81.                      mov      edx, 0
  82.                      div      ecx
  83.                      mov      eax, edx
  84.                      mul     [cy]
  85.                      mov     ecx, [paddr]
  86.                      mov     [ecx + 12], eax
  87.                      mov     [y2], eax
  88.                  .else
  89.                      ;iKeep [NUM - 1 - j] [0]
  90.                      mov     ecx, sizeof.RECT
  91.                      mov     eax, NUM - 1
  92.                      sub     eax, [j]
  93.                      mul     ecx
  94.                      add     eax, iKeep
  95.                      mov     ecx, eax
  96.                      mov     eax, [ecx]
  97.                      mov     [x1], eax
  98.                      mov     eax, [ecx + 4]
  99.                      mov     [y1], eax
  100.                      mov     eax, [ecx + 8]
  101.                      mov     [x2], eax
  102.                      mov     eax, [ecx + 12]
  103.                      mov     [y2], eax
  104.                  .endif
  105.                  invoke  BitBlt, [hdcMem],  0,  0, [cxx], [cy], [hdcScr], [x1],\
  106.                      [y1], SRCCOPY
  107.                  invoke  BitBlt, [hdcScr], [x1], [y1], [cxx], [cy], [hdcScr], [x2],\
  108.                      [y2], SRCCOPY
  109.                  invoke  BitBlt, [hdcScr], [x2], [y2], [cxx], [cy], [hdcMem], 0, 0,\
  110.                      SRCCOPY
  111.                  invoke  Sleep, 10
  112.                  add     [j], 1
  113.              .until  [j] >= NUM
  114.              add     [i], 1
  115.          .until  [i] >= 2
  116.          invoke  DeleteDC, [hdcMem]
  117.          invoke  ReleaseDC, [hwnd], [hdcScr]
  118.          invoke  DeleteObject, [hBitmap]
  119.          invoke  LockWindowUpdate, NULL
  120.      .endif
  121.      return FALSE
  122. endp
  123.  
  124. section '.idata' import data readable writeable
  125.   library kernel32,'KERNEL32.DLL',\
  126.       user32,'USER32.DLL',\
  127.       gdi32,'GDI32.DLL',\
  128.       crtdll, 'crtdll.dll'
  129.   include '%fasminc%/apia/kernel32.inc'
  130.   include '%fasminc%/apia/user32.inc'
  131.   include '%fasminc%/apia/gdi32.inc'
  132.   include '%fasminc%/apia/crtdll.inc'

__________________
 let live


Прикрепленные файлы:
scrcopyrect.exe (3.5 кб.) Скачано 448 раз
- 23.05.2010 / 23:24copy  #10858
miha
  Пользователь

miha 
Сейчас: Offline
Первый бинарник не качал, но по коду боян)
- 24.05.2010 / 14:06copy  #10917
miha
  Пользователь

miha 
Сейчас: Offline
А вторая прожка веселее)
- 30.05.2010 / 13:33copy  #11222
miha
  Пользователь

miha 
Сейчас: Offline
  1. invoke BlockInput, 1
- блокировать ввод с клавиатуры и действия мыши;
  1. invoke BlockInput, 0
- разблокировать
Наверх  Всего сообщений: 208
Фильтровать сообщения
Поиск по теме
Файлы топика (15)
Поиск по форуму