⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 screensaver.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
📖 第 1 页 / 共 2 页
字号:

            _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, &regKey);
    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 + -