3 * FILE: dll\win32\avicap32\avicap32.c
5 * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
8 #define WIN32_NO_STATUS
10 #define COM_NO_WINDOWS_H
21 #include <wine/debug.h>
23 #define CAP_DESC_MAX 32
25 WINE_DEFAULT_DEBUG_CHANNEL(avicap32
);
31 /* INTRENAL FUNCTIONS **************************************************/
35 CaptureWindowProc(HWND hwnd
, UINT Msg
, WPARAM wParam
, LPARAM lParam
)
49 return DefWindowProc(hwnd
, Msg
, wParam
, lParam
);
53 /* FUNCTIONS ***********************************************************/
60 capCreateCaptureWindowW(LPCWSTR lpszWindowName
,
69 WCHAR szWindowClass
[] = L
"ClsCapWin";
70 WNDCLASSEXW WndClass
= {0};
73 FIXME("capCreateCaptureWindowW() not fully implemented!\n");
75 WndClass
.cbSize
= sizeof(WNDCLASSEXW
);
76 WndClass
.lpszClassName
= szWindowClass
;
77 WndClass
.lpfnWndProc
= CaptureWindowProc
; /* TODO: Implement CaptureWindowProc */
78 WndClass
.hInstance
= hInstance
;
79 WndClass
.style
= CS_HREDRAW
| CS_VREDRAW
;
80 WndClass
.hCursor
= LoadCursorW(0, IDC_ARROW
);
81 WndClass
.hbrBackground
= (HBRUSH
)(COLOR_BTNFACE
+ 1);
83 if (RegisterClassExW(&WndClass
) == (ATOM
)0)
85 if (GetLastError() != ERROR_ALREADY_EXISTS
)
89 return CreateWindowExW(dwExStyle
,
107 capCreateCaptureWindowA(LPCSTR lpszWindowName
,
120 RtlCreateUnicodeStringFromAsciiz(&Name
, lpszWindowName
);
124 Wnd
= capCreateCaptureWindowW(Name
.Buffer
,
132 RtlFreeUnicodeString(&Name
);
142 capGetDriverDescriptionW(WORD wDriverIndex
,
148 DWORD dwSize
, dwIndex
= 0;
149 WCHAR szDriver
[MAX_PATH
];
150 WCHAR szDriverName
[MAX_PATH
];
151 WCHAR szFileName
[MAX_PATH
];
152 WCHAR szVersion
[MAX_PATH
];
155 /* TODO: Add support of data acquisition from system.ini */
156 FIXME("capGetDriverDescriptionW() not fully implemented!\n");
158 if (lpszName
&& cbName
)
161 if (lpszVer
&& cbVer
)
164 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
,
165 L
"SYSTEM\\CurrentControlSet\\Control\\MediaResources\\msvideo",
168 &hKey
) != ERROR_SUCCESS
)
173 dwSize
= sizeof(szDriver
) / sizeof(WCHAR
);
175 while (RegEnumKeyExW(hKey
, dwIndex
,
178 NULL
, NULL
) == ERROR_SUCCESS
)
180 if (RegOpenKeyW(hKey
, szDriver
, &hSubKey
) == ERROR_SUCCESS
)
182 dwSize
= sizeof(szFileName
);
184 if (RegQueryValueExW(hSubKey
,
189 &dwSize
) == ERROR_SUCCESS
)
191 dwSize
= sizeof(szDriverName
);
193 if (RegQueryValueExW(hSubKey
,
197 (LPBYTE
)&szDriverName
,
198 &dwSize
) != ERROR_SUCCESS
)
200 wcscpy(szDriverName
, L
"Unknown Driver Name");
203 if (dwIndex
== (DWORD
)wDriverIndex
)
205 if (lpszName
&& cbName
)
207 lstrcpynW(lpszName
, szDriverName
, cbName
);
210 if (lpszVer
&& cbVer
)
214 VS_FIXEDFILEINFO FileInfo
;
217 dwInfoSize
= GetFileVersionInfoSize(szFileName
, NULL
);
220 Version
= HeapAlloc(GetProcessHeap(), 0, dwInfoSize
);
224 GetFileVersionInfo(szFileName
, 0, dwInfoSize
, Version
);
226 if (VerQueryValueW(Version
, L
"\\", &Ms
, &Ls
))
228 memmove(&FileInfo
, Ms
, Ls
);
229 swprintf(szVersion
, L
"Version: %d.%d.%d.%d",
230 HIWORD(FileInfo
.dwFileVersionMS
),
231 LOWORD(FileInfo
.dwFileVersionMS
),
232 HIWORD(FileInfo
.dwFileVersionLS
),
233 LOWORD(FileInfo
.dwFileVersionLS
));
235 lstrcpynW(lpszVer
, szVersion
, cbVer
);
237 HeapFree(GetProcessHeap(), 0, Version
);
242 RegCloseKey(hSubKey
);
248 RegCloseKey(hSubKey
);
251 dwSize
= sizeof(szDriver
) / sizeof(WCHAR
);
266 capGetDriverDescriptionA(WORD wDriverIndex
,
272 WCHAR DevName
[CAP_DESC_MAX
], DevVer
[CAP_DESC_MAX
];
275 Result
= capGetDriverDescriptionW(wDriverIndex
, DevName
, CAP_DESC_MAX
, DevVer
, CAP_DESC_MAX
);
278 WideCharToMultiByte(CP_ACP
, 0, DevName
, -1, lpszName
, cbName
, NULL
, NULL
);
279 WideCharToMultiByte(CP_ACP
, 0, DevVer
, -1, lpszVer
, cbVer
, NULL
, NULL
);
291 AppCleanup(HINSTANCE hInst
)
302 videoThunk32(DWORD dwUnknown1
, DWORD dwUnknown2
, DWORD dwUnknown3
, DWORD dwUnknown4
, DWORD dwUnknown5
)
311 DllMain(IN HINSTANCE hinstDLL
,
313 IN LPVOID lpvReserved
)
317 case DLL_PROCESS_ATTACH
:
318 TRACE("avicap32 attached!\n");
319 hInstance
= hinstDLL
;