怎样编写关机语言(VB) 急急...........

tangwei2000 2002-12-30 09:45:07
怎样编写关机语言(VB)
...全文
165 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartluwei 2003-01-30
  • 打赏
  • 举报
回复
这样,用shell运行那个叫rundll32的。
li3807 2003-01-20
  • 打赏
  • 举报
回复
这个能关WIN2K吗????
theMost 2003-01-11
  • 打赏
  • 举报
回复
Option Explicit

Dim mDattime As Date

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

Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As Long, ReturnLength As Long) As Long
Private Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LARGE_INTEGER) As Long

Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const EWX_LOGOFF = 0 '中止进程,然后注销
Private Const EWX_POWEROFF = 8 '关掉系统电源
Private Const EWX_SHUTDOWN = 1 '关闭系统
Private Const EWX_REBOOT = 2 '重新引导系统
Private Const EWX_FORCE = 4 '强迫中止没有响应的进程
Private Const EWX_FORCEIFHUNG = 16 '如果应用程序已挂起,强制关闭

Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
Private Const SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000

Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY_SOURCE = &H10
Private Const TOKEN_QUERY = &H8

Private Const ANYSIZE_ARRAY = 1

Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"

Private Const PROCESS_SET_INFORMATION = &H200
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type

Private Type LUID
lowpart As Long
highpart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(0) As LUID_AND_ATTRIBUTES
End Type

Dim Opt As Long

Private Sub Shutdown(Optional Mode As Long = EWX_POWEROFF)
Dim lAPIReturn As Long
Dim tTOKPRI As TOKEN_PRIVILEGES
Dim tLUID As LUID
Dim tLarInt As LARGE_INTEGER
Dim lRequired As Long
Dim hTokHan As Long
Dim hProcess As Long

If LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, tLarInt) = 0 Then
MsgBox "Get LUID error!", vbOKOnly, "Error"
Exit Sub
End If

tLUID.highpart = tLarInt.highpart
tLUID.lowpart = tLarInt.lowpart

tTOKPRI.PrivilegeCount = 1
tTOKPRI.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
tTOKPRI.Privileges(0).pLuid = tLUID

hProcess = GetCurrentProcess()
lAPIReturn = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hTokHan)
lAPIReturn = AdjustTokenPrivileges(hTokHan, 0, tTOKPRI, Len(tTOKPRI), 0, 0)
lAPIReturn = ExitWindowsEx(Mode, 0)
If lAPIReturn = 0 Then
MsgBox "Function calling error!", vbOKOnly, "错误"
End If

lAPIReturn = CloseHandle(hTokHan)
Unload Me
End Sub

////////////////////////////////////////////////

将:上面程序的常量定义部分的
Private Const EWX_POWEROFF = 8 '关掉系统电源
中的8改为5,6,8,7,9,10。。。。每一个都试一下。
保证有一个可以实现!
///////////////////////////////////////////////////////
liangfang 2003-01-09
  • 打赏
  • 举报
回复
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

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

Const EWX_SHUTDOWN = 1


Const EWX_POWEROFF=8'常数


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 Command1_Click()'引发事件
AdjustToken'如果是WIN98 可不用这个
ExitWindowsEx EWX_SHUTDOWN, 0
'是 ATX 电源 就改为这个 EWX_POWEROFF


End Sub
980 2003-01-05
  • 打赏
  • 举报
回复

   1.定时。可以用VB中的Timer控件结合计算机的系统时间来进行精确的定时。
   2.关闭计算机。这可以调用Win32 API函数 ExitWindowsEx 来关闭计算机。---

  下面首先来说明一下 ExitWindowsEx 函数,该函数在VB中的声明如下:

Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" _
  (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

【返回值】
    Long,非零表示成功,零表示失败。
【参数表】
    uFlags --------- Long,
  指定下述一个或多个标志(用OR运算符合并到一起)
    EWX_FORCE=4
  强迫中止没有响应的进程
    EWX_LOGOFF=0
  中止进程,然后注销
    EWX_SHUTDOWN=1
  关掉系统电源(如果可能的话,ATX电源就可以)
    EWX_REBOOT=2 重新引导系统
    dwReserved ----- Long,保留,设为零
  好了,现在可以开始编程了。

  1. 新建一个标准EXE工程。
  2. 在窗体上放置一个TextBox控件,用以输入定时时间。
  3. 在TextBox控件之下放置两个OptionButton控件,组成控件数组,用以选择定时模式。
  4. 在OptionButton控件之下放置一个CommandButton.
  5. 随便在窗体的某地方放置一Timer控件。

  以上控件了需要设置的属性值如下:

对象 属性 设置
Text1 Text 空
Option1(0) Caption 在指定时间关机
(时间格式:00:00:00)
Index 0
Option1(1) Caption 延迟指定的时间关机
Index 0
Command1 Caption 确定
Timer1 Interval 15000(精确到1/4分钟,如要更精确可减少该值)
Enabled False

  增加代码如下:

标准模块:
Option Explicit
Public Const EWX_SHUTDOWN = 1 '关闭系统

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

窗体模块:

Option Explicit
Dim txtTime   '保存输入时间
Dim nowTime   '保存实时时间
Dim oldTime   '保存开始定时时间

Private Sub Command1_Click()
  oldTime = Time
  If Not IsDate(Text1.Text) Then '用IsData函数判断输入的时间格式
    MsgBox "你所输入的不是时间格式,请重试!", , "Wrong"
  Else
    txtTime = TimeValue(Text1.Text)
  End If
  Timer1.Enabled = True  '启动定时器
  Me.WindowState = 1   '最小化窗体
End Sub

Private Sub Timer1_Timer()
  nowTime = Time
  If Option1(0).Value Then
    If DateDiff("s", nowTime, txtTime) Then
     If DateDiff("s", nowTime, txtTime) < 0 Then
      '用DateDiff函数判断是否到时间了
       If Not ExitWindowsEx(EWX_SHUTDOWN, 0) Then
         MsgBox "无法关闭计算机"
       End If
     End If
    ElseIf DateDiff("s", nowTime, oldTime + txtTime) < 0 Then
     If Not ExitWindowsEx(EWX_SHUTDOWN, 0) Then
        MsgBox "无法关闭计算机"
     End If
    End If
   End If
End Sub

  结束语:以上程序在VB5.0/6.0和Win98上调试通过。其实,此程序还可增加一些花样,譬如,最后窗体不是最小化,而是调用Win32 API函数,把她的图标放在系统任务栏里,即在右下角有声音,时间等图标的地方,那是另外一个主题了。

  (版主注:此文有bug,Command1_Click过程改为下述代码为好)

附:

Private Sub Command1_Click()
  oldTime = Time
  If Not IsDate(Text1.Text) Then '用IsData函数判断输入的时间格式
    MsgBox "你所输入的不是时间格式,请重试!", , "Wrong"
  Else
    txtTime = TimeValue(Text1.Text)
    Timer1.Enabled = True  '启动定时器
    Me.WindowState = 1   '最小化窗体
  End If
End Sub
这是定时关机代码
liubingqian 2003-01-03
  • 打赏
  • 举报
回复
调用API函数ExitWindowsEx
chenyu5188 2003-01-01
  • 打赏
  • 举报
回复
用API函数哈

Laney 2003-01-01
  • 打赏
  • 举报
回复
调用api,
去找以前的帖子把,里面很详细!
liuks 2003-01-01
  • 打赏
  • 举报
回复
用API
zyl910 2002-12-30
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18622
jinesc 2002-12-30
  • 打赏
  • 举报
回复
http://jinesc.6600.org/myweb/disp.asp?idd=253&room=1020
基于PID优化和矢量控制装置的四旋翼无人机(Matlab&Simulink实现)内容概要:本文详细介绍了基于PID优化和矢量控制装置的四旋翼无人机控制系统的设计与Matlab&Simulink实现方法。通过建立四旋翼无人机的动力学模型,结合PID控制算法进行姿态调节,并引入矢量控制策略提升飞行稳定性与响应精度。文中涵盖了系统建模、控制器设计、参数整定及仿真验证全过程,重点展示了如何利用Matlab/Simulink工具对俯仰、横滚、偏航和高度四个自由度进行闭环控制仿真,分析了PID参数优化对系统动态性能的影响,同时探讨了矢量控制在多输入多输出非线性系统中的应用优势。该研究为无人机飞控系统的开发提供了完整的理论支持与实践参考。; 适合人群:具备自动控制理论基础、Matlab/Simulink仿真技能及相关工程背景的高校研究生、科研人员及从事无人机控制系统开发的工程师。; 使用场景及目标:①用于教学与科研中理解四旋翼无人机飞行控制原理;②为无人机飞控系统的设计与优化提供可复现的仿真平台;③支持进一步研究先进控制策略(如LQR、MPC)在无人机中的应用。; 阅读建议:建议读者结合文中提供的Matlab代码与Simulink模型文件同步操作,逐步完成建模与仿真过程,并尝试调整PID参数以观察系统响应变化,加深对控制理论实际应用的理解。
内容概要:本文系统研究双端VSC-HVDC背靠背换流站的PWM调制机理、有功与无功功率的独立调控策略以及系统在故障条件下的穿越能力,基于Simulink平台构建完整的仿真模型,深入剖析电压源型换流器(VSC)的工作原理与控制特性。研究重点涵盖PWM调制对输出电压波形质量的影响机制,采用d-q坐标系下的解耦控制实现有功与无功功率的精确独立调节,并通过仿真验证系统在电网扰动或短路故障等异常工况下维持稳定运行的能力,即故障穿越性能。全文结合理论分析与仿真实验,全面展示控制策略的有效性、动态响应特性及系统鲁棒性。; 适合人群:电力系统、电气工程及其自动化等相关专业的研究生、科研人员及从事高压直流输电系统设计、运行与维护的工程技术人员。; 使用场景及目标:①深入理解VSC-HVDC系统的核心工作原理与先进控制技术;②掌握基于Simulink的电力电子变换系统建模、控制算法设计与仿真分析方法;③为新能源大规模并网、柔性输电系统开发及电网稳定性提升等前沿课题提供扎实的理论依据与可行的技术仿真方案。; 阅读建议:建议读者结合Simulink仿真环境进行实践操作,重点关注PWM信号生成、锁相环(PLL)、d-q坐标变换、电流内环与功率外环解耦控制等关键模块的设计与参数整定,通过设置不同运行工况和故障场景,观察系统动态响应,从而深化对VSC-HVDC控制机理与故障穿越策略的理解。
内容概要:本文围绕12伏直流风扇的无线电力传输系统展开研究,基于Simulink平台构建完整的系统仿真模型,实现电能的非接触式传输。文章系统阐述了无线电力传输的整体架构,深入分析了能量发射端与接收端之间的电磁耦合机制,重点探讨了谐振匹配设计、感应线圈参数优化以及整流稳压电路对输出性能的影响。通过精确建模与仿真,验证了该系统在特定空间距离和对准条件下,能够高效、稳定地驱动12V直流风扇,展现出良好的能量传输效率与系统鲁棒性,为非接触供电技术的实际应用提供了有效的仿真验证方案。; 适合人群:具备一定电力电子技术、电磁场理论及自动控制原理基础知识的本科高年级学生、研究生,以及从事无线充电、电力电子变换和新能源供电系统研发的工程技术人员。; 使用场景及目标:①作为高校相关课程的教学案例,直观演示无线电力传输的基本原理与关键技术实现;②为小型电子设备、智能家居产品或特定工业场景的无线供电方案设计提供可靠的仿真验证平台;③支持科研人员对谐振耦合、阻抗匹配等核心问题进行深入研究,推动非接触式供电技术的优化与创新。; 阅读建议:读者在学习过程中应紧密结合所提供的Simulink仿真模型,深入理解各功能模块(如逆变电路、谐振网络、整流滤波)的参数设置及其对整体系统性能的影响,建议通过调整线圈间距、谐振频率、负载大小等关键变量进行对比仿真,观察系统输出响应的变化,从而全面掌握无线电力传输系统的设计要点、性能评估方法及优化策略。

2,506

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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