vb.net休眠 vbnet sleep

求计算机休眠代码

VB.NET中实现"关机/休眠/重启/注销"的类Imports System

公司主营业务:成都网站设计、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出东丽免费做网站回馈大家。

Imports System.Text

Imports System.Diagnostics

Imports System.Runtime.InteropServices

Public Class WindowsController

Public Enum RestartOptions

LogOff = 0

PowerOff = 8

Reboot = 2

ShutDown = 1

Suspend = -1

Hibernate = -2

End Enum

Public Structure LUID

Dim LowPart As Integer

Dim HighPart As Integer

End Structure

Public Structure LUID_AND_ATTRIBUTES

Dim pLuid As LUID

Dim Attributes As Integer

End Structure

Public Structure TOKEN_PRIVILEGES

Dim PrivilegeCount As Integer

Dim Privileges As LUID_AND_ATTRIBUTES

End Structure

Private Const TOKEN_ADJUST_PRIVILEGES = H20

Private Const TOKEN_QUERY = H8

Private Const SE_PRIVILEGE_ENABLED = H2

Private Const FORMAT_MESSAGE_FROM_SYSTEM = H1000

Private Const EWX_FORCE = 4

Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As IntPtr

Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As IntPtr) As Integer

Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As IntPtr, ByVal lpProcName As String) As IntPtr

Declare Function SetSuspendState Lib "Powrprof" (ByVal Hibernate As Integer, ByVal ForceCritical As Integer, ByVal DisableWakeEvent As Integer) As Integer

Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As IntPtr, ByVal DesiredAccess As Integer, ByRef TokenHandle As IntPtr) As Integer

Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Integer

Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As IntPtr, ByVal DisableAllPrivileges As Integer, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Integer, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Integer) As Integer

Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Integer, ByVal dwReserved As Integer) As Integer

Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Integer, ByVal lpSource As IntPtr, ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, ByVal lpBuffer As StringBuilder, ByVal nSize As Integer, ByVal Arguments As Integer) As Integer

Public Sub ExitWindows(ByVal how As RestartOptions, ByVal force As Boolean)

Select Case how

Case RestartOptions.Suspend

SuspendSystem(False, force)

Case RestartOptions.Hibernate

SuspendSystem(True, force)

Case Else

ExitWindows(Convert.ToInt32(how), force)

End Select

End Sub

Protected Sub ExitWindows(ByVal how As Integer, ByVal force As Boolean)

EnableToken("SeShutdownPrivilege")

If force Then how = how Or EWX_FORCE

If (ExitWindowsEx(how, 0) = 0) Then Throw New PrivilegeException(FormatError(Marshal.GetLastWin32Error()))

End Sub

Protected Sub EnableToken(ByVal privilege As String)

If Not CheckEntryPoint("advapi32.dll", "AdjustTokenPrivileges") Then Return

Dim tokenHandle As IntPtr = IntPtr.Zero

Dim privilegeLUID = New LUID()

Dim newPrivileges = New TOKEN_PRIVILEGES()

Dim tokenPrivileges As TOKEN_PRIVILEGES

If (OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, tokenHandle)) = 0 Then Throw New PrivilegeException(FormatError(Marshal.GetLastWin32Error()))

If (LookupPrivilegeValue("", privilege, privilegeLUID)) = 0 Then Throw New PrivilegeException(FormatError(Marshal.GetLastWin32Error()))

tokenPrivileges.PrivilegeCount = 1

tokenPrivileges.Privileges.Attributes = SE_PRIVILEGE_ENABLED

tokenPrivileges.Privileges.pLuid = privilegeLUID

Dim Size As Integer = 4

If (AdjustTokenPrivileges(tokenHandle, 0, tokenPrivileges, 4 + (12 * tokenPrivileges.PrivilegeCount), newPrivileges, Size)) = 0 Then Throw New PrivilegeException(FormatError(Marshal.GetLastWin32Error()))

End Sub

Protected Sub SuspendSystem(ByVal hibernate As Boolean, ByVal force As Boolean)

If Not CheckEntryPoint("powrprof.dll", "SetSuspendState") Then Throw New PlatformNotSupportedException("The SetSuspendState method is not supported on this system!")

SetSuspendState(Convert.ToInt32(IIf(hibernate, 1, 0)), Convert.ToInt32(IIf(force, 1, 0)), 0)

End Sub

Protected Function CheckEntryPoint(ByVal library As String, ByVal method As String) As Boolean

Dim libPtr As IntPtr = LoadLibrary(library)

If Not libPtr.Equals(IntPtr.Zero) Then

If Not GetProcAddress(libPtr, method).Equals(IntPtr.Zero) Then

FreeLibrary(libPtr)

Return True

End If

FreeLibrary(libPtr)

End If

Return False

End Function

Protected Function FormatError(ByVal number As Integer) As String

Dim Buffer = New StringBuilder(255)

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, IntPtr.Zero, number, 0, Buffer, Buffer.Capacity, 0)

Return Buffer.ToString()

End Function

End Class

Public Class PrivilegeException

Inherits Exception

Public Sub New()

MyBase.New()

End Sub

Public Sub New(ByVal message As String)

MyBase.New(message)

End Sub

End Class

例如实现注销功能:

Dim shutdown As New WindowsController()

shutdown.ExitWindows(shutdown.RestartOptions.LogOff, False

求助:VB.NET中线程的休眠时间最长是多少

设定Timer象间触发事件再给handler发消息处理行处理完重置timer间进入循环即随便用wait类土办容易系统判定进程挂死kill

VB中Timer和Doevents的问题!

LZ是想做延迟的功能吧

其实 你可以参考下 Windows核心编程的消息驱动 相关知识

DoEvents 是程序响应Windows消息 如Click,MouseMove以及键盘事件等

因为循环时,系统会给该线程分配大量的CPU时间(空间),因此死循环不能够及时

响应Windows消息,比如用户在循环时拖动了窗体,如果没有DoEvents就会出现

没有响应之类的现象

Sleep 是线程休眠函数,你这个程序所在的线程会在指定时间内"与世隔绝"

Sleep 1 就是1毫秒 对CPU来说也许做了很多事,但是对人就不算是个时间

Timer样能延迟又不咱CPU 你可以尝试一下多线程,但是还要考虑线程同步的问题

其实也可以换一种方式来做,也就是说同样的功能可以有不同的实现方式

参考下这里,也许对你有帮助:

能发现DoEvents这些问题说明你尝试了,而且初步研究了

不明白的地方再问我,希望能帮上忙.


网站标题:vb.net休眠 vbnet sleep
网页路径:http://scyanting.com/article/doejhsj.html