ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

avicap32.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.