关于用VB强制关闭程序

IWantItThatWay 2006-07-08 10:01:24
我做了个程序,其中有一部分需要把一个指定的3D网游强制关掉。我用的是先FindWindow,然后PostMessage WM_CLOSE信息的办法。可是这个3D网游在退出前有一提示框询问是否退出,我的程序一旦向这个网游发送WM_CLOSE,这个提示框就弹出。想问问各位有没有什么能将一个程序强制关掉(像在任务管理器里强制关掉一样),谢谢!
  用的是VB6
  用什么方法都可以,不过最好代码别太烦琐
...全文
436 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
VirtualDesktop 2006-07-09
  • 打赏
  • 举报
回复
lz搜索以下以前的帖4,大把的是~
一笑拔剑 2006-07-09
  • 打赏
  • 举报
回复
管理

然后把分输入 然后点给分

问你是不是要结帖 你点是就可以了
IWantItThatWay 2006-07-09
  • 打赏
  • 举报
回复
怎么给分?
一笑拔剑 2006-07-09
  • 打赏
  • 举报
回复
搞定就来分吧
IWantItThatWay 2006-07-09
  • 打赏
  • 举报
回复
还是3楼的简洁,其实我的程序里早把目标程序的句柄找好了
winHwnd = FindWindow(vbNullString, exetitle) 'exetitle应用程序的标题
一句话就解决,但是这种方法不灵活,要是那种不是固定标题的程序就完了
谢谢3楼
chenvb 2006-07-08
  • 打赏
  • 举报
回复
UP
一笑拔剑 2006-07-08
  • 打赏
  • 举报
回复
如果不能用你的程序启动
也可以用我下面的方法
代码要多点

Private Const MAX_PATH = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As Any) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As Any) As Long

Private Const TH32CS_SNAPHEAPLIST = &H1
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPTHREAD = &H4
Private Const TH32CS_SNAPMODULE = &H8
Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST + TH32CS_SNAPPROCESS + TH32CS_SNAPTHREAD + TH32CS_SNAPMODULE)
Private Const TH32CS_INHERIT = &H80000000


'Terminate Process Functions
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) 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
Const PROCESS_ALL_ACCESS = 1



'提升权限
Private Const ANYSIZE_ARRAY = 1
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
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(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long, ByVal fForce 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 STANDARD_RIGHTS_REQUIRED = &HF0000
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = (&H2)
Const TOKEN_IMPERSONATE = (&H4)

Const TOKEN_QUERY_SOURCE = (&H10)

Const TOKEN_ADJUST_GROUPS = (&H40)
Const TOKEN_ADJUST_DEFAULT = (&H80)
Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _
TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)


Private Sub Command1_Click()

'查找进程和终结进程
Dim hSnapshot As Long, lRet As Long, P As PROCESSENTRY32
Dim exitCode As Long
Dim myProcess As Long
Dim AppKill As Boolean

P.dwSize = Len(P)
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, ByVal 0)
If hSnapshot Then
lRet = Process32First(hSnapshot, P)
Do While lRet
If InStr(P.szExeFile, "WINLOGON.EXE") <> 0 Then '要关闭的程序在这里自己修改WINLOGON.EXE那个程序什么名字这里就是什么,但是要注意大小写
myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, P.th32ProcessID)
AppKill = TerminateProcess(myProcess, exitCode)
Call CloseHandle(myProcess)
End If
lRet = Process32Next(hSnapshot, P)
Loop
lRet = CloseHandle(hSnapshot)
End If
End Sub
一笑拔剑 2006-07-08
  • 打赏
  • 举报
回复
有个代码很少的办法
你只要用自己的程序运行他然后运行command7就可以了

Private Sub Command1_Click()
a = Shell("calc.exe", 1)
AppActivate a
End Sub

Private Sub Command7_Click()
itshandle = OpenProcess(1, -1, a)
TerminateProcess itshandle, 0
CloseHandle itshandle
End Sub
一笑拔剑 2006-07-08
  • 打赏
  • 举报
回复
可以
直接杀掉对方的进程即可

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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