Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmmsys.c
Go to the documentation of this file.
00001 /* 00002 * 00003 * PROJECT: ReactOS Multimedia Control Panel 00004 * FILE: dll/cpl/mmsys/mmsys.c 00005 * PURPOSE: ReactOS Multimedia Control Panel 00006 * PROGRAMMER: Thoams Weidenmueller <w3seek@reactos.com> 00007 * Dmitry Chapyshev <dmitry@reactos.org> 00008 * UPDATE HISTORY: 00009 * 2005/11/23 Created 00010 */ 00011 00012 #include "mmsys.h" 00013 00014 typedef enum 00015 { 00016 HWPD_STANDARDLIST = 0, 00017 HWPD_LARGELIST, 00018 HWPD_MAX = HWPD_LARGELIST 00019 } HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE; 00020 00021 typedef struct 00022 { 00023 LPWSTR LabelName; 00024 LPWSTR DefaultName; 00025 UINT LocalizedResId; 00026 LPWSTR FileName; 00027 }EVENT_LABEL_ITEM; 00028 00029 typedef struct 00030 { 00031 LPWSTR LabelName; 00032 LPWSTR DefaultName; 00033 UINT IconId; 00034 }SYSTEM_SCHEME_ITEM; 00035 00036 static EVENT_LABEL_ITEM EventLabels[] = 00037 { 00038 { 00039 L"WindowsLogon", 00040 L"ReactOS Logon", 00041 IDS_REACTOS_LOGON, 00042 L"ReactOS_Logon.wav" 00043 }, 00044 { 00045 L"WindowsLogoff", 00046 L"ReactOS Logoff", 00047 IDS_REACTOS_LOGOFF, 00048 L"ReactOS_Logoff.wav" 00049 }, 00050 { 00051 NULL, 00052 NULL, 00053 0, 00054 NULL 00055 } 00056 }; 00057 00058 static SYSTEM_SCHEME_ITEM SystemSchemes[] = 00059 { 00060 { 00061 L".Default", 00062 L"ReactOS Standard", 00063 IDS_REACTOS_DEFAULT_SCHEME 00064 }, 00065 { 00066 L".None", 00067 L"No Sounds", 00068 -1 00069 }, 00070 { 00071 NULL, 00072 NULL 00073 } 00074 }; 00075 00076 00077 HWND WINAPI 00078 DeviceCreateHardwarePageEx(HWND hWndParent, 00079 LPGUID lpGuids, 00080 UINT uNumberOfGuids, 00081 HWPAGE_DISPLAYMODE DisplayMode); 00082 00083 #define NUM_APPLETS (1) 00084 00085 00086 HINSTANCE hApplet = 0; 00087 00088 /* Applets */ 00089 const APPLET Applets[NUM_APPLETS] = 00090 { 00091 {IDI_CPLICON, IDS_CPLNAME, IDS_CPLDESCRIPTION, MmSysApplet}, 00092 }; 00093 00094 00095 HRESULT WINAPI 00096 DllCanUnloadNow(VOID) 00097 { 00098 DPRINT1("DllCanUnloadNow() stubs\n"); 00099 return S_OK; 00100 } 00101 00102 HRESULT WINAPI 00103 DllGetClassObject(REFCLSID rclsid, 00104 REFIID riid, 00105 LPVOID *ppv) 00106 { 00107 DPRINT1("DllGetClassObject() stubs\n"); 00108 return S_OK; 00109 } 00110 00111 00112 VOID WINAPI 00113 ShowDriverSettingsAfterForkW(HWND hwnd, 00114 HINSTANCE hInstance, 00115 LPWSTR lpszCmd, 00116 int nCmdShow) 00117 { 00118 DPRINT1("ShowDriverSettingsAfterForkW() stubs\n"); 00119 } 00120 00121 VOID WINAPI 00122 ShowDriverSettingsAfterForkA(HWND hwnd, 00123 HINSTANCE hInstance, 00124 LPSTR lpszCmd, 00125 int nCmdShow) 00126 { 00127 DPRINT1("ShowDriverSettingsAfterForkA() stubs\n"); 00128 } 00129 00130 VOID WINAPI 00131 ShowDriverSettingsAfterFork(HWND hwnd, 00132 HINSTANCE hInstance, 00133 LPSTR lpszCmd, 00134 int nCmdShow) 00135 { 00136 DPRINT1("ShowDriverSettingsAfterFork() stubs\n"); 00137 } 00138 00139 BOOL WINAPI 00140 ShowMMCPLPropertySheet(HWND hwnd, 00141 LPCSTR pszPropSheet, 00142 LPSTR pszName, 00143 LPSTR pszCaption) 00144 { 00145 DPRINT1("ShowMMCPLPropertySheet() stubs\n"); 00146 return TRUE; 00147 } 00148 00149 VOID WINAPI 00150 ShowAudioPropertySheet(HWND hwnd, 00151 HINSTANCE hInstance, 00152 LPTSTR lpszCmd, 00153 int nCmdShow) 00154 { 00155 DPRINT1("ShowAudioPropertySheet() stubs\n"); 00156 } 00157 00158 VOID WINAPI 00159 mmseRunOnceW(HWND hwnd, 00160 HINSTANCE hInstance, 00161 LPWSTR lpszCmd, 00162 int nCmdShow) 00163 { 00164 DPRINT1("mmseRunOnceW() stubs\n"); 00165 } 00166 00167 VOID WINAPI 00168 mmseRunOnceA(HWND hwnd, 00169 HINSTANCE hInstance, 00170 LPSTR lpszCmd, 00171 int nCmdShow) 00172 { 00173 DPRINT1("mmseRunOnceA() stubs\n"); 00174 } 00175 00176 VOID WINAPI 00177 mmseRunOnce(HWND hwnd, 00178 HINSTANCE hInstance, 00179 LPSTR lpszCmd, 00180 int nCmdShow) 00181 { 00182 DPRINT1("mmseRunOnce() stubs\n"); 00183 } 00184 00185 BOOL WINAPI 00186 MediaPropPageProvider(LPVOID Info, 00187 LPFNADDPROPSHEETPAGE PropSheetPage, 00188 LPARAM lParam) 00189 { 00190 DPRINT1("MediaPropPageProvider() stubs\n"); 00191 return TRUE; 00192 } 00193 00194 VOID WINAPI 00195 ShowFullControlPanel(HWND hwnd, 00196 HINSTANCE hInstance, 00197 LPSTR lpszCmd, 00198 int nCmdShow) 00199 { 00200 DPRINT1("ShowFullControlPanel() stubs\n"); 00201 } 00202 00203 VOID 00204 InstallSystemSoundLabels(HKEY hKey) 00205 { 00206 UINT i = 0; 00207 HKEY hSubKey; 00208 WCHAR Buffer[40]; 00209 00210 do 00211 { 00212 if (RegCreateKeyExW(hKey, EventLabels[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS) 00213 { 00214 RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)EventLabels[i].DefaultName, (wcslen(EventLabels[i].DefaultName)+1) * sizeof(WCHAR)); 00215 swprintf(Buffer, L"@mmsys.cpl,-%u", EventLabels[i].LocalizedResId); 00216 RegSetValueExW(hSubKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Buffer, (wcslen(Buffer)+1) * sizeof(WCHAR)); 00217 00218 RegCloseKey(hSubKey); 00219 } 00220 i++; 00221 }while(EventLabels[i].LabelName); 00222 } 00223 00224 VOID 00225 InstallSystemSoundSchemeNames(HKEY hKey) 00226 { 00227 UINT i = 0; 00228 HKEY hSubKey; 00229 00230 do 00231 { 00232 if (RegCreateKeyExW(hKey, SystemSchemes[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS) 00233 { 00234 RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[i].DefaultName, (wcslen(SystemSchemes[i].DefaultName)+1) * sizeof(WCHAR)); 00235 RegCloseKey(hSubKey); 00236 } 00237 i++; 00238 }while(SystemSchemes[i].LabelName); 00239 } 00240 00241 VOID 00242 InstallDefaultSystemSoundScheme(HKEY hRootKey) 00243 { 00244 HKEY hKey, hSubKey; 00245 WCHAR Path[MAX_PATH]; 00246 UINT i = 0; 00247 00248 if (RegCreateKeyExW(hRootKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS) 00249 return; 00250 00251 RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[0].DefaultName, (wcslen(SystemSchemes[0].DefaultName)+1) * sizeof(WCHAR)); 00252 swprintf(Path, L"@mmsys.cpl,-%u", SystemSchemes[0].IconId); 00253 RegSetValueExW(hKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR)); 00254 00255 do 00256 { 00257 if (RegCreateKeyExW(hKey, EventLabels[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS) 00258 { 00259 HKEY hScheme; 00260 00261 swprintf(Path, L"%%SystemRoot%%\\media\\%s", EventLabels[i].FileName); 00262 if (RegCreateKeyExW(hSubKey, L".Current", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS) 00263 { 00264 RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR)); 00265 RegCloseKey(hScheme); 00266 } 00267 00268 if (RegCreateKeyExW(hSubKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS) 00269 { 00270 RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR)); 00271 RegCloseKey(hScheme); 00272 } 00273 RegCloseKey(hSubKey); 00274 } 00275 i++; 00276 }while(EventLabels[i].LabelName); 00277 00278 RegCloseKey(hKey); 00279 } 00280 00281 00282 VOID 00283 InstallSystemSoundScheme() 00284 { 00285 HKEY hKey, hSubKey; 00286 DWORD dwDisposition; 00287 00288 if (RegCreateKeyExW(HKEY_CURRENT_USER, L"AppEvents", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS) 00289 return; 00290 00291 if (RegCreateKeyExW(hKey, L"EventLabels", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS) 00292 { 00293 InstallSystemSoundLabels(hSubKey); 00294 RegCloseKey(hSubKey); 00295 } 00296 00297 if (RegCreateKeyExW(hKey, L"Schemes", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, &dwDisposition) == ERROR_SUCCESS) 00298 { 00299 HKEY hNames; 00300 00301 if (RegCreateKeyExW(hSubKey, L"Names", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hNames, NULL) == ERROR_SUCCESS) 00302 { 00303 InstallSystemSoundSchemeNames(hNames); 00304 RegCloseKey(hNames); 00305 } 00306 00307 if (RegCreateKeyExW(hSubKey, L"Apps", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hNames, NULL) == ERROR_SUCCESS) 00308 { 00309 InstallDefaultSystemSoundScheme(hNames); 00310 RegCloseKey(hNames); 00311 if (dwDisposition & REG_CREATED_NEW_KEY) 00312 { 00313 // FIXME 00314 RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)L".Default", (wcslen(L".Default")+1) * sizeof(WCHAR)); 00315 } 00316 } 00317 00318 RegCloseKey(hSubKey); 00319 } 00320 00321 RegCloseKey(hKey); 00322 } 00323 00324 00325 DWORD 00326 MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) 00327 { 00328 UINT Length; 00329 LPWSTR pBuffer; 00330 WCHAR szBuffer[MAX_PATH]; 00331 HINF hInf; 00332 PVOID Context; 00333 BOOL Result; 00334 SC_HANDLE hSCManager, hService; 00335 WCHAR WaveName[20]; 00336 HKEY hKey; 00337 DWORD BufferSize; 00338 ULONG Index; 00339 00340 if (!IsEqualIID(&pspDevInfoData->ClassGuid, &GUID_DEVCLASS_SOUND) && 00341 !IsEqualIID(&pspDevInfoData->ClassGuid, &GUID_DEVCLASS_MEDIA)) 00342 return ERROR_DI_DO_DEFAULT; 00343 00344 Length = GetWindowsDirectoryW(szBuffer, MAX_PATH); 00345 if (!Length || Length >= MAX_PATH - 14) 00346 { 00347 return ERROR_GEN_FAILURE; 00348 } 00349 00350 pBuffer = PathAddBackslashW(szBuffer); 00351 if (!pBuffer) 00352 { 00353 return ERROR_GEN_FAILURE; 00354 } 00355 00356 wcscpy(pBuffer, L"inf\\audio.inf"); 00357 00358 hInf = SetupOpenInfFileW(szBuffer, 00359 NULL, 00360 INF_STYLE_WIN4, 00361 NULL); 00362 00363 if (hInf == INVALID_HANDLE_VALUE) 00364 { 00365 return ERROR_GEN_FAILURE; 00366 } 00367 00368 Context = SetupInitDefaultQueueCallback(NULL); 00369 if (Context == NULL) 00370 { 00371 SetupCloseInfFile(hInf); 00372 return ERROR_GEN_FAILURE; 00373 } 00374 00375 Result = SetupInstallFromInfSectionW(NULL, 00376 hInf, 00377 L"AUDIO_Inst.NT", 00378 SPINST_ALL, 00379 NULL, 00380 NULL, 00381 SP_COPY_NEWER, 00382 SetupDefaultQueueCallbackW, 00383 Context, 00384 NULL, 00385 NULL); 00386 00387 if (Result) 00388 { 00389 Result = SetupInstallServicesFromInfSectionW(hInf, 00390 L"Audio_Inst.NT.Services", 00391 0); 00392 } 00393 00394 SetupTermDefaultQueueCallback(Context); 00395 SetupCloseInfFile(hInf); 00396 00397 00398 00399 hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); 00400 if (!hSCManager) 00401 { 00402 return ERROR_DI_DO_DEFAULT; 00403 } 00404 00405 hService = OpenService(hSCManager, L"RosAudioSrv", SERVICE_ALL_ACCESS); 00406 if (hService) 00407 { 00408 /* Make RosAudioSrv start automatically */ 00409 ChangeServiceConfig(hService, SERVICE_NO_CHANGE, SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL); 00410 00411 StartService(hService, 0, NULL); 00412 CloseServiceHandle(hService); 00413 } 00414 CloseServiceHandle(hSCManager); 00415 00416 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32", 0, GENERIC_READ | GENERIC_WRITE, &hKey) == ERROR_SUCCESS) 00417 { 00418 szBuffer[Length] = '\0'; 00419 pBuffer = PathAddBackslashW(szBuffer); 00420 wcscpy(pBuffer, L"system32\\wdmaud.drv"); 00421 00422 for(Index = 1; Index <= 4; Index++) 00423 { 00424 swprintf(WaveName, L"wave%u", Index); 00425 if (RegQueryValueExW(hKey, WaveName, 0, NULL, NULL, &BufferSize) != ERROR_MORE_DATA) 00426 { 00427 /* Store new audio driver entry */ 00428 RegSetValueExW(hKey, WaveName, 0, REG_SZ, (LPBYTE)szBuffer, (wcslen(szBuffer)+1) * sizeof(WCHAR)); 00429 break; 00430 } 00431 else 00432 { 00433 WCHAR Buffer[MAX_PATH]; 00434 BufferSize = sizeof(Buffer); 00435 00436 if (RegQueryValueExW(hKey, WaveName, 0, NULL, (LPBYTE)Buffer, &BufferSize) == ERROR_SUCCESS) 00437 { 00438 /* Make sure the buffer is zero terminated */ 00439 Buffer[MAX_PATH-1] = L'\0'; 00440 00441 if (!wcsicmp(Buffer, szBuffer)) 00442 { 00443 /* An entry already exists */ 00444 break; 00445 } 00446 } 00447 } 00448 } 00449 RegCloseKey(hKey); 00450 } 00451 InstallSystemSoundScheme(); 00452 00453 return ERROR_DI_DO_DEFAULT; 00454 00455 } 00456 00457 DWORD 00458 MMSYS_RemoveDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) 00459 { 00460 return ERROR_DI_DO_DEFAULT; 00461 } 00462 00463 DWORD 00464 MMSYS_AllowInstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) 00465 { 00466 return ERROR_DI_DO_DEFAULT; 00467 } 00468 00469 DWORD 00470 MMSYS_SelectDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) 00471 { 00472 return ERROR_DI_DO_DEFAULT; 00473 } 00474 00475 DWORD 00476 MMSYS_DetectDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) 00477 { 00478 return ERROR_DI_DO_DEFAULT; 00479 } 00480 00481 DWORD 00482 MMSYS_SelectBestCompatDRV(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) 00483 { 00484 return ERROR_DI_DO_DEFAULT; 00485 } 00486 00487 DWORD WINAPI 00488 MediaClassInstaller(IN DI_FUNCTION diFunction, 00489 IN HDEVINFO hDevInfo, 00490 IN PSP_DEVINFO_DATA pspDevInfoData OPTIONAL) 00491 { 00492 switch (diFunction) 00493 { 00494 case DIF_INSTALLDEVICE: 00495 return MMSYS_InstallDevice(hDevInfo, pspDevInfoData); 00496 case DIF_REMOVE: 00497 return MMSYS_RemoveDevice(hDevInfo, pspDevInfoData); 00498 case DIF_ALLOW_INSTALL: 00499 return MMSYS_AllowInstallDevice(hDevInfo, pspDevInfoData); 00500 case DIF_SELECTDEVICE: 00501 return MMSYS_SelectDevice(hDevInfo, pspDevInfoData); 00502 case DIF_DETECT: 00503 return MMSYS_DetectDevice(hDevInfo, pspDevInfoData); 00504 case DIF_SELECTBESTCOMPATDRV: 00505 return MMSYS_SelectBestCompatDRV(hDevInfo, pspDevInfoData); 00506 default: 00507 return ERROR_DI_DO_DEFAULT; 00508 } 00509 } 00510 00511 00512 /* Hardware property page dialog callback */ 00513 static INT_PTR CALLBACK 00514 HardwareDlgProc(HWND hwndDlg, 00515 UINT uMsg, 00516 WPARAM wParam, 00517 LPARAM lParam) 00518 { 00519 UNREFERENCED_PARAMETER(lParam); 00520 UNREFERENCED_PARAMETER(wParam); 00521 switch(uMsg) 00522 { 00523 case WM_INITDIALOG: 00524 { 00525 GUID Guids[2]; 00526 Guids[0] = GUID_DEVCLASS_CDROM; 00527 Guids[1] = GUID_DEVCLASS_MEDIA; 00528 00529 /* Create the hardware page */ 00530 DeviceCreateHardwarePageEx(hwndDlg, 00531 Guids, 00532 sizeof(Guids) / sizeof(Guids[0]), 00533 HWPD_LARGELIST); 00534 break; 00535 } 00536 } 00537 00538 return FALSE; 00539 } 00540 00541 LONG APIENTRY 00542 MmSysApplet(HWND hwnd, 00543 UINT uMsg, 00544 LPARAM wParam, 00545 LPARAM lParam) 00546 { 00547 PROPSHEETPAGE psp[5]; 00548 PROPSHEETHEADER psh; // = { 0 }; 00549 TCHAR Caption[256]; 00550 00551 UNREFERENCED_PARAMETER(lParam); 00552 UNREFERENCED_PARAMETER(wParam); 00553 UNREFERENCED_PARAMETER(uMsg); 00554 00555 LoadString(hApplet, 00556 IDS_CPLNAME, 00557 Caption, 00558 sizeof(Caption) / sizeof(TCHAR)); 00559 00560 psh.dwSize = sizeof(PROPSHEETHEADER); 00561 psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE; 00562 psh.hwndParent = hwnd; 00563 psh.hInstance = hApplet; 00564 psh.hIcon = LoadIcon(hApplet, 00565 MAKEINTRESOURCE(IDI_CPLICON)); 00566 psh.pszCaption = Caption; 00567 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); 00568 psh.nStartPage = 0; 00569 psh.ppsp = psp; 00570 00571 InitPropSheetPage(&psp[0], IDD_VOLUME,VolumeDlgProc); 00572 InitPropSheetPage(&psp[1], IDD_SOUNDS,SoundsDlgProc); 00573 InitPropSheetPage(&psp[2], IDD_AUDIO,AudioDlgProc); 00574 InitPropSheetPage(&psp[3], IDD_VOICE,VoiceDlgProc); 00575 InitPropSheetPage(&psp[4], IDD_HARDWARE,HardwareDlgProc); 00576 00577 return (LONG)(PropertySheet(&psh) != -1); 00578 } 00579 00580 VOID 00581 InitPropSheetPage(PROPSHEETPAGE *psp, 00582 WORD idDlg, 00583 DLGPROC DlgProc) 00584 { 00585 ZeroMemory(psp, sizeof(PROPSHEETPAGE)); 00586 psp->dwSize = sizeof(PROPSHEETPAGE); 00587 psp->dwFlags = PSP_DEFAULT; 00588 psp->hInstance = hApplet; 00589 psp->pszTemplate = MAKEINTRESOURCE(idDlg); 00590 psp->pfnDlgProc = DlgProc; 00591 } 00592 00593 00594 /* Control Panel Callback */ 00595 LONG CALLBACK 00596 CPlApplet(HWND hwndCpl, 00597 UINT uMsg, 00598 LPARAM lParam1, 00599 LPARAM lParam2) 00600 { 00601 switch(uMsg) 00602 { 00603 case CPL_INIT: 00604 return TRUE; 00605 00606 case CPL_GETCOUNT: 00607 return NUM_APPLETS; 00608 00609 case CPL_INQUIRE: 00610 { 00611 CPLINFO *CPlInfo = (CPLINFO*)lParam2; 00612 UINT uAppIndex = (UINT)lParam1; 00613 00614 CPlInfo->lData = 0; 00615 CPlInfo->idIcon = Applets[uAppIndex].idIcon; 00616 CPlInfo->idName = Applets[uAppIndex].idName; 00617 CPlInfo->idInfo = Applets[uAppIndex].idDescription; 00618 break; 00619 } 00620 00621 case CPL_DBLCLK: 00622 { 00623 UINT uAppIndex = (UINT)lParam1; 00624 Applets[uAppIndex].AppletProc(hwndCpl, 00625 uMsg, 00626 lParam1, 00627 lParam2); 00628 break; 00629 } 00630 } 00631 00632 return FALSE; 00633 } 00634 00635 00636 BOOL WINAPI 00637 DllMain(HINSTANCE hinstDLL, 00638 DWORD dwReason, 00639 LPVOID lpReserved) 00640 { 00641 UNREFERENCED_PARAMETER(lpReserved); 00642 switch(dwReason) 00643 { 00644 case DLL_PROCESS_ATTACH: 00645 hApplet = hinstDLL; 00646 DisableThreadLibraryCalls(hinstDLL); 00647 break; 00648 } 00649 00650 return TRUE; 00651 } Generated on Sun May 27 2012 04:21:00 for ReactOS by
1.7.6.1
|