Сказки дядюшки Римуса о x64

Тема в разделе "WASM.ARTICLES", создана пользователем Mikl___, 19 дек 2016.

Метки:
  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792

    Видео-плеер на Component Object Model

    asm-файл
    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. include ole32.inc
    4. includelib ole32.lib
    5. IDC_ICON1      equ 500
    6. ;-------------------------------
    7. CLSCTX_INPROC_SERVER equ  1
    8. WM_GRAPHNOTIFY equ 40Dh
    9. Size_of_buffer equ 100h
    10. MSGBOXPARAMS struct
    11.   cbSize dd ?,?  
    12.   hwndOwner dq ?
    13.   hInstance dq ?
    14.   lpszText dq ?
    15.   lpszCaption dq ?
    16.   dwStyle dd ?,?
    17.   lpszIcon dq ?
    18.   dwContextHelpId dd ?,?
    19.   lpfnMsgBoxCallback dq ?
    20.   dwLanguageId dd ?,?
    21. MSGBOXPARAMS ends
    22. IMediaControlVtbl STRUCT
    23. ;IUnknown methods
    24. QueryInterface QWORD ?
    25. AddRef QWORD ?
    26. Release QWORD ?
    27. ;IMediaControl methods
    28. GetTypeInfoCount QWORD ?
    29. GetTypeInfo QWORD ?
    30. GetIDsOfNames QWORD ?
    31. Invoke_ QWORD ?
    32. Run QWORD ?
    33. Pause_ QWORD ?
    34. Stop QWORD ?
    35. GetState QWORD ?
    36. RenderFile QWORD ?
    37.     AddSourceFilter QWORD ?
    38.     get_FilterCollection QWORD ?
    39.     get_RegFilterCollection QWORD ?
    40.     StopWhenReady QWORD ?
    41. IMediaControlVtbl ENDS
    42. ;-------------------------------
    43. ;  IMediaEventEx  virtual method table
    44. ;-------------------------------
    45. IMediaEventExVtbl STRUCT
    46. ;IUnknown methods
    47.     QueryInterface QWORD ?
    48.     AddRef QWORD ?
    49.     Release QWORD ?
    50. ;IMediaEventEx methods
    51.     GetTypeInfoCount QWORD ?
    52.     GetTypeInfo QWORD ?
    53.     GetIDsOfNames QWORD ?
    54.     Invoke_ QWORD ?
    55.     GetEventHandle QWORD ?
    56.     GetEvent QWORD ?
    57.     WaitForCompletion QWORD ?
    58.     CancelDefaultHandling QWORD ?
    59.     RestoreDefaultHandling QWORD ?
    60.     FreeEventParams QWORD ?
    61.     SetNotifyWindow QWORD ?
    62.     SetNotifyFlags QWORD ?
    63.     GetNotifyFlags QWORD ?
    64.  IMediaEventExVtbl ENDS
    65. ;-------------------------------
    66. ;  IGraphBuilder  virtual method table
    67. ;-------------------------------
    68. IGraphBuilderVtbl STRUCT
    69. ;IUnknown methods
    70. QueryInterface QWORD ?
    71. AddRef QWORD ?
    72. Release QWORD ?
    73. ;IGraphBuilder methods
    74. AddFilter QWORD ?
    75. RemoveFilter QWORD ?
    76. EnumFilters QWORD ?
    77. FindFilterByName QWORD ?
    78. ConnectDirect QWORD ?
    79. Reconnect QWORD ?
    80. Disconnect QWORD ?
    81. SetDefaultSyncSource QWORD ?
    82. Connect QWORD ?
    83. Render QWORD ?
    84. RenderFile QWORD ?
    85. AddSourceFilter QWORD ?
    86. SetLogFile QWORD ?
    87. Abort QWORD ?
    88. ShouldOperationContinue QWORD ?
    89. IGraphBuilderVtbl ENDS
    90. ;-----------------------------------------------------
    91. ;  IVideoWindow  virtual method table
    92. ;------------------------------------------------
    93.  IVideoWindowVtbl STRUCT
    94. ;IUnknown methods
    95.     QueryInterface QWORD ?
    96.     AddRef QWORD ?
    97.     Release QWORD ?
    98. ;IVideoWindow methods
    99.     GetTypeInfoCount       QWORD ?
    100.     GetTypeInfo       QWORD ?
    101.     GetIDsOfNames                QWORD ?
    102.     Invoke_                      QWORD ?
    103.     put_Caption                  QWORD ?
    104.     get_Caption                  QWORD ?
    105.     put_WindowStyle              QWORD ?
    106.     get_WindowStyle              QWORD ?
    107.     put_WindowStyleEx            QWORD ?
    108.     get_WindowStyleEx            QWORD ?
    109.     put_AutoShow                 QWORD ?
    110.     get_AutoShow                 QWORD ?
    111.     put_WindowState              QWORD ?
    112.     get_WindowState              QWORD ?
    113.     put_BackgroundPalette        QWORD ?
    114.     get_BackgroundPalette        QWORD ?
    115.     put_Visible                  QWORD ?
    116.     get_Visible                  QWORD ?
    117.     put_Left                     QWORD ?
    118.     get_Left                     QWORD ?
    119.     put_Width                    QWORD ?
    120.     get_Width                    QWORD ?
    121.     put_Top                      QWORD ?
    122.     get_Top                      QWORD ?
    123.     put_Height                   QWORD ?
    124.     get_Height                   QWORD ?
    125.     put_Owner                    QWORD ?
    126.     get_Owner                    QWORD ?
    127.     put_MessageDrain             QWORD ?
    128.     get_MessageDrain             QWORD ?
    129.     get_BorderColor              QWORD ?
    130.     put_BorderColor QWORD ?
    131.     get_FullScreenMode QWORD ?
    132.     put_FullScreenMode QWORD ?
    133.     SetWindowForeground QWORD ?
    134.     NotifyOwnerMessage QWORD ?
    135.     SetWindowPosition QWORD ?
    136.     GetWindowPosition QWORD ?
    137.     GetMinIdealImageSize QWORD ?
    138.     GetMaxIdealImageSize QWORD ?
    139.     GetRestorePosition QWORD ?
    140.     HideCursor QWORD ?
    141.     IsCursorHidden QWORD ?
    142. IVideoWindowVtbl ENDS
    143. .code
    144. WinMain proc
    145. local bufferANSI[Size_of_buffer]:BYTE
    146. local bufferUNICODE[Size_of_buffer*2]:BYTE
    147. local pGraph:QWORD
    148. local pControl:QWORD
    149. local pEvent:QWORD
    150. local pWindow:QWORD
    151. local ofn:OPENFILENAME
    152. ;AVIOpenFile-------------------------------------------------
    153. ;fill OPENFILENAME
    154.        invoke RtlZeroMemory,&ofn,sizeof ofn
    155.         mov ofn.lStructSize,sizeof ofn
    156.         lea eax,bufferANSI
    157.         mov ofn.lpstrFile,rax
    158.         mov ofn.nMaxFile,Size_of_buffer;nMaxFile
    159.         mov eax,offset Filter
    160.         mov ofn.lpstrFilter,rax;lpstrFilter
    161.         mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or \
    162. OFN_EXPLORER or OFN_HIDEREADONLY;Flags & nFileOffset & nFileExtension
    163. ;----------------------------------------------------
    164.        invoke GetOpenFileName,&ofn;адрес OPENFILENAME
    165.        test eax,eax
    166.        jz Exit ; user clicks "Cancel"
    167.        inc count
    168.        mov qword ptr [rsp+28h],Size_of_buffer*2
    169.        lea eax,bufferUNICODE
    170.        mov [rsp+20h],rax
    171.        invoke MultiByteToWideChar,0,0,&bufferANSI,-1
    172. ;AVIInit -----------------------------------------
    173.        invoke CoInitialize,0
    174. ;// instantiate a filter graph as in-proc server
    175. ;hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,IID_IMediaControl, (void **)&pMC);
    176.        lea eax,pGraph
    177.        mov [rsp+20h],rax
    178.        invoke CoCreateInstance,&CLSID_FilterGraph,0, CLSCTX_INPROC_SERVER, &ID_IGraphBuilder
    179.        test eax,eax
    180.        jnz Exit ;Unable to create GraphBuilder
    181.        inc count
    182. ;// we'll use this interface to build the graph
    183. ;hr = pMC->QueryInterface(IID_IGraphBuilder, (void **)&pGB);
    184.        lea r8d,pControl
    185.         mov edx,offset ID_IMediaControl
    186.         mov rcx,pGraph
    187.         mov eax,[rcx]
    188.         call [rax].IMediaControlVtbl.QueryInterface;pMC->QueryInterface(IID_IMediaEventEx, (void **)&pME);
    189.        test eax,eax
    190.        jnz Exit ;Unable to get interface IMediaControl
    191.        inc count
    192. ;// we'll want to wait for completion of the rendering, so we need a
    193. ;// media event interface
    194. ;hr = pMC->QueryInterface(IID_IMediaEventEx, (void **)&pME);
    195.        lea r8d,pEvent
    196.         mov edx,offset ID_IMediaEventEx
    197.         mov rcx,pGraph
    198.         mov eax,[rcx]
    199.         call [rax].IMediaEventExVtbl.QueryInterface
    200.        test eax,eax
    201.        jnz Exit ;Unable to get interface IMediaEventEx
    202.        inc count
    203. ;// now we're ready to build the filter graph based on the source file
    204. ;// data types
    205. ;hr = pGB->RenderFile(lpszMovie, NULL);
    206.         lea r8d,pWindow
    207.        mov edx,offset ID_IVideoWindow
    208.        mov rcx,pGraph
    209.        mov eax,[rcx]
    210.        call [rax].IVideoWindowVtbl.QueryInterface;pMC->QueryInterface(IID_IVideoWindow, (void**)&pVW);
    211. ;AVIRenderFile----------------------------------------------
    212.        xor r8d,r8d
    213.        lea rdx,bufferUNICODE
    214.        mov rcx,pGraph
    215.        mov eax,[rcx]
    216.        call [rax].IGraphBuilderVtbl.RenderFile;pGB->RenderFile(FileNameW, NULL);
    217.         test eax,eax
    218.        jnz Exit ;We can not open file
    219.        inc count
    220. ;AVIPlay-----------------------------------
    221. ;// play  the source file
    222. ;hr = pMC->Run();
    223.        mov rcx,pControl
    224.         mov eax,[rcx]
    225.         call [rax].IMediaControlVtbl.Run ;pMC->Run()
    226. ;------------------------------------------
    227. ;// block application until video rendering operations finish
    228. ;hr = pME->WaitForCompletion(INFINITE, &evCode);
    229.        lea r8d,pWindow
    230.        mov edx,INFINITE
    231.         mov rcx,pEvent
    232.         mov eax,[rcx]
    233.         call [rax].IMediaEventExVtbl.WaitForCompletion
    234. ;AVIClose------------------------------------------
    235.        mov rcx,pControl
    236.        mov eax,[rcx]
    237.        call [rax].IMediaControlVtbl.Release
    238.        mov rcx,pEvent
    239.        mov eax,[rcx]
    240.        call [rax].IMediaEventExVtbl.Release
    241.        mov rcx,pGraph
    242.        mov eax,[rcx]
    243.        call [rax].IGraphBuilderVtbl.Release
    244.        invoke CoUninitialize
    245. ;---------------------------------------
    246. Exit: xor r9d,r9d
    247.        xor r8d,r8d
    248.        mov eax,count
    249.        mov rdx,[hande+rax*8]
    250.        mov mb.lpszText,rdx
    251.        invoke MessageBoxIndirectA,&mb
    252.         invoke RtlExitUserProcess,NULL
    253. WinMain endp
    254. ;---------------------------------------
    255. .data
    256. CLSID_FilterGraph GUID  <0E436EBB3h,524Fh,11CEh,{09Fh,053h,0,020h,0AFh,0Bh,0A7h,70h}>
    257. ;db "NB10"; dd 3031424Eh
    258. ID_IGraphBuilder  GUID  <56A868A9h,0AD4h,11CEh,{0B0h,03Ah,0,20h,0AFh,0Bh,0A7h,70h}>;56A868A9h, 11CE0AD4h, 20003AB0h, 70A70BAFh
    259. ID_IMediaControl  GUID  <56A868B1h,0AD4h,11CEh,{0B0h,03Ah,0,20h,0AFh,0Bh,0A7h,70h}>;56A868B1h, 11CE0AD4h, 20003AB0h, 70A70BAFh
    260. ID_IMediaEventEx  GUID  <56A868B6h,0AD4h,11CEh,{0B0h,03Ah,0,20h,0AFh,0Bh,0A7h,70h}>;56A868C0h, 11CE0AD4h, 20003AB0h, 70A70BAFh
    261. ID_IVideoWindow   GUID  <56A868B4h,0AD4h,11CEh,{0B0h,03Ah,0,20h,0AFh,0Bh,0A7h,70h}>
    262. Filter db "All files (*.*)",0,"*.*",0
    263.                 db "Avi files (*.avi)",0,"*.avi",0
    264.                 db "Wmv files (*.wmv)",0,"*.wmv",0
    265.                 db "Mp4 files (*.mp4)",0,"*.mp4",0,0
    266. szAVIOpenError db "Unable to open the video file",0
    267. szGoodbye db "Bye-bye!",0
    268. mb label   MSGBOXPARAMS
    269.                 dd sizeof MSGBOXPARAMS,?;cbSize  
    270.                 dq 0  ;hwndOwner
    271.                 dq IMAGE_BASE  ;hInstance  
    272.                dq ? ;lpszText    
    273.                dq 0  ;lpszCaption
    274.                dd MB_OK or MB_USERICON,?;dwStyle
    275.                dq IDC_ICON1  ;lpszIcon
    276.                dd 0,?;dwContextHelpId
    277.                dq 0  ;lpfnMsgBoxCallback
    278.                dd 0,?;dwLanguageId
    279. hande dq str1,str2,str3,str4,szAVIOpenError,szGoodbye
    280. str1 db "Do not select any media files!",0
    281. str2 db "Unable to create GraphBuilder",0
    282. str3 db "Unable to get interface IMediaControl",0
    283. str4 db 'Unable to get interface IMEdiaEvent',0
    284. count dd 0
    285. end
    rc-файл
    Код (C++):
    1. #define IDC_ICON1 500
    2. IDC_ICON1 ICON "br_Fox1.ico"
     

    Вложения:

    • 00.jpg
      00.jpg
      Размер файла:
      55,7 КБ
      Просмотров:
      555
    Win32Api нравится это.
  2. Win32Api

    Win32Api Member

    Публикаций:
    0
    Регистрация:
    16 окт 2022
    Сообщения:
    109
    Прямого примера проигрывания mp4-файлов лично у меня нет,
    но возможно это поможет уменьшить пространство поиска
    --- Сообщение объединено, 10 дек 2023 ---
    Отмеренное тебе время так коротко, что, потеряв секунду, ты уже теряешь всю жизнь, ибо она не длиннее, она всегда длится лишь столько же, сколько то время, которое ты теряешь. Значит, если ты начал путь, то продолжай его, при всех обстоятельствах ты можешь только выиграть, ты ничем не рискуешь, может быть, ты в конце концов сломаешь себе шею, но если бы ты уже после первых шагов повернулся и побежал вниз по лестнице, ты, может быть, сломал бы себе шею уже в самом начале, и не «может быть», а несомненно. Значит, если ты ничего не найдёшь здесь, в коридорах, открывай двери, если ничего не найдёшь за этими дверями, то ведь есть новые этажи, если ничего не найдёшь наверху, лети выше по новым лестницам. Пока ты не перестанешь подниматься, ступеньки не прекратятся, они будут расти ввысь под твоими поднимающимися ногам. Франц Кафка
     

    Вложения:

    Последнее редактирование: 10 дек 2023
    Mikl___ и TrashGen нравится это.
  3. Win32Api

    Win32Api Member

    Публикаций:
    0
    Регистрация:
    16 окт 2022
    Сообщения:
    109
    На каком языке программирования надо проигрыватель? Только асм?
    --- Сообщение объединено, 11 дек 2023 ---
    Проигрыватель из исходников windows xp
     

    Вложения:

    • mplayer2.rar
      Размер файла:
      297 КБ
      Просмотров:
      142
    Mikl___ нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792

    Глава двадцать восьмая (часть вторая).
    Братец Кролик продолжает выводить картинки на экран

    Еще несколько способов вывести изображение на экран. Скачайте папку с картинками и asm/rc/exe-файлы и курсор

    LoadImage + CreateCompatibleDC + StretchBlt

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. IMG_X        equ 516
    4. IMG_Y        equ 320
    5. .code
    6. WinMain proc
    7. local msg:MSG
    8.  
    9.     xor    ebx,ebx
    10.     mov    esi,IMAGE_BASE
    11.     mov    edi,offset ClassName
    12.     mov    ecx,offset FileName
    13.     invoke    LoadCursorFromFileA
    14.     push    rax ;hIconSm
    15.     push    rdi ;lpszClassName
    16.     push    rbx ;lpszMenuName
    17.     push    COLOR_WINDOW;hbrBackground
    18.     push    rax ;hCursor
    19.     push    rax ;hIcon
    20.     push    rsi ;hInstance
    21.     push    rbx ;cbClsExtra & cbWndExtra
    22.     pushaddr WndProc      ;lpfnWndProc
    23.     push    sizeof WNDCLASSEX;cbSize & style
    24.     invoke    RegisterClassExA,esp ;addr WNDCLASSEX
    25.     push    rbx
    26.     push    rsi    ;rsi=400000h
    27.     shl        esi,9    ;rsi=CW_USEDEFAULT
    28.     push    rbx
    29.     push    rbx
    30.     push    IMG_Y+20
    31.     push    IMG_X
    32.     push    rsi
    33.     push    rsi
    34.     sub       esp,20h
    35.     invoke CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    36.     lea        edi,msg
    37. @@:invoke    GetMessageA,edi,0,0,0
    38.     invoke    DispatchMessageA,edi
    39.     jmp    @b
    40. WinMain endp
    41. ;---------------------------------------------------------------
    42. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    43. local    hDC:HDC
    44. local    ps:PAINTSTRUCT
    45. local    rect:RECT
    46.  
    47.     mov    hWnd,rcx
    48.     cmp    edx,WM_DESTROY
    49.     je    wmDESTROY
    50.     cmp    edx,WM_CREATE
    51.     je    wmCREATE
    52.     cmp    edx,WM_PAINT
    53.     je    wmPAINT
    54.     cmp    edx,WM_SIZE
    55.     je    wmSIZE
    56.     leave
    57.     jmp    NtdllDefWindowProc_
    58. wmDESTROY:invoke DeleteObject,hBitmap
    59.     invoke    DeleteDC,hMemDC
    60.     invoke    RtlExitUserProcess,NULL
    61. wmCREATE:mov    edx,offset a19
    62.     invoke    LoadImageA,0,,IMAGE_BITMAP,0,0,LR_LOADFROMFILE
    63.     mov    hBitmap,rax
    64.     invoke    GetDC,hWnd
    65.     mov    hDC,rax
    66.     invoke    CreateCompatibleDC,eax
    67.     mov    hMemDC,rax
    68.     invoke    SelectObject,eax,hBitmap
    69.     invoke    ReleaseDC,hWnd,hDC
    70.     jmp    wmBYE
    71. wmSIZE:    lea    edx,rect
    72.     invoke    GetClientRect
    73.     lea    edx,rect
    74.     invoke    InvalidateRect,hWnd,,TRUE
    75.     jmp    wmBYE
    76. wmPAINT:lea    edx,ps
    77.     invoke    BeginPaint
    78.     mov    hDC,rax
    79.     lea    edx,rect
    80.     invoke    GetClientRect,hWnd
    81.     invoke    StretchBlt,hDC,0,0,rect.right,\
    82.     rect.bottom,hMemDC,0,0,IMG_X,IMG_Y,SRCCOPY
    83.     lea    edx,ps
    84.     invoke    EndPaint,hWnd
    85. wmBYE:  leave
    86.     retn
    87. WndProc endp
    88. ;---------------------------------------
    89. .data
    90. ClassName   db 'StretchBlt',0
    91. FileName     db "br_Rabbit3.cur",0
    92. a19                 db "Images\19.bmp",0
    93. hBitmap       dq ?
    94. hMemDC     HDC ?
    95. end

    LoadImage + CreatePatternBrush + PatBlt

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. IMG_X    equ 418
    4. IMG_Y    equ 313
    5. .code
    6. WinMain proc
    7. local msg:MSG
    8.  
    9.     xor    ebx,ebx
    10.     mov    esi,IMAGE_BASE
    11.     mov    edi,offset ClassName
    12.     mov    ecx,offset FileName
    13.     invoke    LoadCursorFromFileA
    14.     push    rax ;hIconSm
    15.     push    rdi ;lpszClassName
    16.     push    rbx ;lpszMenuName
    17.     push    COLOR_WINDOW+1 ;hbrBackground
    18.     push    rax ;hCursor
    19.     push    rax     ;hIcon
    20.     push    rsi ;hInstance
    21.     push    rbx        ;cbClsExtra & cbWndExtra
    22.     pushaddr WndProc ;lpfnWndProc
    23.     push    sizeof WNDCLASSEX;cbSize & style
    24.     invoke    RegisterClassExA,esp ;addr WNDCLASSEX
    25.     push    rbx
    26.     push    rsi ;rsi=400000h
    27.     shl    esi,9 ;rsi=CW_USEDEFAULT
    28.     push    rbx
    29.     push    rbx
    30.     push    IMG_Y+30
    31.     push    IMG_X+15
    32.     push    rsi
    33.     push    rsi
    34.     sub    esp,20h
    35.     invoke    CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or \
    36.         WS_VISIBLE or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX
    37.     lea    edi,msg
    38. @@:     invoke    GetMessageA,edi,0,0,0
    39.     invoke    DispatchMessageA,edi
    40.     jmp @b
    41. WinMain endp
    42. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    43. local    ps:PAINTSTRUCT
    44. local    hDC:HWND
    45. local    hOldBrush:HWND
    46.  
    47.     mov    hWnd,rcx
    48.     cmp    edx,WM_DESTROY
    49.     je    wmDESTROY
    50.     cmp    edx,WM_CREATE
    51.     je    wmCREATE
    52.     cmp    edx,WM_PAINT
    53.     je    wmPAINT
    54.     leave
    55.     jmp    NtdllDefWindowProc_
    56. wmDESTROY:invoke RtlExitUserProcess,NULL
    57. wmCREATE:invoke GetDC
    58.     mov    hDC,rax
    59.     mov    edx,offset BmpName
    60.     invoke    LoadImageA,IMAGE_BASE,,0,0,0,LR_LOADFROMFILE
    61.     invoke    CreatePatternBrush,eax
    62.     mov    hBrush,rax
    63.     invoke    DeleteDC,hDC
    64.     jmp    wmBYE
    65. wmPAINT:lea    edx,ps
    66.     invoke    BeginPaint
    67.     mov    hDC,rax
    68.     invoke    SelectObject,eax,hBrush
    69.     mov    hOldBrush,rax
    70.     invoke    PatBlt,hDC,0,0,IMG_X,IMG_Y,PATCOPY
    71.     invoke    DeleteObject,hOldBrush
    72.     lea    edx,ps
    73.     invoke    EndPaint,hWnd
    74. wmBYE:    leave
    75.     retn
    76. WndProc endp
    77. ;---------------------------------------
    78. .data
    79. ClassName    db 'LoadImage+CreatePatternBrush+PatBlt',0
    80. BmpName        db 'Images\18.bmp',0
    81. FileName    db "br_Rabbit3.cur",0
    82. hBrush        dq ?
    83. end

    GDI+: GdipCreateBitmapFromFile + GdipCreateHBITMAPFromBitmap + SendMessage(STM_SETIMAGE)

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. IMG_X    equ 450
    4. IMG_Y    equ 604
    5. .code
    6. WinMain proc
    7. local msg:MSG
    8.  
    9.     mov    ecx,offset graphics
    10.     mov    edx,offset gdii
    11.     invoke    GdiplusStartup,,,0
    12.  
    13.     xor    ebx,ebx
    14.     mov    esi,IMAGE_BASE
    15.     mov    ecx,offset FileName
    16.     invoke    LoadCursorFromFileA
    17.     mov    edi,offset ClassName
    18.     push    rax    ;hIconSm
    19.     push    rdi    ;lpszClassName
    20.     push    rbx    ;lpszMenuName
    21.     push    COLOR_WINDOW+1;hbrBackground
    22.     push    rax    ;hCursor
    23.     push    rax        ;hIcon
    24.     push    rsi    ;hInstance
    25.     push    rbx        ;cbClsExtra & cbWndExtra
    26.     pushaddr WndProc      ;lpfnWndProc
    27.     push    sizeof WNDCLASSEX;cbSize & style
    28.     invoke    RegisterClassExA,esp    ;addr WNDCLASSEX
    29.     push    rbx    ;lParam
    30.     push    rsi    ;hinstance=rsi=400000h
    31.     shl    esi,9    ;rsi=CW_USEDEFAULT
    32.     push    rbx        ;hMenu
    33.     push    rbx        ;hWmdParent
    34.     push    IMG_Y+20        ;nHeight
    35.     push    IMG_X        ;nWidth
    36.     push    rsi        ;y
    37.     push    rsi        ;x
    38.     sub    esp,20h
    39.     invoke    CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    40.     lea    edi,msg
    41. @@:     invoke    GetMessageA,edi,0,0,0
    42.     invoke    DispatchMessageA,edi
    43.     jmp @b
    44. WinMain endp
    45. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    46. local    pbmp:QWORD
    47. local    hndl:QWORD
    48. local    hImgBox:qword
    49.  
    50.     cmp    edx,WM_CREATE
    51.     je    wmCREATE
    52.     cmp    edx,WM_DESTROY
    53.     je    wmDESTROY
    54. wmDEFAULT:leave
    55.      jmp    NtdllDefWindowProc_
    56. wmDESTROY:invoke GdiplusShutdown,graphics        ; cleanup on exit
    57.     invoke    RtlExitUserProcess,NULL
    58. wmCREATE:push    rbx
    59.     push    IMAGE_BASE
    60.     push    rbx;-1
    61.     push    rcx
    62.     push    rbx
    63.     push    rbx
    64.     push    rbx
    65.     push    rbx
    66.     sub    esp,20h
    67.     mov    edx,offset aStatic
    68.     invoke    CreateWindowExA,WS_EX_LEFT,,0,WS_CHILD or WS_VISIBLE or SS_BITMAP
    69.     mov    hImgBox,rax
    70.     mov    ecx,offset FileJPG
    71.     invoke    GdipCreateBitmapFromFile,,ADDR pbmp         ; create a GDI+ bitmap
    72.     invoke    GdipCreateHBITMAPFromBitmap,pbmp,ADDR hndl,0; create normal bitmap handle from it
    73.     invoke    GdipDisposeImage,pbmp                       ; remove the GDI+ bitmap
    74. ; load disk file as bitmap handle
    75.     invoke    SendMessageA,hImgBox,STM_SETIMAGE,IMAGE_BITMAP,hndl; write image to static control
    76. wmBYE:    leave
    77.     xor    eax,eax
    78.     retn
    79. WndProc endp
    80. .data
    81. gdii        GdiplusStartupInput <1,0,0,0>
    82. graphics    dq ?
    83. aStatic        db "STATIC",0
    84. ClassName    db "GDI+",0
    85. FileName    db "br_Rabbit3.cur",0
    86. FileJPG:    du <Images\26.jpg>
    87. end

    LoadImage + CreatePatternBrush + wc.hbrBackground

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. IMG_X    equ 520
    4. IMG_Y    equ 378
    5. .code
    6. WinMain proc
    7. local msg:MSG
    8. local hIcon:qword
    9.  
    10.     xor    ebx,ebx
    11.     mov    esi,IMAGE_BASE
    12.     mov    edi,offset ClassName
    13.     mov    ecx,offset FileName
    14.     invoke    LoadCursorFromFileA
    15.     mov    hIcon,rax
    16.     mov    edx,offset BmpName
    17.     invoke    LoadImageA,esi,,0,0,0,LR_LOADFROMFILE
    18.     invoke    CreatePatternBrush,eax
    19.     push    hIcon ;hIconSm
    20.     push    rdi ;lpszClassName
    21.     push    rbx ;lpszMenuName
    22.     push    rax ;hbrBackground
    23.     push    hIcon ;hCursor
    24.     push    hIcon     ;hIcon
    25.     push    rsi ;hInstance
    26.     push    rbx        ;cbClsExtra & cbWndExtra
    27.     pushaddr WndProc ;lpfnWndProc
    28.     push    sizeof WNDCLASSEX;cbSize & style
    29.     invoke    RegisterClassExA,esp ;addr WNDCLASSEX
    30.     push    rbx    ;lParam
    31.     push    rsi    ;hinstance=rsi=400000h
    32.     shl    esi,9    ;rsi=CW_USEDEFAULT
    33.     push    rbx        ;hMenu
    34.     push    rbx        ;hWmdParent
    35.     push    IMG_Y+20   ;nHeight
    36.     push    IMG_X   ;nWidth
    37.     push    rsi        ;y
    38.     push    rsi        ;x
    39.     sub    esp,20h
    40.     invoke    CreateWindowExA,0,edi,edi,WS_OVERLAPPED or \
    41.         WS_VISIBLE or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX
    42.     lea    edi,msg
    43. @@:invoke    GetMessageA,edi,0,0,0
    44.     invoke    DispatchMessageA,edi
    45.     jmp    @b
    46. WinMain endp
    47. WndProc:cmp    edx,WM_DESTROY
    48.     je    wmDESTROY
    49.     jmp    NtdllDefWindowProc_
    50. wmDESTROY:invoke RtlExitUserProcess,NULL
    51. ;---------------------------------------
    52. .data
    53. BmpName        db 'Images\12.bmp',0
    54. ClassName    db 'LoadImageA+CreatePatternBrush+wc.hbrBackground',0
    55. FileName    db "br_Rabbit3.cur",0
    56. end

    OLE

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. IDB_MYBITMAP    = 105
    4. IDC_DIALOG    = 200
    5. HIMETRIC_PER_INCH = 2540
    6. IMG_X        = 932*2/3;960
    7. IMG_Y        = 1341*2/3;540
    8. ID_IMG        equ 100
    9. .code
    10. WinMain proc
    11. local    msg:MSG
    12.  
    13.     xor    ebx,ebx
    14.     mov    esi,IMAGE_BASE
    15.     mov    ecx,offset FileName
    16.     invoke    LoadCursorFromFileA
    17.     mov    edi,offset ClassName
    18.     push    rax    ;hIconSm
    19.     push    rdi    ;lpszClassName
    20.     push    rbx    ;lpszMenuName
    21.     push    COLOR_WINDOW+1;hbrBackground
    22.     push    rax    ;hCursor
    23.     push    rax        ;hIcon
    24.     push    rsi    ;hInstance
    25.     push    rbx        ;cbClsExtra & cbWndExtra
    26.     pushaddr WndProc      ;lpfnWndProc
    27.     push    sizeof WNDCLASSEX;cbSize & style
    28.     invoke    RegisterClassExA,esp    ;addr WNDCLASSEX
    29.     push    rbx    ;lParam
    30.     push    rsi    ;hinstance=rsi=400000h
    31.     shl    esi,9    ;rsi=CW_USEDEFAULT
    32.     push    rbx        ;hMenu
    33.     push    rbx        ;hWmdParent
    34.     push    IMG_Y+20   ;nHeight
    35.     push    IMG_X+10   ;nWidth
    36.     push    rsi        ;y
    37.     push    rsi        ;x
    38.     sub    esp,20h
    39.     invoke    CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    40.     lea    edi,msg
    41. @@:invoke    GetMessageA,edi,0,0,0
    42.     invoke    DispatchMessageA,edi
    43.     jmp    @b
    44. WinMain endp
    45. ;---------------------------------------------------------------
    46. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    47. local    hImgBox:qword
    48. local    hResource:qword
    49. local    pResource:qword
    50. local    FSize:dword
    51. local    rct:RECT
    52.  
    53.     mov    hWnd,rcx
    54.     cmp    edx,WM_CREATE
    55.     je    wmCREATE
    56.     cmp    edx,WM_DESTROY
    57.     je    wmDESTROY
    58. wmDEFAULT:leave
    59.     jmp    NtdllDefWindowProc_
    60. wmDESTROY:invoke RtlExitUserProcess,NULL
    61. wmCREATE:mov    edx,offset aStatic
    62.     invoke    CreateWindowExA,WS_EX_LEFT,,0,WS_CHILD or WS_VISIBLE \
    63.     or SS_BITMAP,0,0,0,0,hWnd,ID_IMG,IMAGE_BASE,0
    64.     mov    hImgBox,rax
    65. ; Инициализация OLE
    66.     invoke  OleInitialize,NULL
    67. ;--------------------------------------------------------------
    68. ; Загрузить картинку из ресурсов
    69.     invoke  FindResource,0,IDB_MYBITMAP,RT_RCDATA
    70.     mov     hResource,rax
    71.     invoke  SizeofResource,NULL,eax
    72.     mov     FSize,eax
    73.     invoke  LoadResource,NULL,hResource
    74.     mov     pResource,rax
    75. ; Выделить память под картинку
    76.     invoke  GetProcessHeap
    77.     mov     hProcHeap,rax
    78.     invoke  RtlAllocateHeap,eax,HEAP_ZERO_MEMORY,FSize
    79.     mov     hLock,rax
    80. ; Скопировать картинку в выделенную память
    81.     invoke  LockResource,pResource
    82.     mov     esi,eax
    83.     mov     rdi,hLock
    84.     mov     ecx,FSize
    85.     rep     movsb
    86. ; Создать поток из данных
    87.     mov    r8d,offset iStream
    88.     invoke  CreateStreamOnHGlobal,hLock,TRUE
    89. ; Загрузить картинку из памяти
    90.     movr    qword ptr[rsp+20h],iPicture
    91.     mov    r9d,offset IID_IPicture
    92.     invoke  OleLoadPicture,iStream,0,TRUE
    93. ; Вызвать метод интерфейса IPicture->get_Handle()
    94.     mov     rcx,iPicture
    95.     mov     eax,[rcx]
    96.     mov    edx,offset hBitmap
    97.     call    qword ptr[rax].IPicture.get_Handle
    98. ; Вызвать метод интерфейса IPicture->get_Width()
    99.     mov     rcx,iPicture
    100.     mov     eax,[rcx]
    101.     mov    edx,offset bm.bmWidth
    102.     call    qword ptr[rax].IPicture.get_Width
    103. ; Количество пикселей на логический дюйм по горизонтали
    104.     invoke  GetDC,NULL
    105.     invoke  GetDeviceCaps,eax,LOGPIXELSX
    106. ; Пересчитать HIMETRIC в обычные пикселы
    107.     imul    bm.bmWidth
    108.     xor    edx,edx
    109.     mov     ecx,HIMETRIC_PER_INCH
    110.     idiv    ecx
    111. ; Ширина изображения
    112.     mov     bm.bmWidth,eax
    113. ; Вызвать метод интерфейса IPicture->get_Height()
    114.     mov     rcx,iPicture
    115.     mov     eax,[rcx]
    116.     mov    edx,offset bm.bmHeight
    117.     call    qword ptr[rax].IPicture.get_Height
    118. ; Количество пикселей на логический дюйм по вертикали
    119.     invoke  GetDC,NULL
    120.     invoke  GetDeviceCaps,eax,LOGPIXELSY
    121. ; Пересчитать HIMETRIC в обычные пикселы
    122.     imul    bm.bmHeight
    123.     xor    edx,edx
    124.     mov     ecx,HIMETRIC_PER_INCH
    125.     idiv    ecx
    126. ; Высота изображения
    127.     mov    bm.bmHeight,eax
    128. ; Создать виртуальный битмап для превью
    129.     invoke  GetDC,NULL
    130.     invoke  CreateCompatibleBitmap,eax,IMG_X,IMG_Y
    131.     mov     imgBitmap,rax
    132.     invoke  CreateCompatibleDC,NULL
    133.     mov     hDC1,rax
    134.     invoke  SelectObject,eax,imgBitmap
    135.     mov     hOld1,rax
    136.     invoke  CreateCompatibleDC,NULL
    137.     mov     hDC2,rax
    138.     invoke  SelectObject,eax,hBitmap
    139.     mov     hOld2,rax
    140. ; Наложить изображение в центр виртуального битмапа
    141.     invoke  SetStretchBltMode,hDC1,HALFTONE
    142.     mov    eax,bm.bmHeight
    143.     mov    [rsp+48h],rax
    144.     mov    eax,bm.bmWidth
    145.     mov    [rsp+40h],rax
    146.     invoke  StretchBlt,hDC1,0,0,IMG_X,IMG_Y, hDC2,0,0,,,SRCCOPY
    147.     invoke  SelectObject,hDC1,hOld1
    148.     invoke  DeleteDC,hDC1
    149.     invoke  SelectObject,hDC2,hOld2
    150.     invoke  DeleteDC,hDC2
    151. ; Установить виртуальный битмап на static
    152.     invoke  SendMessageA,hImgBox,STM_SETIMAGE,IMAGE_BITMAP,imgBitmap
    153. ; Вызвать метод интерфейса IPicture->Release()
    154.     mov     rcx,iPicture
    155.     mov     eax,[rcx]
    156.     call    qword ptr[rax].IPicture.Release
    157. ; Очистить память
    158.     invoke  HeapFree,hProcHeap,0,hLock
    159.     invoke  OleUninitialize
    160. wmBYE:  mov    eax,TRUE
    161.     leave
    162.     retn
    163. WndProc endp
    164. .data;---------------------------------------
    165. align 10h
    166. bm                   BITMAP <>
    167. hBitmap         dq ?
    168. imgBitmap    dq ?
    169. hDC1               dq ?
    170. hDC2               dq ?
    171. hOld1              dq ?
    172. hOld2              dq ?
    173. iStream           dq ?
    174. hProcHeap     dq ?
    175. hLock               dq ?
    176. iPicture            dq ?
    177. ; GUID {7BF80980-BF32-101A-8BBB00AA00300CAB}
    178. IID_IPicture  GUID <7BF80980h,0BF32h,101Ah,{8Bh,0BBh,0,0AAh,0,30h,0Ch,0ABh}>
    179. aStatic              db "STATIC",0
    180. ClassName      db "OLE",0
    181. FileName         db "br_Rabbit3.cur",0
    182. end

    Файл ресурсов

    Код (C):
    1. #include "resource.h"
    2. #define IDB_MYBITMAP    105
    3. IDB_MYBITMAP RCDATA "Images\\012_028.jpg"
     

    Вложения:

    • 10d.png
      10d.png
      Размер файла:
      383,3 КБ
      Просмотров:
      418
    • 10e.png
      10e.png
      Размер файла:
      301,1 КБ
      Просмотров:
      416
    • 10f.png
      10f.png
      Размер файла:
      643,7 КБ
      Просмотров:
      423
    • 10g.png
      10g.png
      Размер файла:
      311 КБ
      Просмотров:
      421
    • 10h.png
      10h.png
      Размер файла:
      1 МБ
      Просмотров:
      427
    • Images.zip
      Размер файла:
      2,2 МБ
      Просмотров:
      152
    • 10.zip
      Размер файла:
      581,9 КБ
      Просмотров:
      181
    Marylin нравится это.
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792

    Глава пятьдесят третья. Видео-плеер Братца Кролика

    Основные идеи и основа кода для плеера взяты на сайте Manhunter'a из статей Мультимедийный плеер на Ассемблере и Управление громкостью звука в системе. В аттаче asm-/rc-/ico-/exe-файлы. Если установлены кодеки, то поддерживается воспроизведение всевозможных видео-файлов: mp4, mob, mkv, m4v, avi, flv, mts, 3gp, insv, m2ts, db, qt, mov, mpg, mpeg, m1v, vob, wmv.
    rc-файл
    Код (C++):
    1. #include "resource.h"
    2. #define ID_VIDEO  100
    3. #define ID_DTN   101
    4. #define ID_CUR   102
    5. #define ID_PLAY   103
    6. #define IDC_MENU  104
    7. #define ID_PAUSE  105
    8. #define ID_STOP   106
    9. #define ID_OPEN   107
    10. #define ID_PROGRESS 108
    11. #define ID_SLIDER 109
    12. #define ID_VOL   110
    13. #define ID_UP   111
    14. #define ID_DN   112
    15. #define ID_MUT   113
    16. #define ID_ABOUT  114
    17. #define IDCANCEL  2
    18. #define ID_DIALOG 1
    19. #define IDM_SAYHELLO 0
    20. #define IDM_GETTEXT 1
    21. #define IDM_CLEAR 2
    22. #define IDM_EXIT 3
    23. #define IDC_ICON1 500
    24. IDC_ICON1 ICON "br_Fox1.ico"
    25. ID_DIALOG DIALOG 0, 0, 200, 208
    26. STYLE DS_SYSMODAL | DS_CENTER | WS_CAPTION | WS_SYSMENU
    27. EXSTYLE WS_EX_DLGMODALFRAME
    28. CAPTION "Uncle Remus tales #37k: Player Demo"
    29. FONT 10, "Arial"
    30. MENU IDC_MENU
    31. {
    32.    CONTROL "", -1, BUTTON, BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, -2, 195, 134
    33.    CONTROL "", ID_VIDEO, EDIT, ES_LEFT | ES_READONLY | WS_POPUP | WS_VISIBLE, 5, 5, 190, 125
    34.    CONTROL "00:00:00", ID_CUR, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE, 4, 134, 45, 9
    35.    CONTROL "00:00:00", ID_DTN, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE, 151, 134, 45, 9
    36.    CONTROL "Volume +2%",ID_UP,  BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,3,158,46,13
    37.    CONTROL "Volume -2%",ID_DN,  BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,50,158,46,13
    38.    CONTROL "Mute",ID_MUT,  BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,97,158,25,13
    39.    CONTROL "0%", ID_VOL, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE, 30, 178, 20, 9
    40.    CONTROL "Volume: ", -1, STATIC, SS_RIGHT | WS_CHILD | WS_VISIBLE, 3, 178, 30, 9
    41. CONTROL "", ID_PROGRESS, "msctls_progress32", PBS_SMOOTH,2, 143, 196, 8,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
    42. CONTROL "Slider2",ID_SLIDER,"msctls_trackbar32",TBS_TOP,51, 172, 147,20
    43. CONTROL "Open" , ID_OPEN,  BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,   3, 193, 39, 13
    44. CONTROL "Play" , ID_PLAY,  BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,  42, 193, 39, 13
    45. CONTROL "Pause", ID_PAUSE, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,  81, 193, 39, 13
    46. CONTROL "Stop",  ID_STOP,  BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 120, 193, 39, 13
    47. CONTROL "Exit" , IDCANCEL, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE, 159, 193, 39, 13
    48. }
    49. IDC_MENU  MENU
    50. {
    51.     POPUP "Файл"
    52.     {
    53.         MENUITEM "Открыть файл",ID_OPEN
    54.         MENUITEM "Открыть URL",IDM_GETTEXT,GRAYED
    55.         MENUITEM "Проиграть CD/DVD",IDM_CLEAR,GRAYED
    56.         MENUITEM "Закрыть",IDM_CLEAR,GRAYED
    57.         MENUITEM SEPARATOR
    58.         MENUITEM "Выход",IDCANCEL
    59.     }
    60.     POPUP "Вид"
    61.     {
    62.         MENUITEM "Произвольный размер",IDM_SAYHELLO,GRAYED
    63.         MENUITEM "1/2 размера",IDM_GETTEXT,GRAYED
    64.         MENUITEM "Оригинальный размер",IDM_CLEAR,GRAYED
    65.         MENUITEM "Двойной размер",IDM_CLEAR,GRAYED
    66.         MENUITEM SEPARATOR
    67.         MENUITEM "Полноэкранный режим",IDM_SAYHELLO,GRAYED
    68.         MENUITEM "Компактный",IDM_GETTEXT,GRAYED
    69.         MENUITEM "Всегда наверху",IDM_CLEAR,GRAYED
    70.         MENUITEM "Переключит OSD",IDM_CLEAR,GRAYED
    71.     }
    72.     POPUP "Проигрывание"
    73.     {
    74.         MENUITEM "Играть",ID_PLAY
    75.         MENUITEM "Приостановить",ID_PAUSE
    76.         MENUITEM "Stop",ID_STOP
    77. MENUITEM SEPARATOR
    78.         MENUITEM "Предыдущий трек",IDM_SAYHELLO,GRAYED
    79.         MENUITEM "Следующий трек",IDM_GETTEXT,GRAYED
    80.         MENUITEM "Плейлист",IDM_CLEAR,GRAYED
    81.         MENUITEM SEPARATOR
    82.         MENUITEM "Выключить звук",IDM_SAYHELLO,GRAYED
    83.         MENUITEM SEPARATOR
    84.         MENUITEM "Вперед на 10 секунд",IDM_SAYHELLO,GRAYED
    85.         MENUITEM "Назад на 10 секунд",IDM_GETTEXT,GRAYED
    86.         MENUITEM "Вперед на 1 минуту",IDM_SAYHELLO,GRAYED
    87.         MENUITEM "Назад на 1 минуту",IDM_SAYHELLO,GRAYED
    88.         MENUITEM "Вперед на 10 минут",IDM_SAYHELLO,GRAYED
    89.         MENUITEM "Назад на 10 минут",IDM_CLEAR,GRAYED
    90.     }
    91.     POPUP "Настройки"
    92.     {
    93.         MENUITEM "Аудиотрек",IDM_SAYHELLO,GRAYED
    94.         MENUITEM "Субтитры",IDM_GETTEXT,GRAYED
    95.         MENUITEM "Соотношение сторон",IDM_CLEAR,GRAYED
    96.         MENUITEM "Деинтерлейс",IDM_CLEAR,GRAYED
    97.         MENUITEM SEPARATOR
    98.         MENUITEM "Опции ...",IDM_SAYHELLO,GRAYED
    99.         MENUITEM "Язык",IDM_GETTEXT,GRAYED
    100.         MENUITEM SEPARATOR
    101.         MENUITEM "Показать информацию о файле",IDM_CLEAR,GRAYED
    102.         MENUITEM "Показывать вывод MPlayer",IDM_CLEAR,GRAYED
    103.     }
    104.     POPUP "Помощь"
    105.     {
    106.         MENUITEM "Помощь по клавиатуре",IDM_SAYHELLO,GRAYED
    107.         MENUITEM "О программе...",ID_ABOUT
    108.     }
    109. }
     

    Вложения:

    • 00.jpg
      00.jpg
      Размер файла:
      53,5 КБ
      Просмотров:
      336
    • tut_37k.zip
      Размер файла:
      15,9 КБ
      Просмотров:
      119
    Marylin нравится это.
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    asm-файл
    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. include winmm.inc
    4. includelib winmm.lib
    5. IMG_X equ 332
    6. IMG_Y equ 248
    7. ID_VIDEO equ 100
    8. ID_DTN equ 101
    9. ID_CUR equ 102
    10. ID_PLAY equ 103
    11. IDC_MENU equ 104
    12. ID_PAUSE equ 105
    13. ID_STOP equ 106
    14. ID_OPEN equ 107
    15. ID_PROGRESS equ 108
    16. ID_SLIDER equ 109
    17. ID_VOL   equ 110
    18. ID_UP   equ 111
    19. ID_DN   equ 112
    20. ID_MUT   equ 113
    21. ID_ABOUT  equ 114
    22. IDC_ICON1 equ 500
    23. ID_DIALOG equ 1
    24. CLSCTX_INPROC_SERVER = 1
    25. WM_APP = 8000h
    26. WM_GRAPHNOTIFY = WM_APP + 1
    27. EC_COMPLETE = 1
    28. AM_SEEKING_AbsolutePositioning = 1
    29. PBM_SETBARCOLOR = 409h
    30. PBM_SETBKCOLOR = 2001h
    31. Size_of_buffer = 100
    32. State_Stopped = 0
    33. State_Paused = 1
    34. State_Running = 2
    35. TBM_SETPOS      equ WM_USER+5
    36. TBM_SETRANGEMIN equ WM_USER+7
    37. TBM_SETRANGEMAX equ WM_USER+8
    38. TB_THUMBPOSITION equ 4
    39. TB_THUMBTRACK   equ 5
    40. ;-------------------------------
    41. ;  IGraphBuilder  virtual method table
    42. ;-------------------------------
    43. IGraphBuilderVtbl STRUCT
    44. ;IUnknown methods
    45.    QueryInterface QWORD ?
    46.    AddRef QWORD ?
    47.    Release QWORD ?
    48. ;IGraphBuilder methods
    49.    AddFilter QWORD ?
    50.    RemoveFilter QWORD ?
    51.    EnumFilters QWORD ?
    52.    FindFilterByName QWORD ?
    53.    ConnectDirect QWORD ?
    54.    Reconnect QWORD ?
    55.    Disconnect QWORD ?
    56.    SetDefaultSyncSource QWORD ?
    57.    Connect QWORD ?
    58.    Render QWORD ?
    59.    RenderFile QWORD ?
    60.    AddSourceFilter QWORD ?
    61.    SetLogFile QWORD ?
    62.    Abort QWORD ?
    63.    ShouldOperationContinue QWORD ?
    64. IGraphBuilderVtbl ENDS
    65. IMediaControlVtbl STRUCT
    66. ;IUnknown methods
    67.    QueryInterface QWORD ?
    68.    AddRef QWORD ?
    69.    Release QWORD ?
    70. ;IMediaControl methods
    71.    GetTypeInfoCount QWORD ?
    72.    GetTypeInfo QWORD ?
    73.    GetIDsOfNames QWORD ?
    74.    Invoke_ QWORD ?
    75.    Run QWORD ?
    76.    Pause_ QWORD ?
    77.    Stop QWORD ?
    78.    GetState QWORD ?
    79.    RenderFile QWORD ?
    80.     AddSourceFilter QWORD ?
    81.     get_FilterCollection QWORD ?
    82.     get_RegFilterCollection QWORD ?
    83.     StopWhenReady QWORD ?
    84. IMediaControlVtbl ENDS
    85.  IVideoWindowVtbl STRUCT
    86. ;IUnknown methods
    87.     QueryInterface QWORD ?
    88.     AddRef QWORD ?
    89.     Release QWORD ?
    90. ;IVideoWindow methods
    91.     GetTypeInfoCount       QWORD ?
    92.     GetTypeInfo       QWORD ?
    93.     GetIDsOfNames                QWORD ?
    94.     Invoke_                      QWORD ?
    95.     put_Caption                  QWORD ?
    96.     get_Caption                  QWORD ?
    97.     put_WindowStyle              QWORD ?
    98.     get_WindowStyle              QWORD ?
    99.     put_WindowStyleEx            QWORD ?
    100.     get_WindowStyleEx            QWORD ?
    101.     put_AutoShow                 QWORD ?
    102.     get_AutoShow                 QWORD ?
    103.     put_WindowState              QWORD ?
    104.     get_WindowState              QWORD ?
    105.     put_BackgroundPalette        QWORD ?
    106.     get_BackgroundPalette        QWORD ?
    107.     put_Visible                  QWORD ?
    108.     get_Visible                  QWORD ?
    109.     put_Left                     QWORD ?
    110.     get_Left                     QWORD ?
    111.     put_Width                    QWORD ?
    112.     get_Width                    QWORD ?
    113.     put_Top                      QWORD ?
    114.     get_Top                      QWORD ?
    115.     put_Height                   QWORD ?
    116.     get_Height                   QWORD ?
    117.     put_Owner                    QWORD ?
    118.     get_Owner                    QWORD ?
    119.     put_MessageDrain             QWORD ?
    120.     get_MessageDrain             QWORD ?
    121.     get_BorderColor              QWORD ?
    122.     put_BorderColor QWORD ?
    123.     get_FullScreenMode QWORD ?
    124.     put_FullScreenMode QWORD ?
    125.     SetWindowForeground QWORD ?
    126.     NotifyOwnerMessage QWORD ?
    127.     SetWindowPosition QWORD ?
    128.     GetWindowPosition QWORD ?
    129.     GetMinIdealImageSize QWORD ?
    130.     GetMaxIdealImageSize QWORD ?
    131.     GetRestorePosition QWORD ?
    132.     HideCursor QWORD ?
    133.     IsCursorHidden QWORD ?
    134. IVideoWindowVtbl ENDS
    135. IMediaSeeking struct
    136.     ; IUnknown
    137.     QueryInterface       QWORD ?   ; 000h
    138.     AddRef               QWORD ?   ; 008h
    139.     Release              QWORD ?   ; 010h
    140.     ; IMediaSeeking
    141.     GetCapabilities      QWORD ?   ; 00Ch
    142.     CheckCapabilities    QWORD ?   ; 010h
    143.     IsFormatSupported    QWORD ?   ; 014h
    144.     QueryPreferredFormat QWORD ?   ; 018h
    145.     GetTimeFormat        QWORD ?   ; 01Ch
    146.     IsUsingTimeFormat    QWORD ?   ; 020h
    147.     SetTimeFormat        QWORD ?   ; 024h
    148.     GetDuration          QWORD ?   ; 028h
    149.     GetStopPosition      QWORD ?   ; 02Ch
    150.     GetCurrentPosition   QWORD ?   ; 030h
    151.     ConvertTimeFormat    QWORD ?   ; 034h
    152.     SetPositions         QWORD ?   ; 038h
    153.     GetPositions         QWORD ?   ; 03Ch
    154.     GetAvailable         QWORD ?   ; 040h
    155.     SetRate              QWORD ?   ; 044h
    156.     GetRate              QWORD ?   ; 048h
    157.     GetPreroll           QWORD ?   ; 04Ch
    158. IMediaSeeking ends
    159. ; IID_IBasicVideo Interface
    160. IBasicVideo struct
    161.     ; IUnknown
    162.     QueryInterface                QWORD ?   ; 000h
    163.     AddRef                        QWORD ?   ; 004h
    164.     Release                       QWORD ?   ; 008h
    165.     ; IBasicVideo
    166.     GetTypeInfoCount              QWORD ?   ; 00Ch
    167.     GetTypeInfo                   QWORD ?   ; 010h
    168.     GetIDsOfNames                 QWORD ?   ; 014h
    169.     _Invoke                       QWORD ?   ; 018h
    170.     get_AvgTimePerFrame           QWORD ?   ; 01Ch
    171.     get_BitRate                   QWORD ?   ; 020h
    172.     get_BitErrorRate              QWORD ?   ; 024h
    173.     get_VideoWidth                QWORD ?   ; 028h
    174.     get_VideoHeight               QWORD ?   ; 02Ch
    175.     put_SourceLeft                QWORD ?   ; 030h
    176.     get_SourceLeft                QWORD ?   ; 034h
    177.     put_SourceWidth               QWORD ?   ; 038h
    178.     get_SourceWidth               QWORD ?   ; 03Ch
    179.     put_SourceTop                 QWORD ?   ; 040h
    180.     get_SourceTop                 QWORD ?   ; 044h
    181.     put_SourceHeight              QWORD ?   ; 048h
    182.     get_SourceHeight              QWORD ?   ; 04Ch
    183.     put_DestinationLeft           QWORD ?   ; 050h
    184.     get_DestinationLeft           QWORD ?   ; 054h
    185.     put_DestinationWidth          QWORD ?   ; 058h
    186.     get_DestinationWidth          QWORD ?   ; 05Ch
    187.     put_DestinationTop            QWORD ?   ; 060h
    188.     get_DestinationTop            QWORD ?   ; 064h
    189.     put_DestinationHeight         QWORD ?   ; 068h
    190.     get_DestinationHeight         QWORD ?   ; 06Ch
    191.     SetSourcePosition             QWORD ?   ; 070h
    192.     GetSourcePosition             QWORD ?   ; 074h
    193.     SetDefaultSourcePosition      QWORD ?   ; 078h
    194.     SetDestinationPosition        QWORD ?   ; 07Ch
    195.     GetDestinationPosition        QWORD ?   ; 080h
    196.     SetDefaultDestinationPosition QWORD ?   ; 084h
    197.     GetVideoSize                  QWORD ?   ; 088h
    198.     GetVideoPaletteEntries        QWORD ?   ; 08Ch
    199.     GetCurrentImage               QWORD ?   ; 090h
    200.     IsUsingDefaultSource          QWORD ?   ; 094h
    201.     IsUsingDefaultDestination     QWORD ?   ; 098h
    202. IBasicVideo ends
    203. ; IID_IMediaEventEx Interface
    204. IMediaEventEx struct
    205.     ; IUnknown
    206.     QueryInterface         QWORD ?   ; 000h
    207.     AddRef                 QWORD ?   ; 004h
    208.     Release                QWORD ?   ; 008h
    209.     ; IMediaEventEx
    210.     GetTypeInfoCount       QWORD ?   ; 00Ch
    211.     GetTypeInfo            QWORD ?   ; 010h
    212.     GetIDsOfNames          QWORD ?   ; 014h
    213.     _Invoke                QWORD ?   ; 018h
    214.     GetEventHandle         QWORD ?   ; 01Ch
    215.     GetEvent               QWORD ?   ; 020h
    216.     WaitForCompletion      QWORD ?   ; 024h
    217.     CancelDefaultHandling  QWORD ?   ; 028h
    218.     RestoreDefaultHandling QWORD ?   ; 02Ch
    219.     FreeEventParams        QWORD ?   ; 030h
    220.     SetNotifyWindow        QWORD ?   ; 034h
    221.     SetNotifyFlags         QWORD ?   ; 038h
    222.     GetNotifyFlags         QWORD ?   ; 03Ch
    223. IMediaEventEx ends
    224. ; IID_IMMDeviceEnumerator Interface
    225. IMMDeviceEnumerator struct
    226.     ; IUnknown
    227.     QueryInterface                         QWORD ?   ; 000h
    228.     AddRef                                 QWORD ?   ; 004h
    229.     Release                                QWORD ?   ; 008h
    230.     ; IMMDeviceEnumerator
    231.     EnumAudioEndpoints                     QWORD ?   ; 00Ch
    232.     GetDefaultAudioEndpoint                QWORD ?   ; 010h
    233.     GetDevice                              QWORD ?   ; 014h
    234.     RegisterEndpointNotificationCallback   QWORD ?   ; 018h
    235.     UnregisterEndpointNotificationCallback QWORD ?   ; 01Ch
    236. IMMDeviceEnumerator ends
    237. ; IID_IMMDevice Interface
    238. IMMDevice struct
    239.     ; IUnknown
    240.     QueryInterface    QWORD ?   ; 000h
    241.     AddRef            QWORD ?   ; 004h
    242.     Release           QWORD ?   ; 008h
    243.     ; IMMDevice
    244.     Activate          QWORD ?   ; 00Ch
    245.     OpenPropertyStore QWORD ?   ; 010h
    246.     GetId             QWORD ?   ; 014h
    247.     GetState          QWORD ?   ; 018h
    248. IMMDevice ends
    249. ; IID_IAudioEndpointVolume Interface
    250. IAudioEndpointVolume struct
    251.     ; IUnknown
    252.     QueryInterface                QWORD ?   ; 000h
    253.     AddRef                        QWORD ?   ; 004h
    254.     Release                       QWORD ?   ; 008h
    255.     ; IAudioEndpointVolume
    256.     RegisterControlChangeNotify   QWORD ?   ; 00Ch
    257.     UnregisterControlChangeNotify QWORD ?   ; 010h
    258.     GetChannelCount               QWORD ?   ; 014h
    259.     SetMasterVolumeLevel          QWORD ?   ; 018h
    260.     SetMasterVolumeLevelScalar    QWORD ?   ; 01Ch
    261.     GetMasterVolumeLevel          QWORD ?   ; 020h
    262.     GetMasterVolumeLevelScalar    QWORD ?   ; 024h
    263.     SetChannelVolumeLevel         QWORD ?   ; 028h
    264.     SetChannelVolumeLevelScalar   QWORD ?   ; 02Ch
    265.     GetChannelVolumeLevel         QWORD ?   ; 030h
    266.     GetChannelVolumeLevelScalar   QWORD ?   ; 034h
    267.     SetMute                       QWORD ?   ; 038h
    268.     GetMute                       QWORD ?   ; 03Ch
    269.     GetVolumeStepInfo             QWORD ?   ; 040h
    270.     VolumeStepUp                  QWORD ?   ; 044h
    271.     VolumeStepDown                QWORD ?   ; 048h
    272.     QueryHardwareSupport          QWORD ?   ; 04Ch
    273.     GetVolumeRange                QWORD ?   ; 050h
    274. IAudioEndpointVolume ends
    275. .code
    276. WinMain proc
    277. local dummy:qword
    278.  invoke InitCommonControls
    279.  ; Инициализация COM
    280. invoke  CoInitialize,NULL
    281. mov r9d,offset DialogProc
    282. mov qword ptr [rsp+20h],IDC_MENU
    283. invoke  DialogBoxParam,IMAGE_BASE,ID_DIALOG,HWND_DESKTOP
    284. invoke  CoUninitialize
    285. Exit:: xor r9d,r9d
    286.  xor r8d,r8d
    287. mov eax,count
    288. mov rdx,[hande+rax*8]
    289. mov mb.lpszText,rdx
    290. invoke MessageBoxIndirect,&mb
    291. invoke RtlExitUserProcess,NULL
    292. WinMain endp
    293. DialogProc proc hwnddlg:qword,msg:qword,wparam:qword,lparam:qword
    294. local buff[Size_of_buffer]:byte
    295. local bufferUNICODE[Size_of_buffer*2]:byte
    296.        mov hwnddlg,rcx
    297.        xor ebx,ebx
    298.         cmp     edx,WM_COMMAND
    299.         je      wmCOMMAND
    300. cmp     edx,WM_CLOSE
    301. je      wmCLOSE
    302. cmp     edx,WM_GRAPHNOTIFY
    303. je      wmGRAPHNOTIFY
    304. cmp     edx,WM_HSCROLL
    305. je      wmHSCROLL                  
    306. cmp     edx,WM_INITDIALOG
    307. jne     wmBYE
    308. wmINITDIALOG:invoke LoadIcon,IMAGE_BASE,IDC_ICON1
    309. invoke SendMessage,hwnddlg,WM_SETICON,0,rax
    310. invoke  GetDlgItem,hwnddlg,ID_PROGRESS
    311.         mov     hProgress,rax
    312. invoke  GetDlgItem,hwnddlg,ID_OPEN
    313. mov     hOpen,rax
    314. invoke  GetDlgItem,hwnddlg,ID_PLAY
    315.         mov     hPlay,rax
    316.        invoke  GetDlgItem,hwnddlg,ID_STOP
    317.         mov     hStop,rax
    318.        invoke  GetDlgItem,hwnddlg,ID_PAUSE
    319.         mov     hPause,rax
    320.        invoke EnableWindow,hPause,FALSE
    321.        invoke EnableWindow,hPlay,FALSE
    322.        invoke EnableWindow,hStop,FALSE
    323.        mov rax,hwnddlg
    324.        mov hwndDlg,rax
    325.        invoke SendMessage,hProgress,PBM_SETBARCOLOR,0FF0000h
    326.        invoke SendDlgItemMessage,hwnddlg,ID_SLIDER,TBM_SETRANGEMIN,FALSE,0
    327.        invoke SendDlgItemMessage,hwnddlg,ID_SLIDER,TBM_SETRANGEMAX,FALSE,100
    328. ;---------------------------------------------------------
    329. ; Инициализация всех интерфейсов
    330.        mov eax,offset pGraphBuilder
    331.        mov [rsp+20h],rax
    332.        mov ecx,offset CLSID_FilterGraph
    333.        xor edx,edx;NULL
    334.        mov r8d,CLSCTX_INPROC_SERVER
    335.        mov r9d,offset IID_IGraphBuilder
    336.        invoke CoCreateInstance
    337.        test eax,eax
    338.        jnz Exit ;Unable to create GraphBuilder
    339.        inc count   ;count=1
    340.        mov rcx, pGraphBuilder
    341.        mov rax, [rcx]
    342.        mov edx,offset IID_IMediaControl
    343.        mov r8d,offset pMediaControl
    344.        invoke [rax].IGraphBuilderVtbl.QueryInterface
    345.        test eax,eax
    346.        jnz Exit ;Unable to get interface IMediaControl
    347. inc count;count=2
    348. mov rcx, pGraphBuilder
    349. mov rax, [rcx]
    350. mov edx,offset IID_IVideoWindow
    351. mov r8d,offset pVideoWindow
    352. invoke [rax].IGraphBuilderVtbl.QueryInterface
    353. test eax,eax
    354. jnz Exit ;Unable to get interface VideoWindow
    355. inc count;count=3
    356. mov rcx, pGraphBuilder
    357. mov rax, [rcx]
    358. mov edx,offset IID_IMediaSeeking
    359. mov r8d,offset pMediaSeeking
    360. invoke [rax].IGraphBuilderVtbl.QueryInterface
    361. test eax,eax
    362. jnz Exit ;Unable to get interface MediaSeeking
    363. inc count;count=4
    364. mov rcx, pGraphBuilder
    365. mov rax, [rcx]
    366. mov edx,offset IID_IMediaEventEx
    367. mov r8d,offset pEvent
    368. invoke [rax].IGraphBuilderVtbl.QueryInterface
    369. test eax,eax
    370. jnz Exit ;Unable to get interface Event
    371. inc count;count=5
    372. mov rcx, pGraphBuilder
    373. mov rax, [rcx]
    374. mov edx,offset IID_IBasicVideo
    375. mov r8d,offset pBasicVideo
    376. invoke [rax].IGraphBuilderVtbl.QueryInterface
    377. test eax,eax
    378. jnz Exit ;Unable to get interface BasicVideo
    379. inc count;count=6
    380. ;-------------------------------------------------------------
    381.         ; Создать объект
    382. mov ecx,offset CLSID_MMDeviceEnumerator
    383. xor edx,edx
    384. mov r8d,CLSCTX_INPROC_SERVER
    385. mov r9d,offset IID_IMMDeviceEnumerator
    386. mov eax,offset deviceEnumerator
    387. mov [rsp+20h],rax
    388.         invoke  CoCreateInstance
    389.         ; Инициализировать объект
    390.         mov     rcx,deviceEnumerator
    391.         mov     rax, [rcx]
    392. mov r9d,offset defaultDevice
    393.         invoke [rax].IMMDeviceEnumerator.GetDefaultAudioEndpoint,,eRender,eConsole
    394.         mov     rcx,deviceEnumerator
    395.         mov     rax, [rcx]
    396.         invoke [rax].IMMDeviceEnumerator.Release
    397. mov eax,offset endpointVolume
    398. mov [rsp+20h],rax
    399.         mov     rcx,defaultDevice
    400.         mov     rax,[rcx]
    401. mov edx,offset IID_IAudioEndpointVolume
    402. mov r8d,CLSCTX_INPROC_SERVER
    403. xor r9,r9
    404.         invoke [rax].IMMDevice.Activate
    405.         mov     rcx,defaultDevice
    406.         mov     rax, [rcx]
    407.         invoke [rax].IMMDevice.Release
    408. jmp wmBYE
    409. wmHSCROLL:mov eax,r8d
    410. and eax,0FFFFh
    411. cmp eax,TB_THUMBTRACK ; Ползунок двигают мышью
    412. jne @f
    413. shr r8d,16
    414. mov NewPosition,r8d
    415. cvtsi2ss xmm0,r8d
    416. divss xmm0,const100
    417. movss fLevel,xmm0
    418. jmp @0
    419. @@: cmp eax,TB_THUMBPOSITION ; Ползунок перемещён мышью
    420. jne @f
    421. shr r8d,16
    422. mov NewPosition,r8d
    423. cvtsi2ss xmm0,r8d
    424. divss xmm0,const100
    425. movss fLevel,xmm0
    426. jmp @0
    427. @@: cmp eax,SB_LINEUP ;Нажата стрелка вверх или вправо
    428. jne @f
    429. dec NewPosition
    430. mov r8d,NewPosition
    431. mov edx,offset mask1
    432. lea ecx,buff
    433.         invoke  wsprintf
    434. lea r8d,buff
    435. mov edx,ID_VOL
    436.         invoke  SetDlgItemText,hwnddlg
    437. mov eax,NewPosition
    438. mov [rsp+20h],rax
    439. invoke SendDlgItemMessage,hwnddlg,ID_SLIDER,TBM_SETPOS,TRUE
    440. jmp volume_down
    441. @@: cmp eax,SB_LINEDOWN ;Нажата стрелка вниз или влево
    442. jne wmBYE
    443. inc NewPosition
    444. mov r8d,NewPosition
    445. mov edx,offset mask1
    446. lea ecx,buff
    447.         invoke  wsprintf
    448. lea r8d,buff
    449. mov edx,ID_VOL
    450.         invoke  SetDlgItemText,hwnddlg
    451. mov eax,NewPosition
    452. mov [rsp+20h],rax
    453. invoke SendDlgItemMessage,hwnddlg,ID_SLIDER,TBM_SETPOS,TRUE
    454. jmp volume_up
    455. @0: mov r8d,NewPosition
    456. mov edx,offset mask1
    457. lea ecx,buff
    458.         invoke  wsprintf
    459. lea r8d,buff
    460. mov edx,ID_VOL
    461.         invoke  SetDlgItemText,hwnddlg
    462. mov eax,NewPosition
    463. mov [rsp+20h],rax
    464. invoke SendDlgItemMessage,hwnddlg,ID_SLIDER,TBM_SETPOS,TRUE
    465. jmp wmBYE
    466. wmGRAPHNOTIFY:; Получить событие из очереди
    467. and qword ptr [rsp+20h],0
    468.         mov     rcx,pEvent
    469.         mov     rax,[rcx]
    470. invoke [rax].IMediaEventEx.GetEvent,,&evCode,&param1,&param2
    471.         or      eax,eax
    472.         jnz     wmBYE
    473.         ; Освободить событие
    474.         mov     rcx,pEvent
    475.         mov     rax,[rcx]
    476.         invoke [rax].IMediaEventEx.FreeEventParams,,&evCode,&param1,&param2
    477.         ; Воспроизведение завершено?
    478.         cmp     evCode,EC_COMPLETE
    479.         jne     wmGRAPHNOTIFY
    480.         invoke  timeKillEvent,hTimer;удаление мультимедийного таймера
    481.         ; Остановить воспроизведение
    482.         mov     rcx,pMediaControl
    483.         mov     rax,[rcx]
    484.         call [rax].IMediaControlVtbl.Stop
    485.         ; Перемотать поток на начало
    486.         and lDuration,0
    487. and nCurTrack,0
    488. and qword ptr[rsp+20h],0
    489. mov edx,offset lDuration
    490.         mov     rcx,pMediaSeeking
    491.         mov     rax,[rcx]
    492. invoke [rax].IMediaSeeking.SetPositions,,,AM_SEEKING_AbsolutePositioning,edx
    493.         ; Установить пустой счетчик в интерфейсе
    494. and qword ptr[rsp+20h],0
    495. mov edx,offset mask0
    496.         invoke  wsprintf,&buff,,0,0
    497.         invoke  SetDlgItemText,hwnddlg,ID_CUR,&buff
    498. invoke EnableWindow,hOpen,TRUE
    499.         jmp     wmGRAPHNOTIFY
    500. wmCOMMAND:cmp r8d,IDCANCEL
    501.         je      wmCLOSE
    502.         cmp     r8d,ID_PLAY
    503. je wmPLAY
    504.         cmp     r8d,ID_OPEN
    505. je wmOPEN
    506.         cmp     r8d,ID_STOP
    507. je wmSTOP
    508. cmp     r8d,ID_UP
    509.         je      volume_up
    510. cmp     r8d,ID_DN
    511.         je      volume_down
    512.         cmp     r8d,ID_MUT
    513.         je      volume_mute
    514.         cmp     r8d,ID_ABOUT
    515.         je ABOUT
    516.         cmp     r8d,ID_PAUSE
    517.         jne     wmBYE
    518. wmPAUSE:; Пауза
    519.         mov     rcx,pMediaControl
    520.         mov     rax,[rcx]
    521.         call [rax].IMediaControlVtbl.Pause_
    522.         jmp     wmBYE
    523. ABOUT:  mov edx,offset ClassName
    524. mov r8d,offset AboutMsg
    525. invoke ShellAbout,hwnddlg,,,IDC_ICON1
    526. jmp wmBYE
    527. wmPLAY:; Играть
    528. ;делаем кнопку Open неактивной
    529. invoke EnableWindow,hOpen,FALSE
    530. ;делаем кнопки Pause и Stop активными
    531. invoke EnableWindow,hPause,TRUE
    532. invoke EnableWindow,hStop,TRUE
    533. mov r8d,offset TimeProc
    534. mov qword ptr[rsp+20h],TIME_PERIODIC
    535.         invoke  timeSetEvent,100,1,,0;установка мультимедийного таймера
    536. ;timeSetEvent(
    537. ;   UINT    uDelay, - задержка события в миллисекундах. Если это значение лежит вне диапазона допустимых значений задержки, поддерживаемых таймером, функция возвращает ошибку.
    538. ;   UINT    uResolution, - разрешение событий таймера в миллисекундах. Разрешение увеличивается при уменьшении значений; разрешение, установленное в нуль, показывает, что периодические события будут происходить с наибольшей возможной точностью. Для уменьшения системных издержек, тем не менее, вы должны использовать максимальное значение, соответствующее вашему приложению
    539. ;   LPTIMECALLBACK lpTimeProc, - указатель на функцию обратного вызова, которая вызывается по истечению одиночного события или периодически по истечению периодических событий. Если fuEvent определяет флаг TIME_CALLBACK_EVENT_SET или TIME_CALLBACK_EVENT_PULSE, то значение параметра lpTimeProc интерпретируется как дескриптор события
    540. ;   DWORD_PTR dwUser, - определяемые пользователем данные
    541. ;   UINT    fuEvent - тип события таймера TIME_PERIODIC Событие происходит каждые uDelay миллисекунд.
    542. mov hTimer,rax
    543. ;------------------------------------------------------------------
    544.         mov     rcx,pMediaControl
    545.         mov     rax,[rcx]
    546.         call [rax].IMediaControlVtbl.Run
    547.         jmp     wmBYE
    548. volume_mute:; Отключить/включить звук
    549.         mov     rcx,endpointVolume
    550.         mov     rax, [rcx]
    551. mov edx,offset bMute
    552.         invoke [rax].IAudioEndpointVolume.GetMute
    553.         ; Поменять значение на противоположное
    554.         xor     edx,edx
    555.         cmp     bMute,0
    556.         sete    dl
    557.         ; Установить состояние Mute
    558.         mov     rcx,endpointVolume
    559.         mov     rax, [rcx]
    560. invoke [rax].IAudioEndpointVolume.SetMute,,,NULL
    561.         jmp     get_volume
    562. volume_up:; Увеличить громкость
    563.         mov     rcx,endpointVolume
    564.         mov     rax, [rcx]
    565. xor edx,edx
    566.         invoke [rax].IAudioEndpointVolume.VolumeStepUp
    567.         jmp get_volume
    568. volume_down:; Уменьшить громкость
    569.         mov     rcx,endpointVolume
    570.         mov     rax, [rcx]
    571. xor edx,edx
    572.         invoke [rax].IAudioEndpointVolume.VolumeStepDown
    573. get_volume:; Получить значение громкости [0.0 - 1.0]
    574.         mov     rcx,endpointVolume
    575.         mov     rax,[rcx]
    576. mov edx,offset fLevel
    577.         invoke [rax].IAudioEndpointVolume.GetMasterVolumeLevelScalar
    578. ; Привести значение к процентному и целочисленному
    579. movss xmm0,fLevel
    580. mulss xmm0,const100
    581. cvtss2si r8d,xmm0
    582.         mov     NewPosition,r8d
    583. mov edx,offset mask1
    584. lea ecx,buff
    585.         invoke  wsprintf
    586. lea r8d,buff
    587. mov edx,ID_VOL
    588.         invoke  SetDlgItemText,hwnddlg
    589. mov eax,NewPosition
    590. mov [rsp+20h],rax
    591. invoke SendDlgItemMessage,hwnddlg,ID_SLIDER,TBM_SETPOS,TRUE
    592.         jmp     wmBYE
    593. wmOPEN:;fill OPENFILENAME
    594. lea eax,buff
    595. mov ofn.lpstrFile,rax
    596. lea eax,Filter
    597. mov ofn.lpstrFilter,rax
    598. mov rax,hwnddlg
    599. mov ofn.hwndOwner,rax
    600. lea ecx,ofn;адрес OPENFILENAME
    601. invoke GetOpenFileName
    602. test eax,eax
    603. jz wmCLOSE ; user clicks "Cancel"
    604. inc count;count=7
    605. ;делаем кнопку Play активной
    606. invoke EnableWindow,hPlay,TRUE
    607. ;в качестве названия диалога выводим название видео
    608. lea edx,buff
    609. invoke  SetWindowText,hwnddlg
    610. invoke SendMessage,hProgress,PBM_SETPOS,0,0
    611. ;переводим название видео в UNICODE
    612. mov qword ptr [rsp+28h],Size_of_buffer*2
    613. lea eax,bufferUNICODE
    614. mov [rsp+20h],rax
    615. invoke MultiByteToWideChar,0,0,&buff,-1
    616. ; Загрузить файл для воспроизведения
    617.         mov     rcx,pGraphBuilder
    618.         mov     rax,[rcx]
    619. xor r8,r8
    620. lea edx,bufferUNICODE
    621. invoke [rax].IGraphBuilderVtbl.RenderFile
    622.         test eax,eax
    623. jnz Exit ;Unable to create GraphBuilder
    624. inc count
    625.         ; Назначить окно для воспроизведения видео
    626.         invoke  GetDlgItem,hwnddlg,ID_VIDEO
    627.         mov temp,rax
    628.         test eax,eax
    629. jz Exit ;Unable to create GraphBuilder
    630. inc count
    631. mov edx,eax  
    632.         mov rcx,pVideoWindow
    633.         mov     rax,[rcx]
    634. invoke [rax].IVideoWindowVtbl.put_Owner
    635. test eax,eax
    636. jnz Exit ; user clicks "Cancel"
    637. inc count
    638.         mov     rcx,pBasicVideo
    639.         mov     rax,[rcx]
    640.         mov edx,offset pWidth
    641. invoke [rax].IBasicVideo.get_VideoWidth
    642. test eax,eax
    643. jnz Exit ; user clicks "Cancel"
    644. inc count
    645.         mov     rcx,pBasicVideo
    646.         mov     rax,[rcx]
    647.         mov edx,offset pHeight
    648. invoke [rax].IBasicVideo.get_VideoHeight
    649.         test eax,eax
    650. jnz Exit ; user clicks "Cancel"
    651. inc count
    652.         cmp pWidth,IMG_X
    653.         ja loc_need_resize
    654.         cmp pHeight,IMG_Y
    655.         jbe     loc_create_video
    656. loc_need_resize:; Пресчет размеров по горизонтали
    657.         mov     eax,pWidth;450
    658.         cmp     eax,pHeight;320
    659.         jb @f
    660.         mov     eax,pHeight;320
    661.         imul    eax,IMG_X;eax=332*320=106240=1D2E0h
    662.         xor     edx,edx
    663.         idiv    pWidth;1D2E0h/1C2h=109h
    664.         mov     pHeight,eax
    665.         mov     pWidth,IMG_X;14Ch
    666.         jmp     loc_create_video
    667. @@:     mov     eax,pWidth
    668.         imul    eax,IMG_Y
    669.         xor     edx,edx
    670.         idiv    pHeight
    671.         mov     pWidth,eax
    672.         mov     pHeight,IMG_Y
    673. loc_create_video:; Смещение по X
    674.         mov eax,IMG_X;14Ch
    675. sub eax,pWidth
    676. jns @f
    677. neg eax
    678. @@: shr eax,1;eax=0
    679. mov deltaX,eax
    680. ; Смещение по Y
    681. mov eax,IMG_Y;eax=0F8h
    682. sub eax,pHeight
    683. jns @f
    684. neg eax
    685. @@: shr eax,1
    686. mov deltaY,eax
    687. ; Установить стиль окна
    688.         mov     rcx,pVideoWindow
    689.         mov     rax,[rcx]
    690. mov edx,WS_CHILD or WS_CLIPSIBLINGS
    691. invoke [rax].IVideoWindowVtbl.put_WindowStyle
    692.         test eax,eax
    693. jnz Exit ;Unable to create GraphBuilder
    694. inc count
    695.         ; Установить размер области воспроизведения
    696. mov eax,pHeight
    697. mov [rsp+20h],rax
    698.         mov     rcx,pVideoWindow
    699.         mov     rax,[rcx]
    700.         mov r9d,pWidth
    701. mov r8d,deltaY
    702. mov edx,deltaX
    703.         call [rax].IVideoWindowVtbl.SetWindowPosition
    704.         test eax,eax
    705. jnz Exit ;Unable to create GraphBuilder
    706. inc count
    707.         ; Назначить окно для событий плеера
    708.         mov     rcx,pEvent
    709.         mov     rax,[rcx]
    710.         xor r9,r9
    711. mov r8d,WM_GRAPHNOTIFY
    712. mov rdx,hwnddlg
    713. invoke [rax].IMediaEventEx.SetNotifyWindow
    714.         test eax,eax
    715. jnz Exit ;Unable to create GraphBuilder
    716. inc count
    717.         ; Заблокировать окно воспроизведения
    718.         invoke  EnableWindow,temp,FALSE
    719.         ; Получить длительность медиафайла
    720.         mov     rcx,pMediaSeeking
    721.         mov     rax,[rcx]
    722.         mov edx,offset lDuration
    723. invoke [rax].IMediaSeeking.GetDuration
    724.         test eax,eax
    725. jnz Exit ;Unable to create GraphBuilder
    726. inc count
    727.         ; Пересчитать в секунды
    728. xor     edx,edx
    729.         mov     eax,dword ptr lDuration
    730.         shr eax,7
    731. mov ecx,78125;78125*128=10000000
    732. div ecx
    733. ;в eax секунды
    734. mov DurationInSec,eax
    735.         xor     edx,edx
    736.         mov     ecx,60*60
    737.         div     ecx
    738. mov r8d,eax;в r8 часы
    739. mov eax,edx;в edx секунды
    740. xor edx,edx
    741. ; Пересчитать в минуты и секунды
    742. mov ecx,60
    743. div ecx
    744. mov [rsp+20h],rdx;в edx секунды
    745. mov r9d,eax;в r9 минуты
    746. mov edx,offset mask0
    747. lea ecx,buff
    748. invoke wsprintf
    749. lea r8d,buff
    750. mov edx,ID_DTN
    751. mov rcx,hwnddlg
    752.         invoke  SetDlgItemText
    753.         mov r9d,DurationInSec
    754. imul r9d,10
    755. shl r9,16
    756. invoke SendMessage,hProgress,PBM_SETRANGE,0
    757. invoke SendMessage,hProgress,PBM_SETSTEP,1,0
    758. and nCurTrack,0
    759.         jmp     wmBYE
    760. wmSTOP:; Стоп
    761.         mov     rcx,pMediaControl
    762.         mov     rax,[rcx]
    763.         call [rax].IMediaControlVtbl.Stop
    764.         jmp     wmBYE
    765. wmCLOSE:; Прибраться за собой
    766.         mov     rcx,pEvent
    767.         mov     rax,[rcx]
    768.         invoke [rax].IMediaEventEx.SetNotifyWindow,,0,0,0
    769.         mov     rcx,pEvent
    770.         mov     rax,[rcx]
    771.         call [rax].IMediaEventEx.Release
    772.         mov     rcx,pBasicVideo
    773.         mov     rax,[rcx]
    774.         call [rax].IBasicVideo.Release
    775.         mov     rcx,pVideoWindow
    776.         mov     rax,[rcx]
    777.         call [rax].IVideoWindowVtbl.Release
    778.         mov     rcx,pMediaControl
    779.         mov     rax,[rcx]
    780.         call [rax].IMediaControlVtbl.Release
    781.         mov     rcx,pMediaSeeking
    782.         mov     rax,[rcx]
    783.         call [rax].IMediaSeeking.Release
    784.         mov     rcx,pGraphBuilder
    785.         mov     rax,[rcx]
    786.         call [rax].IGraphBuilderVtbl.Release
    787.         invoke  EndDialog,hwnddlg,0
    788. wmBYE: xor eax,eax
    789. leave
    790. retn
    791. DialogProc endp
    792. TimeProc proc uTimerID:QWORD,uMsg:QWORD,dwUser:QWORD,dw1:QWORD,dw2:QWORD
    793. local buff[Size_of_buffer]:byte
    794. ; Получить состояние воспроизведения
    795. mov r8d,offset pState
    796. xor edx,edx
    797.         mov rcx,pMediaControl
    798.         mov     rax,[rcx]
    799.         call [rax].IMediaControlVtbl.GetState
    800.         cmp     pState,State_Running
    801.         jne     exit_
    802.         ; Получить текущую позицию воспроизведения
    803.         mov     rcx,pMediaSeeking
    804.         mov     rax,[rcx]
    805. mov edx,offset lDuration
    806. mov r8d,offset pStop
    807. invoke [rax].IMediaSeeking.GetPositions
    808. ; Пересчитать в секунды
    809. xor     edx,edx
    810. mov eax,dword ptr lDuration
    811.         shr eax,7
    812.         mov     ecx,78125;78125*128=10000000
    813. div ecx
    814. ;в eax секунды
    815. xor edx,edx
    816. mov ecx,60*60
    817. div ecx
    818.         mov r8d,eax;в r8 часы
    819. mov eax,edx
    820. xor edx,edx
    821. ; Пересчитать в минуты и секунды
    822. mov ecx,60
    823. div ecx
    824. mov [rsp+20h],rdx;в edx секунды
    825. mov r9d,eax;в r9 минуты
    826. mov edx,offset mask0
    827. lea ecx,buff
    828.         invoke  wsprintf
    829. lea r8d,buff
    830. mov edx,ID_CUR
    831.         invoke  SetDlgItemText,hwndDlg
    832.         ; Увеличить счетчик по системному событию
    833.         inc     nCurTrack
    834. mov r8d,nCurTrack
    835. invoke SendMessage,hProgress, PBM_SETPOS, , 0
    836. exit_: leave
    837.         ret
    838. TimeProc endp
    839. .data?
    840. temp dq ?
    841. pGraphBuilder dq ?
    842. pMediaControl dq ?
    843. pVideoWindow dq ?
    844. pMediaSeeking dq ?
    845. pBasicVideo dq ?
    846. pEvent dq ?
    847. pWidth dd ?
    848. pHeight dd ?
    849. deltaX dd ?
    850. deltaY dd ?
    851. evCode dd ?
    852. param1 dd ?
    853. param2 dd ?
    854. lDuration dq ?
    855. pStop dq ? ; DATA XREF: DialogProc+303o
    856. pState dd ?
    857. hProgress dq ?
    858. hOpen dq ?
    859. hPlay dq ?
    860. hStop dq ?
    861. hPause dq ?
    862. DurationInSec dd ?
    863. hTimer dq ?
    864. nCurTrack dd ?
    865. hwndDlg dq ?
    866. NewPosition dd ?
    867. deviceEnumerator dq ?
    868. eRender         dq ?
    869. eConsole        dq ?
    870. defaultDevice dq ?
    871. endpointVolume dq ?
    872. bMute dd ?
    873. .data
    874. fLevel          dd 0.0
    875. const100 dd 100.0
    876. mask0 db '%.2u:%.2u:%.2u',0
    877. mask1 db '%d%%',0
    878. CLSID_FilterGraph GUID <0E436EBB3h,524Fh, 11CEh,{ 9Fh,53h,0,20h,0AFh,0Bh,0A7h,70h}>
    879. IID_IGraphBuilder GUID < 56A868A9h,0AD4h, 11CEh,{0B0h,3Ah,0,20h,0AFh,0Bh,0A7h,70h}>
    880. IID_IMediaControl GUID < 56A868B1h,0AD4h, 11CEh,{0B0h,3Ah,0,20h,0AFh,0Bh,0A7h,70h}>
    881. IID_IVideoWindow GUID < 56A868B4h,0AD4h, 11CEh,{0B0h,3Ah,0,20h,0AFh,0Bh,0A7h,70h}>
    882. IID_IMediaSeeking GUID < 36B73880h,0C2C8h,11CFh,{ 8Bh,46h,0,80h, 5Fh,6Ch,0EFh,60h}>
    883. IID_IMediaEventEx GUID < 56A868C0h,0AD4h, 11CEh,{0B0h,3Ah,0,20h,0AFh,0Bh,0A7h,70h}>
    884. IID_IBasicVideo GUID < 56A868B5h,0AD4h, 11CEh,{0B0h,3Ah,0,20h,0AFh,0Bh,0A7h,70h}>
    885. ; GUID {BCDE0395-E52F-467C-8E3D-C4579291692E}
    886. CLSID_MMDeviceEnumerator GUID <0BCDE0395h,0E52Fh,467Ch,{ 8Eh,3Dh,0C4h,57h,92h,91h,69h,2Eh}>
    887. ; GUID {A95664D2-9614-4F35-A746-DE8DB63617E6}
    888. IID_IMMDeviceEnumerator  GUID <0A95664D2h, 9614h,4F35h,{0A7h,46h,0DEh,8Dh,0B6h,36h,17h,0E6h}>
    889. ; GUID {5CDF2C82-841E-4546-9722-0CF74078229A}
    890. IID_IAudioEndpointVolume GUID < 5CDF2C82h, 841Eh,4546h,{ 97h,22h, 0Ch,0F7h,40h,78h,22h,9Ah}>
    891. Filter db "Video files *.avi; *.qt; *.mov; *.mpg; *.mpeg; *.m1v; *.vob",0
    892.                 db "*.wmv, *.flv, *.mp4",0,0
    893. ofn label OPENFILENAME
    894.        lStructSize dd sizeof OPENFILENAME,0
    895.        hwndOwner dq 0
    896.        hInstance dq IMAGE_BASE
    897.        lpstrFilter dq 0
    898.        lpstrCustomFilter dq 0
    899.        nMaxCustFilter dd 0
    900.        nFilterIndex dd 0
    901.        lpstrFile dq 0
    902.        nMaxFile dd Size_of_buffer,0
    903.        lpstrFileTitle dq 0
    904.        nMaxFileTitle dd 0,0
    905.        lpstrInitialDir dq 0
    906.        lpstrTitle dq 0
    907.        Flags dd OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
    908.        nFileOffset dw 0
    909.        nFileExtension dw 0
    910.        lpstrDefExt dq 0
    911.        lCustData dq 0
    912.        lpfnHook dq 0
    913.        lpTemplateName dq 0
    914. count dd 0
    915. AboutMsg db 'Mikl__ 2024',0
    916. ;-------------------------------------
    917. mb label   MSGBOXPARAMS
    918.   dd sizeof MSGBOXPARAMS,?;cbSize
    919.   dq 0  ;hwndOwner
    920.   dq IMAGE_BASE  ;hInstance
    921.   dq ? ;lpszText
    922.   dq 0  ;lpszCaption
    923.   dd MB_OK or MB_USERICON,?;dwStyle
    924.   dq IDC_ICON1  ;lpszIcon
    925.   dd 0,?;dwContextHelpId
    926.   dq 0  ;lpfnMsgBoxCallback
    927.   dd 0,?;dwLanguageId
    928. zero db '0',0
    929. one db 'Unable to create GraphBuilder',0
    930. two db 'Unable to get interface IMediaControl',0
    931. tree db 'Unable to get interface VideoWindow',0
    932. four db 'Unable to get interface MediaSeeking',0
    933. five db 'Unable to get interface Event',0
    934. six db 'Unable to get interface BasicVideo',0
    935. seven db 'Do not select any media files!',0
    936. eight db 'Unable to open the video file',0
    937. nine db '9',0
    938. ten db '10',0
    939. eleven db '11',0
    940. twelve db '12',0
    941. thirteen db '13',0
    942. fourteen db '14',0
    943. fifteen db '15',0
    944. sixteen db 'Bye-bye!',0
    945. seventeen db '17',0
    946. eightteen db '18',0
    947. nineteen db '19',0
    948. hande dq zero,one,two,tree,four,five,six,seven,eight,nine, ten, eleven, twelve, thirteen
    949. dq fourteen,fifteen,sixteen,seventeen,eightteen,nineteen
    950. ClassName db "Uncle Remus tales #37k: Player Demo",0
    951. end
    Плеер до конца не доделан, поэтому предлагаю его коллективно усовершенствовать. Буду рад любым предложениям :friends:
     
    Research нравится это.
  7. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    Mikl___, интересно, у масма есть макросы comcall/cominvk?
    Например в fasm'e com-интерфейсы можно объявлять так, в результате чего получаем общие структуры для х32/64, поскольку размеры указателей на методы явно не определены. Да и сам вызов становится удобней (в одной строке, как обычный invoke):

    Код (Text):
    1. interface IMediaSeeking
    2.     QueryInterface,\
    3.     AddRef,\
    4.     Release,\
    5.     GetCapabilities,\
    6.     CheckCapabilities,\
    7.     IsFormatSupported,\
    8.     QueryPreferredFormat,\
    9.     GetTimeFormat,\
    10.     IsUsingTimeFormat,\
    11.     SetTimeFormat,\
    12.     GetDuration,\
    13.     GetStopPosition,\
    14.     GetCurrentPosition,\
    15.     ConvertTimeFormat,\
    16.     SetPositions,\
    17.     GetPositions,\
    18.     GetAvailable,\
    19.     SetRate,\
    20.     GetRate,\
    21.     GetPreroll
     
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Marylin,
    размер указателей в masm64 ― QWORD. Здесь же, хорошо развитая система макросов (правда я ей давно не пользуюсь :don-t_mention:) и comcall/cominvk с общими структурами для х32/64 можно написать под masm64 самому (по-моему готовых нет, но это не точно :))
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792

    Вложения:

    • tut_37k.zip
      Размер файла:
      18,9 КБ
      Просмотров:
      132
    Semiono, Marylin и Research нравится это.
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792

    Глава пятьдесят третья.
    Видео-плеер Братца Кролика (версия #3)


    Очередная недоделанная версия. Перед открытием и запуском видео-файла установите размер изображения (нормальный, половинный, удвоенный или полноэкранный) и скорость воспроизведения (Playback Rate). Во вложении asm-/rc-/ico-/exe-файлы.
     

    Вложения:

    • 05.jpg
      05.jpg
      Размер файла:
      70,7 КБ
      Просмотров:
      295
    • tut_37k.zip
      Размер файла:
      21,7 КБ
      Просмотров:
      126
    Marylin нравится это.
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Ну, и как вам видео-плеер? Наполнять все пункты заявленные в меню долго, но постараюсь...
     
  12. CaptainObvious

    CaptainObvious Member

    Публикаций:
    1
    Регистрация:
    18 янв 2024
    Сообщения:
    87
    Mikl___,
    Мир опустел… Земля остыла…
    А вьюга трупы замела,
    И ветром звёзды загасила,
    И бьёт во тьме в колокола

    [​IMG]

    Картинки скачивают чаще чем исходники, даже кэп не в силах это обьяснить
     
    Последнее редактирование: 8 июн 2024
    Mikl___ нравится это.
  13. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    Mikl___, нормально всё идёт.
    Главное взять старт и создать скелет,
    а всевозможного рода украшательства фейса можно потом напильником подточить.
    Потихоньку оденешь какой-нибудь скин на основное окно, и будет всё тип-топ.
     
    Mikl___ нравится это.
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Кап, картинка считается скаченной если просто открываешь страницу, на которой эта картинка расположена. А вот вложение скачивается осознано.
    Тимур-ука, спасибо на добром слове :thank_you2:катта рахмат!
     
  15. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    Mikl___
    рассинхрон между менюшками и кнопами в окошке
    запуск tut_37k\tut_37k.exe
    меню - Play -> Play - чет-то играет, ползунок бежит вперед, а что оно играет??? видиво то нету еще

    PS после такого мифического Play
    по кнопке Exit - крашиться и даже какой-то MessageBox ругается (не успеваю прочитать, прячется автоматом)

    Unhandled exception at 0x0000000000401729 (tut_37k.exe) in WER7026.tmp.mdmp: 0xC0000005: Access violation reading location 0x0000000004E84020.
    --- Сообщение объединено, 8 июн 2024 ---
    Playback rate как-то странно работает
    пару сек пашет что заказал, а потом фоллбек к 1.00 x
     
    Mikl___ нравится это.