VB的问题(关于VB启动游戏)

[复制链接]
查看11 | 回复1 | 2007-7-15 09:48:17 | 显示全部楼层 |阅读模式
不复杂的一个问题用SHELL函数会返回一个进程的PID值。而WINDOWS自身有一个程序叫"taskkill.exe"可以结束进程。这样编程就好了:Dim GamePID As IntegerPrivate Sub Command1_Click()
GamePID = Shell("游戏路径")
Command2.Enabled = True
Command1.Enabled = FalseEnd SubPrivate Sub Command2_Click()
Shell ("taskkill.exe /pid " & GamePID)
Command2.Enabled = False
Command1.Enabled = TrueEnd SubPrivate Sub Form_Load()
Command1.Caption = "Start"
Command2.Caption = "End"End SubPrivate Sub Form_Unload(Cancel As Integer) '程序关闭时结束游戏进程
Call Command2_ClickEnd Sub
回复

使用道具 举报

千问 | 2007-7-15 09:48:17 | 显示全部楼层
'API声明:Private Type PROCESSENTRY32
dwSizeAs Long
cntUsageAs Long
th32ProcessIDAs Long
th32DefaultHeapIDAs Long
th32ModuleIDAs Long
cntThreadsAs Long
th32ParentProcessIDAs Long
pcPriClassBaseAs Long
dwFlagsAs Long
szExeFileAs String * 1024End TypeConst TH32CS_SNAPHEAPLIST = &H1Const TH32CS_SNAPPROCESS = &H2Const TH32CS_SNAPTHREAD = &H4Const TH32CS_SNAPMODULE = &H8Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)Const TH32CS_INHERIT = &H80000000Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As LongPrivate Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long'运行exe的子程序Private Sub runexe(ByVal exename as String)Call Shell("rundll32.exe url.dll,FileProtocolHandler " & exename, vbMaximizedFocus)End Sub'结束进程的子程序Private Sub Terminate(ByVal procname As String)Dim strdata As StringDim my As PROCESSENTRY32Dim l As LongDim l1 As LongDim mName As StringDim i As Integer, pid As Longl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)If l Then
my.dwSize = 1060
If (Process32First(l, my)) Then
Do
i = InStr(1, my.szExeFile, Chr(0))
mName = LCase(Left(my.szExeFile, i - 1))
If mName = LCase(procname) Then
pid = my.th32ProcessID
Dim procID as Long
procID=OpenProcess(1,-1,pid)
TerminateProcess procID,0
exit sub
End If
Loop Until (Process32Next(l, my) < 1)
End If
l1 = CloseHandle(l)End Iffun_FindProcess = 0'窗体代码private sub cmd_start_Click()'点击了打开游戏按钮'假设游戏的.exe文件的绝对路径为Path(例如"C:\1.exe").runexe pathEnd subPrivate sub Form_Unload()'窗体卸载时关闭游戏Terminate XXX 'XXX为游戏进程的名字End sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行