请问一下,怎样在vb6.0中实现自动关闭计算机(操作系统是:windows2000)
解决方案 »
- 求助:c#封装海康DS40xxSDK时 openstream方法中的三个参数如何获得
- PVOID p0, p1翻译成VB 怎么翻译?
- 我在Form1窗体里通过代码给Form2体里的Text1控件赋值时为什么要调用Form2的Form_Load事件,我不想让触发Load事件该怎么办?
- 请高手出山相助!我在excel遇到了一些问题由于数据不统一我想进行批量修改如何做!
- 请问用Installshield8.0打的VB安装程序(msi)如何在开始菜单中加入"卸载"这一项?
- 高手请进!!
- 编译错:label not defined!
- 请教一个粗浅问题!
- 请教一个关于webbrowser的session的问题.
- 大家快来! 谁愿意加盟本公司开发小组的朋友请留下E-MAIL.
- 我想兼职,不知谁有项目或有这样网站,请告知
- 在双击TDBGird时,不知如何获取正确的行号.目的在于在其他窗口显示相关记录的详细信息.
一、关于Rundll32.exe
过去,你曾经为了自己编的文件管理器能Format 磁盘、浏览器能自动拨号连接而求助于那位高傲的 API。现在,Rundll32.exe向你提供了更为平易近人的 方法来实现这些功能。
例如,要调用关机程序则为:shell “rundll32.exe user.exe,exitwindOws”。
调用模块 命 令 结 果
rundll32.exe shell32.dll,Control_RunDLL 打开控制面板
SHELL32.DLL
rundll32.exe shell32,SHHelpShortcuts_Rundll PrintersFolder 打开打印机文件夹
rundll32.exe shell32,SHHelpShortcuts_Rundll FontsFolder 打开字体文件夹
rundll32.exe shell32,SHHelpShortcuts_Rundll AddPrinter 添加新打印机向导
rundll32.exe shell32,SHformatDrive 格式化软盘
SYSDM.CPL
rundll32.exe shell32,Control_RunDLL sysdm.cpl 系统属性,常规
rundll32.exe shell32,Control_RunDLL sysdm.cpl,,l 系统属性,设备管理器
rundll32.exe shell32,Control_RunDLL sysdm.cpl,,3 系统属性,性能
rundll32.exe shell32,Control_RunDLL sysdm.cpl @1 添加新硬件向导
APPWIZ.CPL
rundll32.exe shell32,Control_RunDLL appwiz.cpl,,1 添加/删除程序
rundll32.exe shell32,Control_RunDLL appwiz.cpl,,2 安装Windows部件
rundll32.exe shell32,Control_RunDLL appwiz.cpl,,3 制作启动盘
DISKCOPY.DLL
rundll32.exe diskcopy.dll,DiskcopyRundll 复制磁盘
RNAUI.DLL
rundll32.exe rnaui.dll,RnaDial x (x为连接名称) 打开拨号边接对话框,若已连接,则显示连接状态对话框
rundll32.exe rnaui.dll,RnaWizard 新建拨号连接向导
DESK.CPL
rundll32.exe shell32,Control_RunDLL desk.cpl,,0 选择桌面背景
rundll32.exe shell32,Control_RunDLL desk.cpl,,1 选择屏幕保护
rundll32.exe shell32,Control_RunDLL desk.cpl,,2 选择外观
rundll32.exe shell32,Control_RunDLL desk.cpl,,3 设置显示属性
MAIN.CPL
rundll32.exe shell32,Control_RunDLL main.cpl @0 设置鼠标属性
rundll32.exe shell32,Control_RunDLL main.cpl @1 设置键盘属性,速度
rundll32.exe shell32,Control_RunDLL main.cpl @1,,1 设置键盘属性,语言
rundll32.exe shell32,Control_RunDLL main.cpl @2 打开打印机文件夹
rundll32.exe shell32,Control_RunDLL main.cpl @3 打开字体属性
rundll32.exe shell32,Control_RunDLL main.cpl @4 设置输入法
MODEM.CPL
rundll32.exe shell32,Control_RunDLL modem.cpl,,add 添加调制解调器向导
MMSYS.CPL
rundll32.exe shell32,Control_RunDLL mmsys.cpl @1 设置声音属性(也可以加入,,0到,,4的参数以选择不同的标签)
UESR.EXE
rundll32.exe user.exe,exitwindows 关闭计算机
声明:
Declare Function AdjustTokenPrivileges Lib "advapi32.dll" Alias "AdjustTokenPrivileges" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Declare Function OpenProcessToken Lib "advapi32.dll" Alias "OpenProcessToken" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
这是一个例子:
Option Explicit
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
'Beginning of Code
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_FORCE As Long = 4
Private Const EWX_REBOOT = 2
Private Declare Function ExitWindowsEx Lib "user32" ( _
ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" ( _
ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, _
ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" ( _
ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _
PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Sub AdjustToken()
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _
TOKEN_QUERY), hdlTokenHandle
' Get the LUID for shutdown privilege.
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1 ' One privilege to set
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
' Enable the shutdown privilege in the access token of this
' process.
AdjustTokenPrivileges hdlTokenHandle, False, tkp, _
Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
End Sub
Private Sub cmdForceShutdown_Click()
AdjustToken
ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF
End Sub