webcam32.lib [masm]

Тема в разделе "WASM.HEAP", создана пользователем M0rg0t, 17 окт 2018.

Метки:
  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Вот со старого васма сохранился сорц. Автор некто t1park . Вроде не выкладывали этот сорц? Дальше текст автора, копипаст оригинальной темы.

    Давно хотелось иметь простой и быстрый инструмент для работы с вебкамерой на масме, но ничего подобного к сожалению небыло создано. Вот решил исправить проблему.
    Вот описание функций моей библиотеки:
    Код (ASM):
    1.  
    2.  
    3. InitLib proto
    4.     ;Инициализирует библиотеку, вызывается в начале работы с библиотекой
    5.  
    6.  
    7. UninitLib proto
    8.     ;Вызывается в завершении работы
    9.  
    10.  
    11. CreateVideoWindow proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
    12.     ;Создаёт окно
    13.     ;Параметры:
    14.     ;[in]номер привязанной камеры (1,2,...)
    15.     ;[in]заголовок
    16.     ;[in]WS_
    17.     ;[in]X верхнего левого угла
    18.     ;[in]Y тогоже
    19.     ;[in]ширина
    20.     ;[in]высота
    21.     ;[in]идентификатор окна владельца
    22.     ;[in]Instance
    23.     ;Возвращает идентификатор, если камера не найдена окно не создаётся и eax=0
    24.  
    25.  
    26. StartVideo proto :DWORD
    27.     ;Вывод видео.
    28.     ;Параметр:
    29.     ;[in]идентификатор окна
    30.     ;Возвращает: 1- если успешно выполнена, 0- камера потеряна или занята.
    31.  
    32.  
    33. StopVideo proto :DWORD
    34.     ;Останавливает вывод.
    35.     ;Параметр:
    36.     ;[in]идентификатор окна
    37.  
    38.  
    39. dWebCam proto :DWORD
    40.     ;Диалог управления камерой.
    41.     ;Параметр:
    42.     ;[in]идентификатор окна
    43.  
    44.  
    45. GetWebCamName proto :DWORD
    46.     ;Перечисляет имена камер.
    47.     ;Параметр:
    48.     ;[out]буфер ,1024 байт
    49.     ;Возвращает номер камеры.
    50.     ;Вызывается в цикле, пока  eax!=0
    51.  
    52.  
    53. PhotoSave proto :DWORD, :DWORD
    54.     ;Сохраняет фотографию(bmp).
    55.     ;Параметры:
    56.     ;[in]идентификатор окна
    57.     ;[in]указатель на имя. Если имя не содержит путь, то используется путь программы.
    58.     ;Если ошибка, eax=0
    59.  
    60.  
    61. GetBuffer proto :DWORD, :DWORD
    62.     ;Возвращает указатель на буфер с кадром.
    63.     ;Параметры:
    64.     ;[in]идентификатор окна
    65.     ;[out]указатель на структуру BITMAPINFOHEADER
    66.     ;Если ошибка, eax=0
    67.  
    68.  
    69. GetVWInfo proto :DWORD
    70.     ;Возвращает указатель на структуру содержащую информацию об окне.
    71.     ;Параметр:
    72.     ;[in]идентификатор окна
    73.     ;Структура:
    74.     ;(dd)состояние 1-Stop\2-Start ,
    75.     ;(dd)номер камеры ,
    76.     ;(dd)максимальная ширина
    77.     ;(dd)и высота видеокадра
    78.  
    79.  
    80. GetTime proto :DWORD
    81.     ;Возвращает указатель на строчку.
    82.     ;Параметр:
    83.     ;[in]указатель на присоединяемое расширение
    84.  
    85.  
    86. comment * --------------------------------------------------------------------------------------------------------
    87. Все функции, которым передаётся недействительный идентификатор окна, вернут eax=-2
    88.  
    89. Возвращаемый функцией CreateVideoWindow идентификатор можно
    90. использовать некоторыми стандартными WinAPI функциями, такими как:
    91. DestroyWindow, MoveWindow, ShowWindow...
    92.  
    93. Созданное окно посылает родительскому окну сообщения от клавиатуры и мыши,
    94. через сообщение VWM_COMMAND (WM_USER + 160). wParam содержит идентификатор окна,
    95. lParam - указатель на структуру:
    96. (dd)vw_uMsg
    97. (dd)vw_wParam
    98. (dd)vw_lParam
    99. ---------------------------------------------------------------------------------------------------------------------
    Библиотека поддерживает одновременную работу с несколькими окнами
    (следует учитывать особенность directshow транслировать видео с одной камеры только в одно окно)

    В этой версии стабильная работа возможна лиш с статичным составом камер, поэтому при
    подключении\отключении следует тестовую программу перезапускать
    --------------------------------------------------------------------------------------------------------------------- *
    А это демка:
    Код (ASM):
    1.  
    2. .486
    3. .model flat,stdcall
    4. option casemap:none
    5.       include \masm32\include\Gdi32.inc
    6.       include \masm32\include\windows.inc
    7.       include \masm32\include\masm32.inc
    8.       include \masm32\include\user32.inc
    9.       include \masm32\include\kernel32.inc
    10.       include \masm32\include\Comctl32.inc
    11.       include \masm32\include\comdlg32.inc
    12.       include \masm32\include\shell32.inc
    13.       include \masm32\include\dialogs.inc
    14.       include \masm32\include\advapi32.inc
    15.       include \masm32\macros\macros.asm
    16.       include \masm32\include\ole32.inc
    17.       include \masm32\include\oleaut32.inc
    18.       include \masm32\include\winmm.inc
    19.  
    20.       includelib \masm32\lib\winmm.lib
    21.       includelib \masm32\lib\ole32.lib
    22.       includelib \masm32\lib\oleaut32.lib
    23.       includelib \masm32\lib\Gdi32.lib
    24.       includelib \masm32\lib\masm32.lib
    25.       includelib \masm32\lib\user32.lib
    26.       includelib \masm32\lib\kernel32.lib
    27.       includelib \masm32\lib\Comctl32.lib
    28.       includelib \masm32\lib\comdlg32.lib
    29.       includelib \masm32\lib\shell32.lib
    30.       includelib \masm32\lib\advapi32.lib
    31.    
    32. ;-----------------------------
    33.    includelib webcam32.lib
    34.    include webcam32.inc
    35. ;-----------------------------
    36.  
    37. WinMain proto :DWORD, :DWORD, :DWORD, :DWORD
    38. alig_window proto :DWORD, :DWORD, :DWORD, :DWORD
    39.  
    40. .const
    41.     VWM_COMMAND equ WM_USER + 160
    42.  
    43. .data
    44.     stepvw dd 5
    45.     align dword
    46.     ClassName db "Test_Video_Window",0
    47.     ClassNameP db "E_WEBCAM",0
    48.     listbox db "listbox",0
    49.  
    50. .data?
    51.     hInstance dd ?
    52.     CommandLine dd ?
    53.     hWin dd ?
    54.     hmenu dd ?
    55.  
    56.     focus_hwnd dd ?
    57.     listbox_hwnd dd ?
    58.     buffer db 1024 dup(?)
    59.  
    60.     poin POINT <>
    61.     rct RECT <>
    62.     wc WNDCLASSEX <>
    63.     iccex INITCOMMONCONTROLSEX <>
    64.     seci SHELLEXECUTEINFO <>
    65.     bmpinf BITMAPINFOHEADER <>
    66.  
    67. .code
    68.  
    69. start:
    70. invoke GetCommandLine
    71. mov CommandLine, eax
    72. invoke GetModuleHandle, 0
    73. mov hInstance, eax
    74. mov iccex.dwSize, sizeof INITCOMMONCONTROLSEX
    75. mov iccex.dwICC, ICC_WIN95_CLASSES
    76. invoke InitCommonControlsEx, addr iccex
    77. invoke WinMain, hInstance, 0, CommandLine, SW_SHOWDEFAULT
    78. invoke ExitProcess, eax
    79. ;#################################################################################
    80. WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
    81. LOCAL msg:MSG
    82.     mov wc.cbSize, sizeof WNDCLASSEX
    83.     mov wc.style, CS_HREDRAW or CS_VREDRAW
    84.     mov wc.lpfnWndProc, offset WndProc
    85.     mov wc.cbClsExtra, 0
    86.     mov wc.cbWndExtra, 0
    87.     mrm wc.hInstance, hInstance
    88.     invoke LoadIcon, hInstance, 1101
    89.     mov wc.hIcon, eax
    90.     mov wc.hIconSm, eax
    91.     invoke LoadCursor, 0, IDC_ARROW
    92.     mov wc.hCursor, eax
    93.     mov wc.hbrBackground, COLOR_BTNFACE+1
    94.     mov wc.lpszMenuName, 0
    95.     mov wc.lpszClassName, offset ClassName
    96.     invoke RegisterClassEx, addr wc
    97.     invoke CreateWindowEx, 0, addr ClassName, SADD("webcam32.lib test"), WS_OVERLAPPEDWINDOW or WS_CLIPCHILDREN, 0, 0, 950, 550, 0, 0, hInst, 0
    98.     mov hWin, eax
    99.     invoke alig_window, eax, 950, 550, SW_SHOWMAXIMIZED
    100.     invoke UpdateWindow, eax
    101.     .WHILE TRUE
    102.         invoke GetMessage, addr msg, 0, 0, 0
    103.     .BREAK .IF (!eax)
    104.         invoke TranslateMessage, addr msg
    105.         invoke DispatchMessage, addr msg
    106.     .ENDW
    107.     mov eax, msg.wParam
    108. ret
    109. WinMain endp
    110. ;#################################################################################
    111. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    112. LOCAL buff:DWORD
    113. LOCAL hdc:DWORD
    114. LOCAL hdc1:DWORD
    115. LOCAL bmap:DWORD
    116. .IF uMsg== WM_CREATE
    117.     invoke InitLib
    118.     invoke CreatePopupMenu
    119.     mov hmenu, eax
    120.     invoke AppendMenu, hmenu, MF_STRING, 3001, SADD("Старт")
    121.     invoke AppendMenu, hmenu, MF_STRING, 3002, SADD("Стоп")
    122.     invoke AppendMenu, hmenu, MF_SEPARATOR, 0, 0
    123.     invoke AppendMenu, hmenu, MF_STRING, 3005, SADD("Фотография")
    124.     invoke AppendMenu, hmenu, MF_STRING, 3006, SADD("GetBuffer")
    125.     invoke AppendMenu, hmenu, MF_SEPARATOR, 0, 0
    126.     invoke AppendMenu, hmenu, MF_STRING, 3004, SADD("Настройка")
    127.     invoke AppendMenu, hmenu, MF_STRING, 3007, SADD("Цвет окна")
    128.  
    129.     mov wc.cbSize, SIZEOF WNDCLASSEX
    130.     mov wc.style, CS_HREDRAW or CS_VREDRAW or CS_NOCLOSE
    131.     mov wc.lpfnWndProc, OFFSET WndProcP
    132.     mov wc.hIcon, 0
    133.     mov wc.hIconSm, 0
    134.     mov wc.lpszClassName, OFFSET ClassNameP
    135.     invoke RegisterClassEx, addr wc
    136.     invoke CreateWindowEx, 0, addr ClassNameP, SADD("Список камер:"), WS_CAPTION or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_THICKFRAME, 0, 0, 250, 250, hWnd, 0, hInstance, 0
    137.     invoke alig_window, eax, 250, 250, SW_SHOW
    138. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\обработка сообщений
    139. .ELSEIF uMsg== VWM_COMMAND
    140.     mov eax, lParam
    141.     mov ebx, dword ptr[eax]
    142.     .IF ebx== WM_RBUTTONDOWN        ;меню
    143.         mrm focus_hwnd, wParam
    144.         invoke GetCursorPos, addr poin
    145.         invoke TrackPopupMenu, hmenu, 0, poin.x, poin.y, 0, hWnd, 0
    146.     .ENDIF
    147. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    148. .ELSEIF uMsg== WM_COMMAND
    149.     mov eax, wParam
    150.     ror eax, 16
    151.     .IF ax== BN_CLICKED
    152.         ror eax, 16
    153.         .IF ax== 3001                                  ;старт
    154.             invoke StartVideo, focus_hwnd
    155.             .IF eax== 0
    156.                 invoke MessageBox, hWnd, SADD("Камера занята или отключена!"), SADD("Информация"), MB_OK
    157.             .ENDIF
    158.         .ELSEIF ax== 3002                           ;стоп
    159.             invoke StopVideo, focus_hwnd
    160.         .ELSEIF ax== 3004                           ;настройка камеры
    161.             invoke dWebCam, focus_hwnd
    162.         .ELSEIF ax== 3005                           ;фотография
    163.             invoke GetTime, SADD("bmp")
    164.             mov bmap, eax
    165.             invoke PhotoSave, focus_hwnd, eax
    166.             .IF eax!= 0
    167.                 invoke PlaySound, 1100, 0, SND_RESOURCE or SND_ASYNC
    168.                 mov seci.cbSize, sizeof SHELLEXECUTEINFO
    169.                 mrm seci.lpFile, bmap
    170.                 mov seci.fMask, SEE_MASK_NOCLOSEPROCESS
    171.                 mov seci.nShow, SW_SHOWMAXIMIZED
    172.                 invoke ShellExecuteEx, addr seci
    173.             .ENDIF
    174.         .ELSEIF ax== 3006                           ;кадр выводится в окно
    175.             invoke GetBuffer, focus_hwnd, addr bmpinf
    176.             .IF eax!= 0
    177.                 mov buff, eax
    178.                 invoke CreateCompatibleDC, 0
    179.                 mov hdc1, eax
    180.                 invoke CreateDIBSection, hdc1, addr bmpinf, 0, 0, 0, 0
    181.                 mov bmap, eax
    182.                 invoke SelectObject, hdc1, bmap
    183.                 invoke GetDC, hWnd
    184.                 mov hdc, eax
    185.                 invoke SetDIBits, hdc1, bmap, 0, bmpinf.biHeight, buff, addr bmpinf, 0
    186.                 invoke GetClientRect, hWnd, addr rct
    187.                 invoke StretchBlt, hdc, 0, 0, rct.right, rct.bottom, hdc1, 0, 0, bmpinf.biWidth, bmpinf.biHeight, SRCCOPY
    188.                 invoke DeleteDC, hdc
    189.                 invoke DeleteDC, hdc1
    190.                 invoke DeleteObject, bmap
    191.             .ENDIF
    192.         .ELSEIF ax== 3007                           ;цвет фона
    193.             invoke ColorDialog, focus_hwnd, 0, 0
    194.             invoke CreateSolidBrush, eax
    195.             invoke SetClassLong, focus_hwnd, GCL_HBRBACKGROUND, eax
    196.             invoke GetClientRect, focus_hwnd, addr rct
    197.             invoke InvalidateRect, focus_hwnd, addr rct, 1
    198.         .ENDIF
    199.     .ENDIF
    200.  
    201. .ELSEIF uMsg== WM_CLOSE || uMsg== WM_DESTROY
    202.     invoke UninitLib
    203.     invoke PostQuitMessage, 0
    204. .ELSE
    205.     invoke DefWindowProc, hWnd, uMsg, wParam, lParam
    206.     ret
    207. .ENDIF
    208. return 0
    209. WndProc endp
    210. ;#################################################################################
    211. WndProcP proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    212. LOCAL i_str:DWORD
    213. .IF uMsg== WM_CREATE
    214.     invoke RetFontHandle, SADD("Verdana"), 20, 0
    215.     mov i_str, eax
    216.     invoke CreateWindowEx, WS_EX_CLIENTEDGE, addr listbox, 0, WS_CHILD or WS_VISIBLE or WS_VSCROLL or LBS_HASSTRINGS or LBS_NOINTEGRALHEIGHT or LBS_DISABLENOSCROLL or LBS_MULTIPLESEL or LBS_NOTIFY, 0, 0, 0, 0, hWnd, 3030, hInstance, 0
    217.     mov listbox_hwnd, eax
    218.     invoke SendMessage, listbox_hwnd, WM_SETFONT, i_str, 01h
    219.     mov i_str, 0
    220.     create_vw:
    221.     invoke GetWebCamName, addr buffer
    222.     .IF eax== 0
    223.         jmp end_create_vw
    224.     .ENDIF
    225.     mov i_str, eax
    226.     invoke  SendMessage, listbox_hwnd, LB_ADDSTRING, 0, addr buffer
    227.     jmp create_vw
    228.     end_create_vw:
    229.     .IF i_str== 0
    230.         invoke SetWindowText, hWnd, SADD("Нет камер")
    231.         invoke EnableWindow, hWnd, 0
    232.     .ENDIF
    233. .ELSEIF uMsg== WM_COMMAND
    234.     mov eax, wParam
    235.     .IF ax== 3030
    236.         ror eax, 16
    237.         .IF ax== LBN_SELCHANGE
    238.             invoke SendMessage, listbox_hwnd, LB_GETLISTBOXINFO, 0, 0
    239.             mov i_str, eax
    240.                 list_c:
    241.                 cmp i_str, -1
    242.                 je list_e
    243.                 invoke SendMessage, listbox_hwnd, LB_GETSEL, i_str, 0
    244.                 .IF eax== 1
    245.                     invoke SendMessage, listbox_hwnd, LB_GETITEMDATA, i_str, 0
    246.                     .IF eax== 0
    247.                         invoke SendMessage, listbox_hwnd, LB_GETTEXT, i_str, addr buffer
    248.                         mov ebx, i_str
    249.                         inc ebx
    250.                         invoke CreateVideoWindow, ebx, addr buffer, WS_CHILD or WS_VISIBLE or WS_CLIPSIBLINGS or WS_THICKFRAME or WS_CAPTION, stepvw, stepvw, 250, 220, hWin, hInstance
    251.                         .IF eax== 0
    252.                             invoke SendMessage, listbox_hwnd, LB_SETSEL, i_str, 0
    253.                             invoke SendMessage, listbox_hwnd, LB_SETITEMDATA, i_str, 0
    254.                         .ELSE
    255.                             invoke SendMessage, listbox_hwnd, LB_SETITEMDATA, i_str, eax
    256.                             add stepvw, 10
    257.                         .ENDIF
    258.                     .ENDIF
    259.                 .ELSEIF eax== 0
    260.                     invoke SendMessage, listbox_hwnd, LB_GETITEMDATA, i_str, 0
    261.                     .IF eax> 0
    262.                         invoke DestroyWindow, eax
    263.                         invoke SendMessage, listbox_hwnd, LB_SETITEMDATA, i_str, 0
    264.                     .ENDIF
    265.                 .ENDIF
    266.                 dec i_str
    267.                 jmp list_c
    268.                 list_e:
    269.         .ENDIF
    270.     .ENDIF
    271. .ELSEIF uMsg== WM_SIZE
    272.     invoke GetClientRect, hWnd, addr rct
    273.     invoke MoveWindow, listbox_hwnd, 0, 0, rct.right, rct.bottom, 1
    274. .ELSE
    275.     invoke DefWindowProc, hWnd, uMsg, wParam, lParam
    276.     ret
    277. .ENDIF
    278. return 0
    279. WndProcP endp
    280. ;#################################################################################
    281. alig_window proc hwind:DWORD, vol1:DWORD, vol2:DWORD, show:DWORD
    282. LOCAL poi:POINT
    283.     invoke GetSystemMetrics, SM_CXSCREEN
    284.     mov poi.x, eax
    285.     shr poi.x, 01h
    286.     mov eax, vol1
    287.     shr eax, 01h
    288.     sub poi.x ,eax
    289.     invoke GetSystemMetrics, SM_CYSCREEN
    290.     mov poi.y, eax
    291.     shr poi.y, 01h
    292.     mov eax, vol2
    293.     shr eax, 01h
    294.     sub poi.y ,eax
    295.     invoke MoveWindow, hwind, poi.x, poi.y, vol1, vol2, 1
    296.     invoke ShowWindow, hwind, show
    297.     mov eax, hwind
    298. ret
    299. alig_window endp
    300. ;#################################################################################
    301. end start
     
    Research нравится это.
  2. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    webcam32.lib:
    Код (ASM):
    1.  
    2.  
    3. .486
    4. .model flat, stdcall
    5. option casemap :none
    6.     include \masm32\include\windows.inc
    7.     include \masm32\include\gdi32.inc
    8.     include \masm32\include\user32.inc
    9.     include \masm32\include\kernel32.inc
    10.     include \masm32\include\ole32.inc
    11.     include \masm32\include\oleaut32.inc
    12.     include \masm32\include\masm32.inc
    13.     includelib \masm32\lib\masm32.lib
    14.     include \masm32\macros\macros.asm
    15.  
    16. .const
    17.     WM_GRAPHNOTIFY equ WM_USER + 161
    18.  
    19. .data
    20.     include directshow.inc
    21.     InfoStr db 42h,4Dh,36h,20h,1Ch,0,0,0,0,0,36h,0,0,0
    22.     num dd 0
    23.     maxdev dd 0
    24.  
    25. .data?
    26.     h_buf dd ?
    27.     ClassEnum dd ?
    28.     DevEnum dd ?
    29.  
    30.     AM_MEDIA_TYPE STRUCT
    31.         majortype GUID <>
    32.         subtype GUID <>
    33.         bFixedSizeSamples dd ?
    34.         bTemporalCompression dd ?
    35.         lSampleSize dd ?
    36.         formattype GUID <>
    37.         pUnk dd ?
    38.         cbFormat dd ?
    39.         pbFormat dd ?
    40.     AM_MEDIA_TYPE ENDS
    41.     amt AM_MEDIA_TYPE <>
    42.  
    43.     CAUUID STRUCT
    44.         cElems dd ?
    45.         pElems dd ?
    46.     CAUUID ENDS
    47.     cauuid CAUUID <>
    48.  
    49.     VARIANT STRUCT
    50.         vt dw ?
    51.         wReserved1 dw ?
    52.         wReserved2 dw ?
    53.         wReserved3 dw ?
    54.         parray dd ?
    55.         xyz dd ?
    56.     VARIANT ENDS
    57.     vt VARIANT <>
    58.  
    59.     rct_1 RECT <>
    60.     rct_2 RECT <>
    61.     bmpinf BITMAPINFOHEADER <>
    62.  
    63.     VWInfoBuffer db 32 dup (?)
    64.     TimeBuffer db 512 dup (?)
    65.     wcBuffer db 1024 dup (?)
    66.  
    67. .code
    68. ;#####################################################################
    69. CreateVideoWindow proc WebCamNum:DWORD, wvName:DWORD, wvwc:DWORD, wvs_vol:DWORD, wvx:DWORD, wvy:DWORD, wvw:DWORD, wvh:DWORD, hParent:DWORD, n_rend:DWORD
    70. LOCAL hVWindow:DWORD
    71. LOCAL GrabberF:DWORD
    72. LOCAL Grabber:DWORD
    73. LOCAL NulleG:DWORD
    74. LOCAL Graph:DWORD
    75. LOCAL Builder:DWORD
    76. LOCAL VidWin:DWORD
    77. LOCAL ControlVideo:DWORD
    78. LOCAL MedVed:DWORD
    79. LOCAL Src:DWORD
    80. LOCAL Fetched:DWORD
    81. LOCAL Moniker:DWORD
    82. LOCAL ClassEnum1:DWORD
    83. LOCAL DevEnum1:DWORD
    84. LOCAL wc:WNDCLASSEX
    85. LOCAL numstr[8]:BYTE
    86. LOCAL buffer[1024]:BYTE
    87. LOCAL buffer1[1024]:BYTE
    88.     invoke CoCreateInstance, addr CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, addr IID_IGraphBuilder, addr Graph
    89.         cmp eax, 0
    90.         jne error_cvw
    91.      
    92.     invoke CoCreateInstance, addr CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER, addr IID_ICaptureGraphBuilder2, addr Builder
    93.         cmp eax, 0
    94.         jne error_cvw
    95.      
    96.     mov eax, Builder
    97.     mov ebx, [eax]
    98.     invoke (ICaptureGraphBuilder2 PTR [ebx]).SetFiltergraph, Builder, Graph
    99.         cmp eax, 0
    100.         jne error_cvw
    101.  
    102.     invoke CoCreateInstance, addr CLSID_SystemDeviceEnum, 0, CLSCTX_INPROC_SERVER, addr IID_ICreateDevEnum, addr DevEnum1
    103.         cmp eax, 0
    104.         jne error_cvw
    105.      
    106.     mov eax, DevEnum1
    107.     mov ebx, [eax]
    108.     invoke (ICreateDevEnum PTR [ebx]).CreateClassEnumerator, DevEnum1, addr CLSID_VideoInputDeviceCategory, addr ClassEnum1, 0
    109.         cmp eax, 0
    110.         jne error_cvw
    111.      
    112.     mov eax, ClassEnum1
    113.     mov ebx, [eax]
    114.     invoke (IEnumMoniker PTR [ebx]).Reset, ClassEnum1
    115.         cmp eax, 0
    116.         jne error_cvw
    117.      
    118.     dec WebCamNum
    119.     invoke (IEnumMoniker PTR [ebx]).Skip, ClassEnum1, WebCamNum
    120.     invoke (IEnumMoniker PTR [ebx]).Next, ClassEnum1, 1, addr Moniker, addr Fetched
    121.         cmp eax, 0
    122.         jne error_cvw
    123.         cmp Fetched, 1
    124.         jne error_cvw
    125.      
    126.     mov eax, Moniker
    127.     mov ebx, [eax]
    128.     invoke (IMoniker PTR [ebx]).BindToObject, Moniker, 0, 0, addr IID_IBaseFilter, addr Src
    129.         cmp eax, 0
    130.         jne error_cvw
    131.      
    132.     invoke (IEnumMoniker PTR [ebx]).Release, Moniker
    133.     mov eax, ClassEnum1
    134.     mov ebx, [eax]
    135.     invoke (ICreateDevEnum PTR [ebx]).Release, ClassEnum1
    136.     mov eax, DevEnum1
    137.     mov ebx, [eax]
    138.     invoke (ICreateDevEnum PTR [ebx]).Release, DevEnum1
    139.  
    140.     mov buffer[0], 0
    141.     invoke szMultiCat, 2, addr buffer, SADD("Videocamera_"), addr numstr
    142.     invoke MultiByteToWideChar, CP_ACP, 0, addr buffer, -1, addr buffer1, MAX_PATH
    143.     mov eax, Graph
    144.     mov ebx, [eax]
    145.     invoke (IGraphBuilder PTR [ebx]).AddFilter, Graph, Src, addr buffer1
    146.         cmp eax, 0
    147.         jne error_cvw
    148.  
    149.     mov eax, Graph
    150.     mov ebx, [eax]
    151.     invoke (IGraphBuilder PTR [ebx]).QueryInterface, Graph, addr IID_IVideoWindow, addr VidWin
    152.         cmp eax, 0
    153.         jne error_cvw
    154.      
    155.     mov eax, Graph
    156.     mov ebx,[eax]
    157.     invoke (IGraphBuilder PTR [ebx]).QueryInterface, Graph, addr IID_IMediaControl, addr ControlVideo
    158.         cmp eax, 0
    159.         jne error_cvw
    160.  
    161.     mov eax, Graph
    162.     mov ebx,[eax]
    163.     invoke (IGraphBuilder PTR [ebx]).QueryInterface, Graph, addr IID_IMediaEventEx, addr MedVed
    164.         cmp eax, 0
    165.         jne error_cvw
    166.  
    167.     invoke CoCreateInstance, addr CLSID_SampleGrabber, 0, CLSCTX_INPROC_SERVER, addr IID_IBaseFilter, addr GrabberF
    168.     mov eax, Graph
    169.     mov ebx, [eax]
    170.     invoke (IGraphBuilder PTR [ebx]).AddFilter, Graph, GrabberF, SADD("Sample_Grabber")
    171.  
    172.     .IF n_rend== 1
    173.         invoke CoCreateInstance, addr CLSID_NullRenderer, 0, CLSCTX_INPROC_SERVER, addr IID_IBaseFilter, addr NulleG
    174.         mov eax, Graph
    175.         mov ebx, [eax]
    176.         invoke (IGraphBuilder PTR [ebx]).AddFilter, Graph, NulleG, SADD("Null_Renderer")
    177.     .ELSE
    178.         mov NulleG, 0
    179.     .ENDIF
    180.  
    181.     mov eax, GrabberF
    182.     mov ebx, [eax]
    183.     invoke (IGraphBuilder PTR [ebx]).QueryInterface, GrabberF, addr IID_ISampleGrabber, addr Grabber
    184.     lea esi, MEDIATYPE_Video
    185.     lea edi, amt.majortype
    186.     mov ecx, 4
    187.     rep movsd
    188.     lea esi, MEDIASUBTYPE_RGB24
    189.     lea edi, amt.subtype
    190.     mov ecx, 4
    191.     rep movsd
    192.     lea esi, FORMAT_VideoInfo
    193.     lea edi, amt.formattype
    194.     mov ecx, 4
    195.     rep movsd
    196.     mov eax, Grabber
    197.     mov ebx, [eax]
    198.     invoke (ISampleGrabber PTR [ebx]).SetMediaType, Grabber, addr amt
    199.     invoke (ISampleGrabber PTR [ebx]).SetOneShot, Grabber, 0
    200.     invoke (ISampleGrabber PTR [ebx]).SetBufferSamples, Grabber, 1
    201.     mov eax, Builder
    202.     mov ebx, [eax]
    203.     invoke (ICaptureGraphBuilder2 PTR [ebx]).RenderStream, Builder, addr PIN_CATEGORY_PREVIEW, addr MEDIATYPE_Video, Src, GrabberF, NulleG
    204.     jmp ok_cvw
    205.  
    206.     error_cvw:
    207.     mov eax, Builder
    208.     mov ebx, [eax]
    209.     invoke (ICaptureGraphBuilder2 PTR [ebx]).Release, Builder
    210.     mov eax, Graph
    211.     mov ebx, [eax]
    212.     invoke (IGraphBuilder PTR [ebx]).Release, Graph
    213.     return 0
    214.  
    215.     ok_cvw:
    216.     mov buffer[0], 0
    217.     inc num
    218.     invoke dwtoa, num, addr numstr
    219.     invoke szMultiCat, 2, addr buffer, SADD("video_window_class_"), addr numstr
    220.     mov esi, wvwc
    221.     lea edi, wc
    222.     mov ecx, 12
    223.     rep movsd
    224.     mov wc.cbSize, sizeof WNDCLASSEX
    225.     mov wc.lpfnWndProc, OFFSET VideoWindowProc
    226.     mov wc.cbClsExtra, 0
    227.     mov wc.cbWndExtra, 56
    228.     invoke LoadCursor, 0, IDC_ARROW
    229.     mov wc.hCursor, eax
    230.     mov wc.lpszMenuName, 0
    231.     lea eax, buffer
    232.     mov wc.lpszClassName, eax
    233.     mrm wc.hIconSm, wc.hIcon
    234.     invoke RegisterClassEx, addr wc
    235.     mov eax, wvs_vol
    236.     or eax, WS_CLIPCHILDREN
    237.     or eax, WS_CHILD
    238.     invoke CreateWindowEx, 0, addr buffer, wvName, eax, wvx, wvy, wvw, wvh, hParent, 0, wc.hInstance, 0
    239.     mov hVWindow, eax
    240.     invoke GetClientRect, hVWindow, addr rct_1
    241.     inc WebCamNum
    242.     invoke SetWindowLong, hVWindow, 0,  WebCamNum            ;номер камеры
    243.     invoke SetWindowLong, hVWindow, 4,  NulleG
    244.     invoke SetWindowLong, hVWindow, 48, 1                    ;1- стоп, 2- старт
    245.     invoke SetWindowLong, hVWindow, 16, Graph
    246.     invoke SetWindowLong, hVWindow, 20, Builder
    247.     invoke SetWindowLong, hVWindow, 24, Src
    248.     invoke SetWindowLong, hVWindow, 8,  ControlVideo
    249.     invoke SetWindowLong, hVWindow, 12, VidWin
    250.     invoke SetWindowLong, hVWindow, 28, GrabberF
    251.     invoke SetWindowLong, hVWindow, 32, Grabber
    252.     invoke SetWindowLong, hVWindow, 44, MedVed
    253.  
    254.     mov eax, MedVed
    255.     mov ebx,[eax]
    256.     invoke (IMediaEvent PTR [ebx]).SetNotifyWindow, MedVed, hVWindow, WM_GRAPHNOTIFY, 0
    257.     mov eax, VidWin
    258.     mov ebx, [eax]
    259.     invoke (IVideoWindow PTR [ebx]).put_Owner, VidWin, hVWindow
    260.     invoke (IVideoWindow PTR [ebx]).put_MessageDrain, VidWin, hVWindow
    261.     invoke (IVideoWindow PTR [ebx]).put_WindowStyle, VidWin, WS_CHILD or WS_CLIPSIBLINGS
    262.     invoke (IVideoWindow PTR [ebx]).SetWindowPosition, VidWin, 0, 0, rct_1.right, rct_1.bottom
    263.     invoke (IVideoWindow PTR [ebx]).put_Visible, VidWin, 0
    264.     mov eax, Grabber
    265.     mov ebx, [eax]
    266.     invoke (ISampleGrabber PTR [ebx]).GetConnectedMediaType, Grabber, addr amt
    267.     mov esi, amt.pbFormat
    268.     add esi, 48
    269.     lea edi, bmpinf
    270.     mov ecx, 10
    271.     rep movsd
    272.     invoke CoTaskMemFree, amt.pbFormat
    273.     invoke SetWindowLong, hVWindow, 36, bmpinf.biWidth
    274.     invoke SetWindowLong, hVWindow, 40, bmpinf.biHeight
    275. mov eax, hVWindow
    276. ret
    277. CreateVideoWindow endp
    278. ;#####################################################################
    279. VideoWindowProc proc hWin:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
    280. LOCAL SubConst:DWORD
    281. .IF uMsg== WM_SIZE
    282.     invoke GetClientRect, hWin, addr rct_1
    283.     invoke GetWindowLong, hWin, 12
    284.     .if eax== 0
    285.         ret
    286.     .endif
    287.     mov ebx,[eax]
    288.     invoke (IVideoWindow PTR [ebx]).SetWindowPosition, eax, 0, 0, rct_1.right, rct_1.bottom
    289.     invoke GetParent, hWin
    290.     mov ebx, eax
    291.     mrm rct_2.left, uMsg
    292.     mrm rct_2.top, wParam
    293.     mrm rct_2.right, lParam
    294.     invoke SendMessage, ebx, WM_USER+160, hWin, addr rct_2
    295. .ELSEIF uMsg== WM_DESTROY
    296.     invoke GetWindowLong, hWin, 8
    297.     mov SubConst, eax
    298.     mov ebx, [eax]
    299.     invoke (IMediaControl PTR [ebx]).Release, SubConst
    300.     invoke GetWindowLong, hWin, 44
    301.     mov SubConst, eax
    302.     mov ebx,[eax]
    303.     invoke (IMediaEvent PTR [ebx]).Release, SubConst
    304.     invoke GetWindowLong, hWin, 12
    305.     mov SubConst, eax
    306.     mov ebx, [eax]
    307.     invoke (IVideoWindow PTR [ebx]).put_Visible, SubConst, 0
    308.     invoke (IVideoWindow PTR [ebx]).Release, SubConst
    309.     invoke GetWindowLong, hWin, 20
    310.     mov SubConst, eax
    311.     mov ebx, [eax]
    312.     invoke (ICaptureGraphBuilder2 PTR [ebx]).Release, SubConst
    313.     invoke GetWindowLong, hWin, 24
    314.     mov SubConst, eax
    315.     mov ebx, [eax]
    316.     invoke (IGraphBuilder PTR [ebx]).Release, SubConst
    317.     invoke GetWindowLong, hWin, 16
    318.     mov SubConst, eax
    319.     mov ebx, [eax]
    320.     invoke (IGraphBuilder PTR [ebx]).Release, SubConst
    321.     invoke GetWindowLong, hWin, 32
    322.     mov SubConst, eax
    323.     mov ebx, [eax]
    324.     invoke (ISampleGrabber PTR [ebx]).Release, SubConst
    325.     invoke GetWindowLong, hWin, 28
    326.     mov SubConst, eax
    327.     mov ebx, [eax]
    328.     invoke (IBaseFilter PTR [ebx]).Release, SubConst
    329. .ELSEIF uMsg== WM_LBUTTONDOWN || uMsg== WM_LBUTTONUP || uMsg== WM_LBUTTONDBLCLK || uMsg== WM_RBUTTONDOWN || uMsg== WM_RBUTTONUP || uMsg== WM_RBUTTONDBLCLK || uMsg== WM_MBUTTONDOWN || uMsg== WM_MBUTTONUP || uMsg== WM_MBUTTONDBLCLK || uMsg== WM_MOUSEMOVE || uMsg== WM_MOUSEACTIVATE || uMsg== WM_KEYDOWN || uMsg== WM_KEYUP || uMsg== WM_CHAR
    330.     invoke GetParent, hWin
    331.     mov SubConst, eax
    332.     mrm rct_2.left, uMsg
    333.     mrm rct_2.top, wParam
    334.     mrm rct_2.right, lParam
    335.     invoke SendMessage, SubConst, WM_USER+160, hWin, addr rct_2
    336. .ELSEIF uMsg== WM_SYSKEYDOWN || uMsg== WM_SYSKEYUP || uMsg== WM_SYSCHAR || uMsg== WM_CLOSE || uMsg== WM_SHOWWINDOW || uMsg== WM_MOVE || uMsg== WM_ACTIVATE || uMsg== WM_GETMINMAXINFO || uMsg== WM_POWER || uMsg== WM_SETCURSOR || uMsg== WM_PAINT || uMsg== WM_HELP || uMsg== WM_TIMER
    337.     invoke GetParent, hWin
    338.     mov SubConst, eax
    339.     mrm rct_2.left, uMsg
    340.     mrm rct_2.top, wParam
    341.     mrm rct_2.right, lParam
    342.     invoke SendMessage, SubConst, WM_USER+160, hWin, addr rct_2
    343. .ELSEIF uMsg== WM_GRAPHNOTIFY
    344.     invoke GetWindowLong, hWin, 44
    345.     .if eax== 0
    346.         ret
    347.     .endif
    348.     mov SubConst, eax
    349.     mov ebx,[eax]
    350.     invoke (IMediaEvent PTR [ebx]).GetEvent, SubConst, addr rct_2.left, addr rct_2.top, addr rct_2.right, 0
    351.     invoke GetParent, hWin
    352.     invoke SendMessage, eax, WM_GRAPHNOTIFY, hWin, addr rct_2
    353. ;   invoke (IMediaEvent PTR [ebx]).FreeEventParams, SubConst, addr rct_2.left, addr rct_2.top, addr rct_2.right
    354.     return 0
    355. .ENDIF
    356. invoke DefWindowProc, hWin, uMsg, wParam, lParam
    357. ret
    358. VideoWindowProc endp
    359. ;#####################################################################
    360. InitLib proc
    361.     invoke CoInitializeEx, 0, COINIT_APARTMENTTHREADED
    362.     invoke LocalAlloc, 040h, 30000000
    363.     mov h_buf, eax
    364. return 1
    365. InitLib endp
    366. ;#####################################################################
    367. UninitLib proc
    368.     invoke CoUninitialize
    369.     invoke LocalFree, h_buf
    370. return 1
    371. UninitLib endp
    372. ;#####################################################################
    373. StartVideo proc hWin:DWORD
    374.     invoke GetWindowLong, hWin, 48
    375.     .IF eax== 0
    376.         return -2
    377.     .ENDIF
    378.     invoke GetWindowLong, hWin, 8
    379.     mov ebx, [eax]
    380.     invoke (IMediaControl PTR [ebx]).Run, eax
    381.     .IF eax== 1                                               ;успешно
    382.         invoke GetWindowLong, hWin, 12
    383.         mov ebx, [eax]
    384.         invoke (IVideoWindow PTR [ebx]).put_Visible, eax, -1
    385.         invoke SetWindowLong, hWin, 48, 2
    386.     .ELSEIF eax== 0
    387.         return -1
    388.     .ELSE
    389.         invoke GetWindowLong, hWin, 12
    390.         mov ebx, [eax]
    391.         invoke (IVideoWindow PTR [ebx]).put_Visible, eax, 0
    392.         invoke SetWindowLong, hWin, 48, 1
    393.         return 0
    394.     .ENDIF
    395. return 1
    396. StartVideo endp
    397. ;#####################################################################
    398. StopVideo proc hWin:DWORD
    399.     invoke GetWindowLong, hWin, 48
    400.     .IF eax== 0
    401.         return -2
    402.     .ENDIF
    403.     invoke SetWindowLong, hWin, 48, 1
    404.     invoke GetWindowLong, hWin, 8
    405.     mov ebx, [eax]
    406.     invoke (IMediaControl PTR [ebx]).Stop, eax
    407.     invoke GetWindowLong, hWin, 12
    408.     mov ebx, [eax]
    409.     invoke (IVideoWindow PTR [ebx]).put_Visible, eax, 0
    410. return 1
    411. StopVideo endp
    412. ;#####################################################################
    413. GetTime proc exName:DWORD
    414. LOCAL stmt:SYSTEMTIME
    415. LOCAL loc_time_buffer[16]:BYTE
    416.     invoke GetLocalTime, addr stmt
    417.     movzx ebx, stmt.wYear
    418.     invoke dwtoa, ebx, addr loc_time_buffer
    419.     invoke lstrcpy, addr TimeBuffer, addr loc_time_buffer
    420.     invoke lstrcat, addr TimeBuffer, SADD("-")
    421.     movzx ebx, stmt.wMonth
    422.     invoke dwtoa, ebx, addr loc_time_buffer
    423.     invoke lstrcat, addr TimeBuffer, addr loc_time_buffer
    424.     invoke lstrcat, addr TimeBuffer, SADD("-")
    425.     movzx ebx, stmt.wDay
    426.     invoke dwtoa, ebx, addr loc_time_buffer
    427.     invoke lstrcat, addr TimeBuffer, addr loc_time_buffer
    428.     invoke lstrcat, addr TimeBuffer, SADD("_")
    429.     movzx ebx, stmt.wHour
    430.     invoke dwtoa, ebx, addr loc_time_buffer
    431.     invoke lstrcat, addr TimeBuffer, addr loc_time_buffer
    432.     invoke lstrcat, addr TimeBuffer, SADD("h")
    433.     invoke lstrcat, addr TimeBuffer, SADD("-")
    434.     movzx ebx, stmt.wMinute
    435.     invoke dwtoa, ebx, addr loc_time_buffer
    436.     invoke lstrcat, addr TimeBuffer, addr loc_time_buffer
    437.     invoke lstrcat, addr TimeBuffer, SADD("m")
    438.     invoke lstrcat, addr TimeBuffer, SADD("-")
    439.     movzx ebx, stmt.wSecond
    440.     invoke dwtoa, ebx, addr loc_time_buffer
    441.     invoke lstrcat, addr TimeBuffer, addr loc_time_buffer
    442.     invoke lstrcat, addr TimeBuffer, SADD("s")
    443.     invoke lstrcat, addr TimeBuffer, SADD("-")
    444.     movzx ebx, stmt.wMilliseconds
    445.     invoke dwtoa, ebx, addr loc_time_buffer
    446.     invoke lstrcat, addr TimeBuffer, addr loc_time_buffer
    447.     invoke lstrcat, addr TimeBuffer, SADD("ms.")
    448.     invoke lstrcat, addr TimeBuffer, exName
    449.     lea eax, TimeBuffer
    450. ret
    451. GetTime endp
    452. ;#####################################################################
    453. dWebCam proc hWin:DWORD
    454. LOCAL spec:DWORD
    455. LOCAL Src:DWORD
    456. LOCAL buffer[1024]:BYTE
    457. LOCAL buffer1[1024]:BYTE
    458.     invoke GetWindowLong, hWin, 0
    459.     .IF eax== 0
    460.         return -2
    461.     .ENDIF
    462.     invoke GetWindowLong, hWin, 24
    463.     mov Src, eax
    464.     mov ebx, [eax]
    465.     invoke (IAMVideoProcAmp PTR [ebx]).QueryInterface, Src, addr IID_ISpecifyPropertyPages, addr spec
    466.     mov eax, spec
    467.     mov ebx, [eax]
    468.     invoke (ISpecifyPropertyPages PTR [ebx]).GetPages, spec, addr cauuid
    469.     invoke (ISpecifyPropertyPages PTR [ebx]).Release, spec
    470.     invoke GetWindowText, hWin, addr buffer, 1024
    471.     invoke MultiByteToWideChar, CP_ACP, 0, addr buffer, -1, addr buffer1, MAX_PATH
    472.     cmp eax, 0
    473.     je endDlgWebCam
    474.     invoke OleCreatePropertyFrame, hWin, 0, 0, addr buffer1, 1, addr Src, cauuid.cElems, cauuid.pElems, 0, 0, 0
    475.     cmp eax, S_OK
    476.     jne endDlgWebCam
    477.     invoke CoTaskMemFree, cauuid.pElems
    478. return 1
    479.     endDlgWebCam:
    480. return 0
    481. dWebCam endp
    482. ;#####################################################################
    483. GetWebCamName proc wcName:DWORD
    484. LOCAL Fetched:DWORD
    485. LOCAL PropBag:DWORD
    486. LOCAL Moniker:DWORD
    487. LOCAL wcBuffer1[1024]:BYTE
    488.     .IF maxdev== 0
    489.         invoke CoCreateInstance, addr CLSID_SystemDeviceEnum, 0, CLSCTX_INPROC_SERVER, addr IID_ICreateDevEnum, addr DevEnum
    490.         .IF eax!= 0
    491.             return 0
    492.         .ENDIF
    493.         mov eax, DevEnum
    494.         mov ebx, [eax]
    495.         invoke (ICreateDevEnum PTR [ebx]).CreateClassEnumerator, DevEnum, addr CLSID_VideoInputDeviceCategory, addr ClassEnum, 0
    496.         .IF ClassEnum== 0 || eax!= 0
    497.             return 0
    498.         .ENDIF
    499.     .ENDIF
    500.     mov eax, ClassEnum
    501.     mov ebx, [eax]
    502.     invoke (IEnumMoniker PTR [ebx]).Next, ClassEnum, 1, addr Moniker, addr Fetched
    503.     cmp eax, S_OK
    504.     jne endEnumDevice
    505.     cmp Fetched, 1
    506.     jne endEnumDevice
    507.     mov eax, Moniker
    508.     mov ebx, [eax]
    509.     invoke (IMoniker PTR [ebx]).BindToStorage, Moniker, 0, 0, addr IID_IPropertyBag, addr PropBag
    510.     cmp eax, S_OK
    511.     jne endEnumDevice
    512.  
    513.     invoke MultiByteToWideChar, CP_ACP, 0, SADD("FriendlyName"), -1, addr wcBuffer1, MAX_PATH
    514.     mov vt.vt, VT_BSTR
    515.     mov vt.parray, 0
    516.     mov eax, PropBag
    517.     mov ebx, [eax]
    518.     invoke (IPropertyBag PTR [ebx]).Read, PropBag, addr wcBuffer1, addr vt, 0
    519.     invoke WideCharToMultiByte, CP_ACP, 0, vt.parray, -1, addr wcBuffer, MAX_PATH, 0, 0
    520.     invoke SysFreeString, vt.parray
    521.     mov eax, PropBag
    522.     mov ebx, [eax]
    523.     invoke (IPropertyBag PTR [ebx]).Release, PropBag
    524.     mov eax, Moniker
    525.     mov ebx, [eax]
    526.     invoke (IEnumMoniker PTR [ebx]).Release, Moniker
    527.     inc maxdev
    528.     cmp maxdev, 101
    529.     je endEnumDevice
    530.     invoke lstrcpy, wcName, addr wcBuffer
    531.     mov eax, maxdev
    532. ret
    533.     endEnumDevice:
    534.     mov eax, ClassEnum
    535.     mov ebx, [eax]
    536.     invoke (ICreateDevEnum PTR [ebx]).Release, ClassEnum
    537.     mov eax, DevEnum
    538.     mov ebx, [eax]
    539.     invoke (ICreateDevEnum PTR [ebx]).Release, DevEnum
    540.     invoke lstrcpy, wcName, SADD("end")
    541.     mov maxdev, 0
    542. return 0
    543. GetWebCamName endp
    544. ;#####################################################################
    545. PhotoSave proc hWin:DWORD, fName:DWORD
    546. LOCAL size_buf:DWORD
    547. LOCAL rzv:DWORD
    548. LOCAL hend:DWORD
    549. LOCAL Grabber:DWORD
    550.     invoke GetWindowLong, hWin, 48
    551.     .IF eax== 0
    552.         return -2
    553.     .ELSEIF eax== 1
    554.         return 0
    555.     .ENDIF
    556.     invoke GetWindowLong, hWin, 32
    557.     mov Grabber, eax
    558.     mov ebx, [eax]
    559.     invoke (ISampleGrabber PTR [ebx]).GetConnectedMediaType, Grabber, addr amt
    560.     .IF eax!= 0
    561.         return 0
    562.     .ENDIF
    563.     mov esi, amt.pbFormat
    564.     add esi, 48
    565.     lea edi, bmpinf
    566.     mov ecx, 10
    567.     rep movsd
    568.     invoke CoTaskMemFree, amt.pbFormat
    569.     mov eax, Grabber
    570.     mov ebx, [eax]
    571.     invoke (ISampleGrabber PTR [ebx]).GetCurrentBuffer, Grabber, addr size_buf, 0
    572.     .IF eax!= 0
    573.         return 0
    574.     .ENDIF
    575.     invoke (ISampleGrabber PTR [ebx]).GetCurrentBuffer, Grabber, addr size_buf, h_buf
    576.     .IF eax!= 0
    577.         return 0
    578.     .ENDIF
    579.     invoke CreateFile, fName, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
    580.     .IF eax== INVALID_HANDLE_VALUE
    581.         return 0
    582.     .ENDIF
    583.     mov hend, eax
    584.     invoke WriteFile, hend, addr InfoStr, 14, addr rzv, 0
    585.     invoke WriteFile, hend, addr bmpinf, 40, addr rzv, 0
    586.     invoke WriteFile, hend, h_buf, size_buf, addr rzv, 0
    587.     invoke CloseHandle, hend
    588. return 1
    589. PhotoSave endp
    590. ;#####################################################################
    591. GetBuffer proc hWin:DWORD, bufStruct:DWORD
    592. LOCAL wWidth:DWORD
    593. LOCAL wHeight:DWORD
    594. LOCAL size_buf:DWORD
    595. LOCAL Grabber:DWORD
    596.     invoke GetWindowLong, hWin, 48
    597.     .IF eax== 0
    598.         return -2
    599.     .ELSEIF eax== 1
    600.         return 0
    601.     .ENDIF
    602.     invoke GetWindowLong, hWin, 32
    603.     mov Grabber, eax
    604.     mov ebx, [eax]
    605.     invoke (ISampleGrabber PTR [ebx]).GetConnectedMediaType, Grabber, addr amt
    606.     .IF eax!= 0
    607.         return 0
    608.     .ENDIF
    609.     mov esi, amt.pbFormat
    610.     add esi, 48
    611.     mov edi, bufStruct
    612.     mov ecx, 10
    613.     rep movsd
    614.     invoke CoTaskMemFree, amt.pbFormat
    615.     mov eax, Grabber
    616.     mov ebx, [eax]
    617.     invoke (ISampleGrabber PTR [ebx]).GetCurrentBuffer, Grabber, addr size_buf, 0
    618.     .IF eax!= 0
    619.         return 0
    620.     .ENDIF
    621.     invoke (ISampleGrabber PTR [ebx]).GetCurrentBuffer, Grabber, addr size_buf, h_buf
    622.     .IF eax!= 0
    623.         return 0
    624.     .ENDIF
    625. mov eax, h_buf
    626. ret
    627. GetBuffer endp
    628. ;#####################################################################
    629. GetVWInfo proc hWin:DWORD
    630. LOCAL SubConst:DWORD
    631.     lea eax, VWInfoBuffer
    632.     mov SubConst, eax
    633.     invoke GetWindowLong, hWin, 48 ;1- стоп, 2- старт
    634.     .IF eax== 0
    635.         return -2
    636.     .ENDIF
    637.     mov ebx, SubConst
    638.     mov dword ptr[ebx], eax
    639.     invoke GetWindowLong, hWin, 0 ;WebCamNum
    640.     mov ebx, SubConst
    641.     mov dword ptr[ebx+4], eax
    642.     invoke GetWindowLong, hWin, 36 ;w
    643.     mov ebx, SubConst
    644.     mov dword ptr[ebx+8], eax
    645.     invoke GetWindowLong, hWin, 40 ; h
    646.     mov ebx, SubConst
    647.     mov dword ptr[ebx+12], eax
    648. mov eax, ebx
    649. ret
    650. GetVWInfo endp
    651. ;#####################################################################
    652. end
     
    Research нравится это.
  3. dsx

    dsx New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2024
    Сообщения:
    3
    Research нравится это.