[CF.Skills]获取系统电源状态
今天在Peter Foot的博客上看到如何获取系统的电源状态(不是电池状态)的一篇文章,
他使用的VB描述:
他使用的VB描述:
<DllImport("coredll.dll")> _
PublicSharedFunction GetSystemPowerState(ByVal pBuffer As System.Text.StringBuilder, ByVal Length AsInteger, ByRef pFlags As PowerState) AsInteger
EndFunction
<Flags()> _
PublicEnum PowerState
[On] = &H10000 '// on state
Off= &H20000 ' // no power, full off
Critical = &H40000 '// critical off
Boot = &H80000 ' // boot state
Idle = &H100000 ' // idle state
Suspend = &H200000 ' // suspend state
Unattended = &H400000 ' // Unattended state.
Reset= &H800000 ' // reset state
UserIdle = &H1000000 ' // user idle state
BackLightOn = &H2000000 ' // device screen backlight on
Password = &H10000000 ' // This state is password protected.
EndEnum
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sb AsNew System.Text.StringBuilder(260)
Dim flags As PowerState = 0
Dim ret AsInteger= GetSystemPowerState(sb, sb.Capacity, flags)
TextBox1.Text = sb.ToString()
TextBox2.Text = flags.ToString()
EndSub
PublicSharedFunction GetSystemPowerState(ByVal pBuffer As System.Text.StringBuilder, ByVal Length AsInteger, ByRef pFlags As PowerState) AsInteger
EndFunction
<Flags()> _
PublicEnum PowerState
[On] = &H10000 '// on state
Off= &H20000 ' // no power, full off
Critical = &H40000 '// critical off
Boot = &H80000 ' // boot state
Idle = &H100000 ' // idle state
Suspend = &H200000 ' // suspend state
Unattended = &H400000 ' // Unattended state.
Reset= &H800000 ' // reset state
UserIdle = &H1000000 ' // user idle state
BackLightOn = &H2000000 ' // device screen backlight on
Password = &H10000000 ' // This state is password protected.
EndEnum
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sb AsNew System.Text.StringBuilder(260)
Dim flags As PowerState = 0
Dim ret AsInteger= GetSystemPowerState(sb, sb.Capacity, flags)
TextBox1.Text = sb.ToString()
TextBox2.Text = flags.ToString()
EndSub
我写了一个C#的版本:
private void menuPowerState_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder(32);
MyRef.GetSysPowerState(sb, 32);
}
[Flags]
public enum PowerState:uint
{
//更多的参数在Pm.h中
POWER_STATE_ON = 0x00010000,
POWER_STATE_OFF = 0x00020000,
POWER_STATE_CRITICAL = 0x00040000,
POWER_STATE_BOOT = 0x00080000,
POWER_STATE_IDLE = 0x00100000,
POWER_STATE_SUSPEND = 0x00200000,
POWER_STATE_RESUME = 0x00400000,
POWER_STATE_RESET = 0x00800000,
}
class MyRef
{
private static PowerState state = 0;
[DllImport("Coredll.dll", SetLastError = true)]
public static extern void GetSystemPowerState(StringBuilder sb, uint length, ref PowerState ps);
public static void GetSysPowerState(StringBuilder sb, uint length)
{
GetSystemPowerState(sb, length, ref state);
MessageBox.Show(String.Format("Is devive power on? {0}",(state&PowerState.POWER_STATE_ON)==PowerState.POWER_STATE_ON));
}
}
{
StringBuilder sb = new StringBuilder(32);
MyRef.GetSysPowerState(sb, 32);
}
[Flags]
public enum PowerState:uint
{
//更多的参数在Pm.h中
POWER_STATE_ON = 0x00010000,
POWER_STATE_OFF = 0x00020000,
POWER_STATE_CRITICAL = 0x00040000,
POWER_STATE_BOOT = 0x00080000,
POWER_STATE_IDLE = 0x00100000,
POWER_STATE_SUSPEND = 0x00200000,
POWER_STATE_RESUME = 0x00400000,
POWER_STATE_RESET = 0x00800000,
}
class MyRef
{
private static PowerState state = 0;
[DllImport("Coredll.dll", SetLastError = true)]
public static extern void GetSystemPowerState(StringBuilder sb, uint length, ref PowerState ps);
public static void GetSysPowerState(StringBuilder sb, uint length)
{
GetSystemPowerState(sb, length, ref state);
MessageBox.Show(String.Format("Is devive power on? {0}",(state&PowerState.POWER_STATE_ON)==PowerState.POWER_STATE_ON));
}
}
效果如下:
相当easy~
Enjoy it~
©Freesc Huang
黄季冬<fox23>@HUST
posted on 2008-03-09 11:31 J.D Huang 阅读(2271) 评论(5) 编辑 收藏 举报