📄 screensaver.c
字号:
_tcscpy(ScreenSaverItem->szDisplayName, sfi.szDisplayName);
_tcscpy(ScreenSaverItem->szFilename, wallpaperFilename);
ZeroMemory(&listItem, sizeof(LV_ITEM));
listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
listItem.state = LVIS_SELECTED;
listItem.pszText = ScreenSaverItem->szDisplayName;
listItem.iImage = sfi.iIcon;
listItem.iItem = g_ScreenlistViewItemCount;
listItem.lParam = g_ScreenlistViewItemCount;
(void)ListView_InsertItem(g_hScreengroundList, &listItem);
ListView_SetItemState(g_hScreengroundList, g_ScreenlistViewItemCount, LVIS_SELECTED, LVIS_SELECTED);
g_ScreenlistViewItemCount++;
}
}
RegCloseKey(regKey);
*/
/* Add all the screensavers in the C:\ReactOS\System32 directory. */
GetSystemDirectory(szSearchPath, MAX_PATH);
_tcscat(szSearchPath, TEXT("\\*.scr"));
hFind = FindFirstFile(szSearchPath, &fd);
while (hFind != INVALID_HANDLE_VALUE)
{
/* Don't add any hidden screensavers */
if ((fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0)
{
TCHAR filename[MAX_PATH];
GetSystemDirectory(filename, MAX_PATH);
_tcscat(filename, TEXT("\\"));
_tcscat(filename, fd.cFileName);
himl = (HIMAGELIST)SHGetFileInfo(filename,
0,
&sfi,
sizeof(sfi),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON |
SHGFI_DISPLAYNAME);
if (himl == NULL)
{
break;
}
if (i++ == 0)
{
hScreenShellImageList = himl;
(VOID)ListView_SetImageList(hwndScreenSaverList, himl, LVSIL_SMALL);
}
ScreenSaverItem = &pGlobalData->g_ScreenSaverItems[ScreenlistViewItemCount];
ScreenSaverItem->bIsScreenSaver = TRUE;
hModule = LoadLibraryEx(filename, NULL, DONT_RESOLVE_DLL_REFERENCES);
if (hModule)
{
LoadString(hModule,
1,
ScreenSaverItem->szDisplayName,
sizeof(ScreenSaverItem->szDisplayName) / sizeof(TCHAR));
FreeLibrary(hModule);
}
else
{
_tcscpy(ScreenSaverItem->szDisplayName, sfi.szDisplayName);
}
_tcscpy(ScreenSaverItem->szFilename, filename);
ZeroMemory(&listItem, sizeof(LV_ITEM));
listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
listItem.pszText = ScreenSaverItem->szDisplayName;
listItem.state = 0;
listItem.iImage = sfi.iIcon;
listItem.iItem = ScreenlistViewItemCount;
listItem.lParam = ScreenlistViewItemCount;
(VOID)ListView_InsertItem(hwndScreenSaverList, &listItem);
ScreenlistViewItemCount++;
}
if (!FindNextFile(hFind, &fd))
hFind = INVALID_HANDLE_VALUE;
}
}
static VOID
SetScreenSaver(PGLOBAL_DATA pGlobalData)
{
HKEY regKey;
RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0, KEY_ALL_ACCESS, ®Key);
RegSetValueEx(regKey, TEXT("SCRNSAVE.EXE"), 0, REG_SZ,
(BYTE *)pGlobalData->g_ScreenSaverItems[pGlobalData->ImageListSelection].szFilename,
_tcslen(pGlobalData->g_ScreenSaverItems[pGlobalData->ImageListSelection].szFilename) * sizeof(TCHAR));
RegCloseKey(regKey);
//if(g_backgroundItems[g_backgroundSelection].bWallpaper == TRUE)
//{
// SystemParametersInfo(SPI_SETDESKWALLPAPER,
// 0,
// g_backgroundItems[g_backgroundSelection].szFilename,
// SPIF_UPDATEINIFILE);
//}
//else
//{
// SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, TEXT(""), SPIF_UPDATEINIFILE);
//}
}
INT_PTR CALLBACK
ScreenSaverPageProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PGLOBAL_DATA pGlobalData;
pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg)
{
case WM_INITDIALOG:
pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
pGlobalData->ImageListSelection = -1;
SendDlgItemMessage(hwndDlg, IDC_SCREENS_TIME, UDM_SETRANGE, 0, MAKELONG ((short) 240, (short) 0));
AddListViewItems(hwndDlg, pGlobalData);
pGlobalData->g_hPopupMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_POPUP_MENU));
pGlobalData->g_hPopupMenu = GetSubMenu(pGlobalData->g_hPopupMenu, 0);
CheckRegScreenSaverIsSecure(hwndDlg);
break;
case WM_DESTROY:
DestroyMenu(pGlobalData->g_hPopupMenu);
HeapFree(GetProcessHeap(), 0, pGlobalData);
break;
case WM_COMMAND:
{
DWORD controlId = LOWORD(wParam);
DWORD command = HIWORD(wParam);
switch (controlId)
{
case IDC_SCREENS_POWER_BUTTON: // Start Powercfg.Cpl
if (command == BN_CLICKED)
WinExec("rundll32 shell32.dll,Control_RunDLL powercfg.cpl,,",SW_SHOWNORMAL);
break;
case IDC_SCREENS_TESTSC: // Screensaver Preview
if(command == BN_CLICKED)
ScreensaverPreview(hwndDlg, pGlobalData);
break;
case ID_MENU_PREVIEW:
ScreensaverPreview(hwndDlg, pGlobalData);
break;
case ID_MENU_CONFIG:
ScreensaverConfig(hwndDlg, pGlobalData);
break;
case ID_MENU_DELETE: // Delete Screensaver
if (command == BN_CLICKED)
ScreensaverDelete(hwndDlg, pGlobalData);
break;
case IDC_SCREENS_SETTINGS: // Screensaver Settings
if (command == BN_CLICKED)
ScreensaverConfig(hwndDlg, pGlobalData);
break;
case IDC_SCREENS_USEPASSCHK: // Screensaver Is Secure
if (command == BN_CLICKED)
MessageBox(NULL, TEXT("That button doesn't do anything yet"), TEXT("Whoops"), MB_OK);
break;
case IDC_SCREENS_TIME: // Delay before show screensaver
break;
default:
break;
}
break;
}
case WM_NOTIFY:
{
LPNMHDR lpnm = (LPNMHDR)lParam;
LPNMITEMACTIVATE nmia = (LPNMITEMACTIVATE) lParam;
RECT rc;
switch(lpnm->code)
{
case PSN_APPLY:
SetScreenSaver(pGlobalData);
return TRUE;
case NM_RCLICK:
GetWindowRect(GetDlgItem(hwndDlg, IDC_SCREENS_CHOICES), &rc);
TrackPopupMenuEx(pGlobalData->g_hPopupMenu, TPM_RIGHTBUTTON,
rc.left + nmia->ptAction.x, rc.top + nmia->ptAction.y, hwndDlg, NULL);
break;
case LVN_ITEMCHANGED:
{
LPNMLISTVIEW nm = (LPNMLISTVIEW)lParam;
if ((nm->uNewState & LVIS_SELECTED) == 0)
return FALSE;
ListViewItemAreChanged(hwndDlg, pGlobalData, nm->iItem);
break;
}
default:
break;
}
}
break;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -