自动关机功能(VB.NET实现)

califord 2005-12-11 02:59:58
现在我想用VB.NET做一个自动关机功能。
主要是这样的:上面可以手动输入关机时间,然后点一下开始(点后从系统中取得系统当前时间),这后就是在页面上提示离关机还有多少时间的字样,并且是跳动的。到了指定时间就使行关机操作。当然在中间可以有手动停止这一关机操作的处理。
界面设计如下:三个listbox分别指定关机的时间中的小时,分钟,秒
两个Button 分别是开始与取消
一个lable显示状态,也就是我上面说的:“离关机还有多少时间”的字样
请各位指教!!!
...全文
493 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2005-12-13
  • 打赏
  • 举报
回复
我要源码是想自己好好看看,谢了

请问我上面给你的难道不是源码么?调用方法都写出来了。还要如何的源码?我再详细一点:
打开vs.net,新建工程,选择vb.net,右边选择Windows Application 程序,点确定。项目上右键,选择添加,添加新项,选择类库。点确定,吧我给你的类复制,粘贴。然后关闭。再你新建的窗体上画一个按钮,双击按钮,吧我给你的调用写进去。点保存,点编译。按ctrl+F5。运行。

这样的一个过程?这样给你的还不算源码么?
califord 2005-12-13
  • 打赏
  • 举报
回复
呵呵,我学习中,感谢 回复人: wuyazhe(我的宝贝叫阿刺) ( ) 信誉:100 的教诲.

我要源码是想自己好好看看,谢了

我不想要网上找来直接用的,因为我要改
dalianu 2005-12-13
  • 打赏
  • 举报
回复
以前做了一个定时关机的软件
在http://free.ys168.com/?peds中的User目录下ExitWindows.msi
刚学.net的时候写的,代码挺乱的,你要我可以发给你看看.
califord 2005-12-13
  • 打赏
  • 举报
回复
是我搞不好呀,谢谢了,呵呵.
兔子-顾问 2005-12-12
  • 打赏
  • 举报
回复
ps:如果只为了使用,不关心原理。网上很多的“智能关机”,“定时关机”的软件。用那2个词做关键字搜索就可以了。如果找到的都是介绍。加一个“ 下载”再搜索。
兔子-顾问 2005-12-12
  • 打赏
  • 举报
回复
califord(远方) ( ) 信誉:100 :

很遗憾我无法帮助你到这个地步,我认为,网络作为一个公共传媒载体,提供了我们一个便利的学习环境,大家应当自食其力,但是我和你一样是从菜鸟一步步走来,对新手。学会使用网络很重要。

第二就是对待帮助的态度。虽然我不能说我提问很懂。我知道。做新人,比较困难的一个。就是表达清楚自己的意思和理解对方的意思。但我当时在别人给我答案之后,我不会再第二次询问给我答案的人,因为每个人表达方式不同。但自我方式都是类似的,你看不懂我说的,要我再表达,那也是徒劳的。你不如找别人帮你看看这帖子,说不定,别人用另一种措辞,能给你解答清楚。

还有,如果说鄙视要代码的也好,不鄙视也好。我都已经给你了类,并且给了调用方法,类的出处。应该说。方法已经对你说清楚了。受人鱼不如受人以渔。我希望你能反复的阅读以上各位网友(包括我)给你提出的方法。分析之后,自己完成。这样给你的成就感是比拿着我的代码执行来的更喜悦。好么。


成功。
海天之间
2005-12-12 20:42
yinhai_98 2005-12-12
  • 打赏
  • 举报
回复
标记 学习中
califord 2005-12-12
  • 打赏
  • 举报
回复
wuyazhe(我的宝贝叫阿刺) ( ) 信誉:100
这位高手,代码没有错,但是我不知道接下去怎么做呀。代码编辑全部通过的。现在是问题是我怎么样实现我要的功能?能具体说说吗?因为我不懂这个程序,所以还请你费时帮我一下
谢谢了,要不你帮我做好吗?我的信箱:qqmmxx@163.com 谢了
兔子-顾问 2005-12-12
  • 打赏
  • 举报
回复
win98就一句话。但是nt(2000,xp)
需要先获得关机的权限,否则无法关机的。你也不用理解,那个vb.net的,复制去。按提示给你的调用方法调用就可以了。对你使用上,也就是一句话。

Dim shutdown As New WindowsController()
shutdown.ExitWindows(shutdown.RestartOptions.LogOff, False)
califord 2005-12-12
  • 打赏
  • 举报
回复
还是不懂,先看看再说,看看大家还有什么方法不
califord 2005-12-11
  • 打赏
  • 举报
回复
晕,这个不懂呀,有那么多吗?
兔子-顾问 2005-12-11
  • 打赏
  • 举报
回复
win2000没有shutdown
lifengguo 2005-12-11
  • 打赏
  • 举报
回复
最原始的办法是调用系统的 shutdown 命令
兔子-顾问 2005-12-11
  • 打赏
  • 举报
回复
以上内容,来自:http://www.programfan.com/article/showarticle.asp?id=2244
兔子-顾问 2005-12-11
  • 打赏
  • 举报
回复
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)

兔子-顾问 2005-12-11
  • 打赏
  • 举报
回复
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
MessageBox(TEXT("OpenProcessToken"));

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)
MessageBox(TEXT("AdjustTokenPrivileges"));

// Shut down the system and force all applications to close.

//if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0))
MessageBox(TEXT("ExitWindowsEx"));


c++的。回头给你翻成vb.net的
califord 2005-12-11
  • 打赏
  • 举报
回复
没有人回答吗?帮我一下,我急用呢
阿浩No_1 2005-12-11
  • 打赏
  • 举报
回复
关注
califord 2005-12-11
  • 打赏
  • 举报
回复
要是你有更好的想法,那也告诉我呀,你告诉我用什么控件,怎么用,代码是什么样的?
califord 2005-12-11
  • 打赏
  • 举报
回复
可是我不知道API呀,楼上的大哥能不能帮我给出具体的代码?
加载更多回复(1)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧