Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version

Clipz - A Friendly Introduction to the Windows 7 Taskbar Features

, 17 Dec 2009 CPOL
An overview of the Windows 7 taskbar features, and how to use then in your own applications.
Clipz.zip
Clipz
bin
Debug
Clipz.csproj.user
CopyIcon.ico
DeleteIcon.ico
Model
Native Methods
Properties
Settings.settings
Resources
Audio.png
Clipboard.png
NextIcon.ico
PreviousIcon.ico
Utility
Core
AppRestartRecovery
Dialogs
Common
TaskDialogs
Interop
AppRestartRecovery
Dialogs
NetworkList
PowerManagement
TaskDialogs
NetworkList
PowerManagement
Properties
PropertySystem
SafeHandles
Libraries
StructureMap.dll
Shell
Common
CommonFileDialogs
Controls
Design
ShellObjects.cd
ShellThumbnailClassDiagram.cd
DesktopWindowManager
ExplorerBrowser
ExplorerBrowserDiagram.cd
Interop
Common
Dialogs
ExplorerBrowser
KnownFolders
PropertySystem
StockIcons
Taskbar
KnownFolders
Properties
PropertySystem
StockIcons
Taskbar
//Copyright (c) Microsoft Corporation.  All rights reserved.

using System;
using System.Runtime.InteropServices;

namespace Microsoft.WindowsAPICodePack.ApplicationServices
{
    internal class PowerManagementNativeMethods
    {
        private PowerManagementNativeMethods()
        {

        }

        #region Power Management

        internal const uint WM_POWERBROADCAST = 536;
        internal const uint PBT_POWERSETTINGCHANGE = 32787;
        internal const uint SPI_SETSCREENSAVEACTIVE = 0x0011;
        internal const uint SPIF_UPDATEINIFILE = 0x0001;
        internal const uint SPIF_SENDCHANGE = 0x0002;

        // This structure is sent when the PBT_POWERSETTINGSCHANGE message is sent.
        // It describes the power setting that has changed and 
        // contains data about the change.
        [StructLayout(LayoutKind.Sequential, Pack = 4)]
        internal struct PowerBroadcastSetting
        {
            internal Guid PowerSetting;
            internal Int32 DataLength;
        }

        // This structure is used when calling CallNtPowerInformation 
        // to retrieve SystemPowerCapabilities
        [StructLayout(LayoutKind.Sequential)]
        internal struct SystemPowerCapabilities
        {
            [MarshalAs(UnmanagedType.I1)]
            internal bool PowerButtonPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SleepButtonPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool LidPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SystemS1;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SystemS2;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SystemS3;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SystemS4;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SystemS5;
            [MarshalAs(UnmanagedType.I1)]
            internal bool HiberFilePresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool FullWake;
            [MarshalAs(UnmanagedType.I1)]
            internal bool VideoDimPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool ApmPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool UpsPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool ThermalControl;
            [MarshalAs(UnmanagedType.I1)]
            internal bool ProcessorThrottle;
            internal byte ProcessorMinThrottle;
            internal byte ProcessorMaxThrottle;
            [MarshalAs(UnmanagedType.I1)]
            internal bool FastSystemS4;
            internal byte spare2_1;
            internal byte spare2_2;
            internal byte spare2_3;
            [MarshalAs(UnmanagedType.I1)]
            internal bool DiskSpinDown;
            internal byte spare3_1;
            internal byte spare3_2;
            internal byte spare3_3;
            internal byte spare3_4;
            internal byte spare3_5;
            internal byte spare3_6;
            internal byte spare3_7;
            internal byte spare3_8;
            [MarshalAs(UnmanagedType.I1)]
            internal bool SystemBatteriesPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool BatteriesAreShortTerm;
            internal int granularity;
            internal int capacity;
        }

        [StructLayout(LayoutKind.Sequential)]
        internal struct SystemBatteryState
        {
            [MarshalAs(UnmanagedType.I1)]
            internal bool AcOnLine;
            [MarshalAs(UnmanagedType.I1)]
            internal bool BatteryPresent;
            [MarshalAs(UnmanagedType.I1)]
            internal bool Charging;
            [MarshalAs(UnmanagedType.I1)]
            internal bool Discharging;
            internal byte spare1;
            internal byte spare2;
            internal byte spare3;
            internal byte spare4;
            internal uint MaxCapacity;
            internal uint RemainingCapacity;
            internal uint Rate;
            internal uint EstimatedTime;
            internal uint DefaultAlert1;
            internal uint DefaultAlert2;
        }
        [DllImport("powrprof.dll", SetLastError = true)]
        internal static extern UInt32 CallNtPowerInformation(
             Int32 InformationLevel,
             IntPtr lpInputBuffer,
             UInt32 nInputBufferSize,
             IntPtr lpOutputBuffer,
             UInt32 nOutputBufferSize
        );

        [DllImport("User32", SetLastError = true,
            EntryPoint = "RegisterPowerSettingNotification",
            CallingConvention = CallingConvention.StdCall)]
        internal static extern int RegisterPowerSettingNotification(
                IntPtr hRecipient,
                ref Guid PowerSettingGuid,
                Int32 Flags);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        internal static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags);

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

TylerBrinks
Web Developer PageLabs
United States United States
I'm the founder of PageLabs, a web-based performance and SEO optimization site.

Give your site a boost in performance, even take a free speed test!
 
http://www.pagelabs.com
Follow on   Twitter

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.141223.1 | Last Updated 17 Dec 2009
Article Copyright 2009 by TylerBrinks
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid