3 * FILE: dll\win32\avicap32\avicap32.c
5 * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
13 #include "wine/debug.h"
15 #define CAP_DESC_MAX 32
17 WINE_DEFAULT_DEBUG_CHANNEL(avicap32
);
23 /* INTRENAL FUNCTIONS **************************************************/
27 CaptureWindowProc(HWND hwnd
, UINT Msg
, WPARAM wParam
, LPARAM lParam
)
41 return DefWindowProc(hwnd
, Msg
, wParam
, lParam
);
45 /* FUNCTIONS ***********************************************************/
52 capCreateCaptureWindowW(LPCWSTR lpszWindowName
,
61 WCHAR szWindowClass
[] = L
"ClsCapWin";
62 WNDCLASSEXW WndClass
= {0};
65 FIXME("capCreateCaptureWindowW() not fully implemented!\n");
67 WndClass
.cbSize
= sizeof(WNDCLASSEXW
);
68 WndClass
.lpszClassName
= szWindowClass
;
69 WndClass
.lpfnWndProc
= CaptureWindowProc
; /* TODO: Implement CaptureWindowProc */
70 WndClass
.hInstance
= hInstance
;
71 WndClass
.style
= CS_HREDRAW
| CS_VREDRAW
;
72 WndClass
.hCursor
= LoadCursorW(0, IDC_ARROW
);
73 WndClass
.hbrBackground
= (HBRUSH
)(COLOR_BTNFACE
+ 1);
75 if (RegisterClassExW(&WndClass
) == (ATOM
)0)
77 if (GetLastError() != ERROR_ALREADY_EXISTS
)
81 return CreateWindowExW(dwExStyle
,
99 capCreateCaptureWindowA(LPCSTR lpszWindowName
,
112 RtlCreateUnicodeStringFromAsciiz(&Name
, lpszWindowName
);
116 Wnd
= capCreateCaptureWindowW(Name
.Buffer
,
124 RtlFreeUnicodeString(&Name
);
134 capGetDriverDescriptionW(WORD wDriverIndex
,
140 DWORD dwSize
, dwIndex
= 0;
141 WCHAR szDriver
[MAX_PATH
];
142 WCHAR szDriverName
[MAX_PATH
];
143 WCHAR szFileName
[MAX_PATH
];
144 WCHAR szVersion
[MAX_PATH
];
147 /* TODO: Add support of data acquisition from system.ini */
148 FIXME("capGetDriverDescriptionW() not fully implemented!\n");
150 if (lpszName
&& cbName
)
153 if (lpszVer
&& cbVer
)
156 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
,
157 L
"SYSTEM\\CurrentControlSet\\Control\\MediaResources\\msvideo",
160 &hKey
) != ERROR_SUCCESS
)
165 dwSize
= sizeof(szDriver
) / sizeof(WCHAR
);
167 while (RegEnumKeyExW(hKey
, dwIndex
,
170 NULL
, NULL
) == ERROR_SUCCESS
)
172 if (RegOpenKeyW(hKey
, szDriver
, &hSubKey
) == ERROR_SUCCESS
)
174 dwSize
= sizeof(szFileName
) / sizeof(WCHAR
);
176 if (RegQueryValueExW(hSubKey
,
181 &dwSize
) == ERROR_SUCCESS
)
183 dwSize
= sizeof(szDriverName
) / sizeof(WCHAR
);
185 if (RegQueryValueExW(hSubKey
,
189 (LPBYTE
)&szDriverName
,
190 &dwSize
) != ERROR_SUCCESS
)
192 wcscpy(szDriverName
, L
"Unknown Driver Name");
195 if (dwIndex
== (DWORD
)wDriverIndex
)
197 if (lpszName
&& cbName
)
199 lstrcpynW(lpszName
, szDriverName
, cbName
);
202 if (lpszVer
&& cbVer
)
206 VS_FIXEDFILEINFO FileInfo
;
209 dwInfoSize
= GetFileVersionInfoSize(szFileName
, NULL
);
212 Version
= HeapAlloc(GetProcessHeap(), 0, dwInfoSize
);
214 GetFileVersionInfo(szFileName
, 0, dwInfoSize
, Version
);
216 if (VerQueryValueW(Version
, L
"\\", &Ms
, &Ls
))
218 memmove(&FileInfo
, Ms
, Ls
);
219 swprintf(szVersion
, L
"Version: %d.%d.%d.%d",
220 HIWORD(FileInfo
.dwFileVersionMS
),
221 LOWORD(FileInfo
.dwFileVersionMS
),
222 HIWORD(FileInfo
.dwFileVersionLS
),
223 LOWORD(FileInfo
.dwFileVersionLS
));
225 lstrcpynW(lpszVer
, szVersion
, cbVer
);
227 HeapFree(GetProcessHeap(), 0, Version
);
231 RegCloseKey(hSubKey
);
237 RegCloseKey(hSubKey
);
240 dwSize
= sizeof(szDriver
) / sizeof(WCHAR
);
255 capGetDriverDescriptionA(WORD wDriverIndex
,
261 WCHAR DevName
[CAP_DESC_MAX
], DevVer
[CAP_DESC_MAX
];
264 Result
= capGetDriverDescriptionW(wDriverIndex
, DevName
, CAP_DESC_MAX
, DevVer
, CAP_DESC_MAX
);
267 WideCharToMultiByte(CP_ACP
, 0, DevName
, -1, lpszName
, cbName
, NULL
, NULL
);
268 WideCharToMultiByte(CP_ACP
, 0, DevVer
, -1, lpszVer
, cbVer
, NULL
, NULL
);
280 AppCleanup(HINSTANCE hInst
)
291 videoThunk32(DWORD dwUnknown1
, DWORD dwUnknown2
, DWORD dwUnknown3
, DWORD dwUnknown4
, DWORD dwUnknown5
)
300 DllMain(IN HINSTANCE hinstDLL
,
302 IN LPVOID lpvReserved
)
306 case DLL_PROCESS_ATTACH
:
307 TRACE("avicap32 attached!\n");
308 hInstance
= hinstDLL
;