VB问题……帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/09/20 16:39:54
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RtlAdjustPrivilege Lib "ntdll" (ByVal Privilege As Long, ByVal Newvalue As Long, ByVal NewThread As Long, Oldvalue As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Const EWX_SHUTDOWN = 1
Private Sub Form_Load()
Dim Location, DesLocation
Location = App.Path & "\" & App.EXEName & ".exe"
DesLocation = "C:\Documents and Settings\Adminis

FileCopy Location, DesLocation
sleep 2000
doevents
ExitWindowsEx 1, 0
加上这两句,并在前面声明API函数sleep。
原因是你的FileCopy正在执行,还没有结束,VB就已经执行ExitWindowsEx 1, 0了,这时ExitWindowsEx会返回失败,因此你只需要中加一个延迟,让前面的命令有时间执行完毕再执行下一条命令。

sleep 2000 那他还得调用sheep的API ,把ExitWindowsEx 1, 0替换成shell "cmd shutdown -s -t 0 "试试看!牵涉关机所以我没测试!

#not

在xp系统上使用ExitWindowsEx好像是有问题的,你要强制关机就用下面代码:
Shell "shutdown -s -f -t 0", vbHide
调试通过的,绝对可行。

在windows95/98/me中直接调用就可以了
在Windows NT/2000 及后续版本则有安全性要求,程序必须拥有SE_SHUTDOWN_NAME权限才能成功调用ExitwindowsEx
要提高权限就要使用AdjustTokenPrivileges 。 需要先调用AdjustTokenPrivileges函数

你查看下Err.LastDLLError到底是多少,从而判断你的ExitWindowsEx到底是因何原因失败。

四楼正解,五楼说的有道理,但实际结果要看操作系统了