VB中 事件过程只能由系统调用,在程序中不能直接调用

VB中 事件过程只能由系统调用,在程序中不能直接调用,第1张

VB语言系统本身提供了相当的可直接调用的过程,如事件过程和内部函数。

在Visual Basic 60中,过程包含以下几种类型:

Sub过程(子过程):只能完成一定的 *** 作和功能,不能通过过程名返回值。

Function过程(函数过程):除了能完成一定的功能外,还能通过过程名返回值。

Property过程(属性过程):用于向对象添加属性。

Private Sub Command1_Click()

MePrint "123"

End Sub

Private Sub Form_DblClick()

Call Command1_Click

End Sub

程序表明的是在名称为Command1的命令按钮控件的单击事件过程体中添加了语句MePrint“123”,说明当单击Command1命令按钮,触发了该事件过程,就能执行此语句,也就产生在当前窗体上输出字符串“123”的效果。

这就说明事件过程可以被直接调用

'四个CommandBox控件,分别为:重新启动计算机、关闭计算机、注销计算机、退出。纯VB

Option Explicit

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 TOKEN_ADJUST_PRIVILEGES = &H20

Const TOKEN_QUERY = &H8

Const SE_PRIVILEGE_ENABLED = &H2

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 uFlags As Long, ByVal dwReserved As Long) As Long

Const HELP_CONTENTS = &H3&

Const EWX_WAIT = 16

Const EWX_REBOOT = 2 '重起

Const EWX_LOGOFF = 0 '注销

Const EWX_FORCE = 4 '终止没有响应的进程

Const EWX_SHUTDOWN = 8 '关闭电源

Private Sub Command1_Click()

'重新启动计算机

ExitWindowsEx EWX_REBOOT, 0

End Sub

Private Sub Command2_Click()

'关闭计算机

ExitWindowsEx EWX_FORCE Or EWX_SHUTDOWN, 0

End Sub

Private Sub Command3_Click()

End

End Sub

Private Sub Command4_Click()

ExitWindowsEx EWX_LOGOFF, 0

End Sub

Private Sub Form_Load()

Dim hProcessHandle As Long

Dim hTokenHandle As Long

Dim tmpLuid As LUID

Dim tkpNew As TOKEN_PRIVILEGES

Dim tkpPrevious As TOKEN_PRIVILEGES

Dim lBufferNeeded As Long

'获取当前进程的一个伪句柄

hProcessHandle = GetCurrentProcess()

OpenProcessToken hProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hTokenHandle

LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid

tkpNewPrivilegeCount = 1

tkpNewTheLuid = tmpLuid

tkpNewAttributes = SE_PRIVILEGE_ENABLED

lBufferNeeded = 0

'允许当前应用程序有关闭 *** 作系统的权限

AdjustTokenPrivileges hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded

End Sub

private function checkexeisrun(byval exename as string) as boolean

dim ps

'枚举进程

For Each ps In GetObject("winmgmts:\\\root\cimv2:win32_process")instances_ 

'循环进程

If ucase(psname) = ucase(exename) then 

 checkexeisrunning = True  

 exit function

 end If

 next

 end function

private sub command1_click()

shell "Aexe" '调用Aexe

timer1enabled=true '启动计时器

end sub

private sub timer1_timer()

if checkexeisrun("aexe")=false then '"aexe"就是程序名

'你要执行的命令

end if

end sub

'计时器interval属性越小响应时间就越快,但不要调太小,否则可能会无响应。

以上就是关于VB中 事件过程只能由系统调用,在程序中不能直接调用全部的内容,包括:VB中 事件过程只能由系统调用,在程序中不能直接调用、VB中如何调用dos命令。、怎么让vb调用一个外部程序(A.exe),A.exe关闭后自动再执行另一条命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9673151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存