Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenavicap32.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: avicap32 00003 * FILE: dll\win32\avicap32\avicap32.c 00004 * PURPOSE: Main file 00005 * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org) 00006 */ 00007 00008 #include <windows.h> 00009 #include <winternl.h> 00010 #include <vfw.h> 00011 #include <wchar.h> 00012 00013 #include "wine/debug.h" 00014 00015 #define CAP_DESC_MAX 32 00016 00017 WINE_DEFAULT_DEBUG_CHANNEL(avicap32); 00018 00019 00020 HINSTANCE hInstance; 00021 00022 00023 /* INTRENAL FUNCTIONS **************************************************/ 00024 00025 LRESULT 00026 CALLBACK 00027 CaptureWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) 00028 { 00029 switch (Msg) 00030 { 00031 case WM_CREATE: 00032 break; 00033 00034 case WM_PAINT: 00035 break; 00036 00037 case WM_DESTROY: 00038 break; 00039 } 00040 00041 return DefWindowProc(hwnd, Msg, wParam, lParam); 00042 } 00043 00044 00045 /* FUNCTIONS ***********************************************************/ 00046 00047 /* 00048 * implemented 00049 */ 00050 HWND 00051 VFWAPI 00052 capCreateCaptureWindowW(LPCWSTR lpszWindowName, 00053 DWORD dwStyle, 00054 INT x, 00055 INT y, 00056 INT nWidth, 00057 INT nHeight, 00058 HWND hWnd, 00059 INT nID) 00060 { 00061 WCHAR szWindowClass[] = L"ClsCapWin"; 00062 WNDCLASSEXW WndClass = {0}; 00063 DWORD dwExStyle = 0; 00064 00065 FIXME("capCreateCaptureWindowW() not fully implemented!\n"); 00066 00067 WndClass.cbSize = sizeof(WNDCLASSEXW); 00068 WndClass.lpszClassName = szWindowClass; 00069 WndClass.lpfnWndProc = CaptureWindowProc; /* TODO: Implement CaptureWindowProc */ 00070 WndClass.hInstance = hInstance; 00071 WndClass.style = CS_HREDRAW | CS_VREDRAW; 00072 WndClass.hCursor = LoadCursorW(0, IDC_ARROW); 00073 WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); 00074 00075 if (RegisterClassExW(&WndClass) == (ATOM)0) 00076 { 00077 if (GetLastError() != ERROR_ALREADY_EXISTS) 00078 return NULL; 00079 } 00080 00081 return CreateWindowExW(dwExStyle, 00082 szWindowClass, 00083 lpszWindowName, 00084 dwStyle, 00085 x, y, 00086 nWidth, 00087 nHeight, 00088 hWnd, 00089 ULongToHandle(nID), 00090 hInstance, 00091 NULL); 00092 } 00093 00094 /* 00095 * implemented 00096 */ 00097 HWND 00098 VFWAPI 00099 capCreateCaptureWindowA(LPCSTR lpszWindowName, 00100 DWORD dwStyle, 00101 INT x, 00102 INT y, 00103 INT nWidth, 00104 INT nHeight, 00105 HWND hWnd, 00106 INT nID) 00107 { 00108 UNICODE_STRING Name; 00109 HWND Wnd; 00110 00111 if (lpszWindowName) 00112 RtlCreateUnicodeStringFromAsciiz(&Name, lpszWindowName); 00113 else 00114 Name.Buffer = NULL; 00115 00116 Wnd = capCreateCaptureWindowW(Name.Buffer, 00117 dwStyle, 00118 x, y, 00119 nWidth, 00120 nHeight, 00121 hWnd, 00122 nID); 00123 00124 RtlFreeUnicodeString(&Name); 00125 return Wnd; 00126 } 00127 00128 00129 /* 00130 * implemented 00131 */ 00132 BOOL 00133 VFWAPI 00134 capGetDriverDescriptionW(WORD wDriverIndex, 00135 LPWSTR lpszName, 00136 INT cbName, 00137 LPWSTR lpszVer, 00138 INT cbVer) 00139 { 00140 DWORD dwSize, dwIndex = 0; 00141 WCHAR szDriver[MAX_PATH]; 00142 WCHAR szDriverName[MAX_PATH]; 00143 WCHAR szFileName[MAX_PATH]; 00144 WCHAR szVersion[MAX_PATH]; 00145 HKEY hKey, hSubKey; 00146 00147 /* TODO: Add support of data acquisition from system.ini */ 00148 FIXME("capGetDriverDescriptionW() not fully implemented!\n"); 00149 00150 if (lpszName && cbName) 00151 lpszName[0] = L'\0'; 00152 00153 if (lpszVer && cbVer) 00154 lpszVer[0] = L'\0'; 00155 00156 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, 00157 L"SYSTEM\\CurrentControlSet\\Control\\MediaResources\\msvideo", 00158 0, 00159 KEY_READ, 00160 &hKey) != ERROR_SUCCESS) 00161 { 00162 return FALSE; 00163 } 00164 00165 dwSize = sizeof(szDriver) / sizeof(WCHAR); 00166 00167 while (RegEnumKeyExW(hKey, dwIndex, 00168 szDriver, &dwSize, 00169 NULL, NULL, 00170 NULL, NULL) == ERROR_SUCCESS) 00171 { 00172 if (RegOpenKeyW(hKey, szDriver, &hSubKey) == ERROR_SUCCESS) 00173 { 00174 dwSize = sizeof(szFileName) / sizeof(WCHAR); 00175 00176 if (RegQueryValueExW(hSubKey, 00177 L"Driver", 00178 NULL, 00179 NULL, 00180 (LPBYTE)&szFileName, 00181 &dwSize) == ERROR_SUCCESS) 00182 { 00183 dwSize = sizeof(szDriverName) / sizeof(WCHAR); 00184 00185 if (RegQueryValueExW(hSubKey, 00186 L"FriendlyName", 00187 NULL, 00188 NULL, 00189 (LPBYTE)&szDriverName, 00190 &dwSize) != ERROR_SUCCESS) 00191 { 00192 wcscpy(szDriverName, L"Unknown Driver Name"); 00193 } 00194 00195 if (dwIndex == (DWORD)wDriverIndex) 00196 { 00197 if (lpszName && cbName) 00198 { 00199 lstrcpynW(lpszName, szDriverName, cbName); 00200 } 00201 00202 if (lpszVer && cbVer) 00203 { 00204 LPVOID Version, Ms; 00205 DWORD dwInfoSize; 00206 VS_FIXEDFILEINFO FileInfo; 00207 UINT Ls; 00208 00209 dwInfoSize = GetFileVersionInfoSize(szFileName, NULL); 00210 if (dwInfoSize) 00211 { 00212 Version = HeapAlloc(GetProcessHeap(), 0, dwInfoSize); 00213 00214 GetFileVersionInfo(szFileName, 0, dwInfoSize, Version); 00215 00216 if (VerQueryValueW(Version, L"\\", &Ms, &Ls)) 00217 { 00218 memmove(&FileInfo, Ms, Ls); 00219 swprintf(szVersion, L"Version: %d.%d.%d.%d", 00220 HIWORD(FileInfo.dwFileVersionMS), 00221 LOWORD(FileInfo.dwFileVersionMS), 00222 HIWORD(FileInfo.dwFileVersionLS), 00223 LOWORD(FileInfo.dwFileVersionLS)); 00224 00225 lstrcpynW(lpszVer, szVersion, cbVer); 00226 } 00227 HeapFree(GetProcessHeap(), 0, Version); 00228 } 00229 } 00230 00231 RegCloseKey(hSubKey); 00232 RegCloseKey(hKey); 00233 return TRUE; 00234 } 00235 } 00236 00237 RegCloseKey(hSubKey); 00238 } 00239 00240 dwSize = sizeof(szDriver) / sizeof(WCHAR); 00241 dwIndex++; 00242 } 00243 00244 RegCloseKey(hKey); 00245 00246 return FALSE; 00247 } 00248 00249 00250 /* 00251 * implemented 00252 */ 00253 BOOL 00254 VFWAPI 00255 capGetDriverDescriptionA(WORD wDriverIndex, 00256 LPSTR lpszName, 00257 INT cbName, 00258 LPSTR lpszVer, 00259 INT cbVer) 00260 { 00261 WCHAR DevName[CAP_DESC_MAX], DevVer[CAP_DESC_MAX]; 00262 BOOL Result; 00263 00264 Result = capGetDriverDescriptionW(wDriverIndex, DevName, CAP_DESC_MAX, DevVer, CAP_DESC_MAX); 00265 if (Result) 00266 { 00267 WideCharToMultiByte(CP_ACP, 0, DevName, -1, lpszName, cbName, NULL, NULL); 00268 WideCharToMultiByte(CP_ACP, 0, DevVer, -1, lpszVer, cbVer, NULL, NULL); 00269 } 00270 00271 return Result; 00272 } 00273 00274 00275 /* 00276 * unimplemented 00277 */ 00278 VOID 00279 VFWAPI 00280 AppCleanup(HINSTANCE hInst) 00281 { 00282 UNIMPLEMENTED; 00283 } 00284 00285 00286 /* 00287 * unimplemented 00288 */ 00289 DWORD 00290 VFWAPI 00291 videoThunk32(DWORD dwUnknown1, DWORD dwUnknown2, DWORD dwUnknown3, DWORD dwUnknown4, DWORD dwUnknown5) 00292 { 00293 UNIMPLEMENTED; 00294 return 0; 00295 } 00296 00297 00298 BOOL 00299 WINAPI 00300 DllMain(IN HINSTANCE hinstDLL, 00301 IN DWORD dwReason, 00302 IN LPVOID lpvReserved) 00303 { 00304 switch (dwReason) 00305 { 00306 case DLL_PROCESS_ATTACH: 00307 TRACE("avicap32 attached!\n"); 00308 hInstance = hinstDLL; 00309 break; 00310 } 00311 00312 return TRUE; 00313 } Generated on Sun May 27 2012 04:22:48 for ReactOS by
1.7.6.1
|