Option Explicit Dim MyPath As StringPrivate Sub Command1_Click() Unload Me End SubPrivate Sub Form_Load() MyPath = App.Path & "\" & App.EXEName & ".exe" End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If UnloadMode = 1 Then Cancel = False ElseIf UnloadMode = 3 Then Shell MyPath Else Cancel = True End If End Sub临时写的,见笑了
Dim sCmd As String Dim eName As StringPrivate Sub Form_Load() eName = App.EXEName & ".exe" sCmd = Command If sCmd <> "" Then Me.Hide App.TaskVisible = False Else Shell (App.Path & "\" & eName & " 1") End If End SubPrivate Sub Timer1_Timer() Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colprocesslist = objWMIService.ExecQuery("SELECT * FROM Win32_Process where name='" & eName & "'") If colprocesslist.Count < 2 Then Shell (App.Path & "\" & eName & " 1") Me.Show End If End Sub以上代码还没有关闭功能,如果没有冰刃之类的利器那就只有关机
加上关闭功能 Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long Private Sub Command1_Click() Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colprocesslist = objWMIService.ExecQuery("SELECT * FROM Win32_Process where name='" & eName & "' and handle<>" & GetCurrentProcessId) For Each objProcess In colprocesslist objProcess.Terminate Next End End Sub
此技术不用汇编,用纯VB就可以了
等一下我把源代码给你COPY上来
Dim MyPath As StringPrivate Sub Command1_Click()
Unload Me
End SubPrivate Sub Form_Load()
MyPath = App.Path & "\" & App.EXEName & ".exe"
End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 1 Then
Cancel = False
ElseIf UnloadMode = 3 Then
Shell MyPath
Else
Cancel = True
End If
End Sub临时写的,见笑了
希望能发源代码给我,谢谢!
谢谢!
改天有时间弄个给你,当然与你所给的可能会有点区别,不过大部分功能会一样,到时发到你的邮箱中去
在这里找了一个……
在Unload时间中在为自己创建一个进程,不就关不掉了.
去年写过一个两个程序相互监视的,结束掉其中一个,另外一个就启动它,呵呵
用两个进程,一个是隐藏的,不过我已把它们都关了。
我首先用icesword查看进程ID,然后用ntsd -c q -p ID
杀死隐藏的哪个进程,然后再用icesword杀死另一个
比起来哪些杀毒软件的进程,好杀多了.不过我还是得用好工具:Icesword
期待!!!另:Unload事件在应用程序列表中结束时会激发此事件,在进程列表结束时是不会激发的
好的办法还是得拦截API
[email protected]
[email protected]
Thanks!!!!!!!!!!!
TerminateProcess
PostQuitMessage
等API就行啦
Dim eName As StringPrivate Sub Form_Load()
eName = App.EXEName & ".exe"
sCmd = Command
If sCmd <> "" Then
Me.Hide
App.TaskVisible = False
Else
Shell (App.Path & "\" & eName & " 1")
End If
End SubPrivate Sub Timer1_Timer()
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colprocesslist = objWMIService.ExecQuery("SELECT * FROM Win32_Process where name='" & eName & "'")
If colprocesslist.Count < 2 Then
Shell (App.Path & "\" & eName & " 1")
Me.Show
End If
End Sub以上代码还没有关闭功能,如果没有冰刃之类的利器那就只有关机
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Sub Command1_Click()
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colprocesslist = objWMIService.ExecQuery("SELECT * FROM Win32_Process where name='" & eName & "' and handle<>" & GetCurrentProcessId)
For Each objProcess In colprocesslist
objProcess.Terminate
Next
End
End Sub
很多杀软会报毒.