关于终止屏幕保护程式,与屏幕保护程式的操作
public static class ScreenSaver
{
// Signatures for unmanaged calls
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SystemParametersInfo(
int uAction, int uParam, ref int lpvParam,
int flags);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SystemParametersInfo(
int uAction, int uParam, ref bool lpvParam,
int flags);
[System.Runtime.InteropServices.DllImport("User32")]
public extern static bool SystemParametersInfoW(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd,
int wMsg, int wParam, int lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr OpenDesktop(
string hDesktop, int Flags, bool Inherit,
uint DesiredAccess);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool CloseDesktop(
IntPtr hDesktop);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool EnumDesktopWindows(
IntPtr hDesktop, EnumDesktopWindowsProc callback,
IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool IsWindowVisible(
IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();
// Callbacks
private delegate bool EnumDesktopWindowsProc(
IntPtr hDesktop, IntPtr lParam);
// Constants
private const int SPI_GETSCREENSAVERACTIVE = 16;
private const int SPI_SETSCREENSAVERACTIVE = 17;
private const int SPI_GETSCREENSAVERTIMEOUT = 14;
private const int SPI_SETSCREENSAVERTIMEOUT = 15;
private const int SPI_GETSCREENSAVERRUNNING = 114;
private const int SPIF_SENDWININICHANGE = 2;
//private const int SPI_GETSCREENSAVERRUNNING = 0x0072;
private const uint DESKTOP_WRITEOBJECTS = 0x0080;
private const uint DESKTOP_READOBJECTS = 0x0001;
private const int WM_CLOSE = 16;
public static IntPtr Getlockwindows()
{
IntPtr htop = OpenDesktop("Winlogon", 0, false, 0x0004 | 0x0002 | 0x0040 | 0x0008 | 0x0020 | 0x0010 | 0x0001 | 0x0100 | 0x0080);
return htop;
}
// Returns TRUE if the screen saver is active
// (enabled, but not necessarily running).
public static bool GetScreenSaverActive()
{
bool isActive = false;
SystemParametersInfo(SPI_GETSCREENSAVERACTIVE, 0,
ref isActive, 0);
return isActive;
}
// Pass in TRUE(1) to activate or FALSE(0) to deactivate
// the screen saver.
public static void SetScreenSaverActive(int Active)
{
int nullVar = 0;
SystemParametersInfo(SPI_SETSCREENSAVERACTIVE,
Active, ref nullVar, SPIF_SENDWININICHANGE);
}
// Returns the screen saver timeout setting, in seconds
public static Int32 GetScreenSaverTimeout()
{
Int32 value = 0;
SystemParametersInfo(SPI_GETSCREENSAVERTIMEOUT, 0,
ref value, 0);
return value;
}
// Pass in the number of seconds to set the screen saver
// timeout value.
public static void SetScreenSaverTimeout(Int32 Value)
{
int nullVar = 0;
SystemParametersInfo(SPI_SETSCREENSAVERTIMEOUT,
Value, ref nullVar, SPIF_SENDWININICHANGE);
}
// Returns TRUE if the screen saver is actually running
public static bool GetScreenSaverRunning()
{
bool isRunning = false;
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,
ref isRunning, 0);
return isRunning;
}
public static void KillScreenSaver()
{
IntPtr hDesktop = OpenDesktop("Screen-saver", 0,
false, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
if (hDesktop != IntPtr.Zero)
{
EnumDesktopWindows(hDesktop, new
EnumDesktopWindowsProc(KillScreenSaverFunc),
IntPtr.Zero);
CloseDesktop(hDesktop);
}
else
{
PostMessage(GetForegroundWindow(), WM_CLOSE,
0, 0);
}
}
private static bool KillScreenSaverFunc(IntPtr hWnd,
IntPtr lParam)
{
if (IsWindowVisible(hWnd))
PostMessage(hWnd, WM_CLOSE, 0, 0);
return true;
}
}
此文仅用于记录,对屏幕保护程式的操作