关于VB全盘搜索指定EXE文件并打开的问题。请能人解决!谢谢。

xiangainia 2009-12-23 01:12:59
用VB写了一个小外挂,请教有才的高手。在第三步 登陆游戏的时候会自动搜索硬盘里各个分区指定的EXE文件并且打开

当点击该按钮后,已经成功搜索。但是 VB程序界面会自动关闭。请问如果才能 搜索打开指定的EXE文件后 VB界面(外挂)不关闭。
我添加了一个模块。一个COMMAND命令
详细如下:
按钮添加VB代码

Private Sub Command8_Click() '查找文件
Dim a&, b&
On Error Resume Next
MousePointer = vbHourglass
SearchDirs ("c:\") '调用函数查找文件
SearchDirs ("d:\") '调用函数查找文件
SearchDirs ("e:\") '调用函数查找文件
SearchDirs ("f:\") '调用函数查找文件
MousePointer = vbDefault
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Set Form1 = Nothing
End

End Sub

Private Sub SearchDirs(filepath$)

Dim WFD As WIN32_FIND_DATA, hItem&, hFile&

Dim fileCount&
Dim dirCount&, i&
Dim dirArray$()

DoEvents

'查找第一个文件的API
hItem& = FindFirstFile(filepath$ & "*.*", WFD)

'FindFirstFile如果调用失败,则函数返回INVALID_HANDLE_VALUE
If hItem& <> INVALID_HANDLE_VALUE Then

Do
If (WFD.dwFileAttributes And vbDirectory) Then '如果搜索范围存在目录

' '排除 "." or ".." DOS 子目录,Asc(.)=46
If Asc(WFD.cFileName) <> 46 Then

'重新分配数组当目录数单位为10个块,加快操作速度
If (dirCount& Mod 10) = 0 Then ReDim Preserve dirArray(dirCount& + 10)
dirCount& = dirCount& + 1
'ReDim Preserve dirArray(dirCount&) ,也可以即时分配内存

dirArray(dirCount&) = Left$(WFD.cFileName, InStr(WFD.cFileName, vbNullChar) - 1)

End If

Else

fileCount& = fileCount& + 1

End If

'查找下一个文件
Loop While FindNextFile(hItem&, WFD) '获取下一个子目录
'关闭查找文件的句柄
Call FindClose(hItem&) '关闭FindFirstFile
End If
hFile& = FindFirstFile(filepath$ & "CSOLauncher.exe", WFD)
If hFile& <> INVALID_HANDLE_VALUE Then
Do
DoEvents
If Asc(WFD.cFileName) <> 46 Then
Shell (filepath$ & Left$(WFD.cFileName, InStr(WFD.cFileName, vbNullChar) - 1))
End
End If
Loop While FindNextFile(hFile&, WFD) ' 获取下一个文件
Call FindClose(hFile&)
End If
For i& = 1 To dirCount& '如果搜索目录下存在目录
SearchDirs filepath$ & dirArray(i&) & "\" '递归搜索
Next i&
Erase dirArray()
End Sub





模块代码为:

Option Explicit

Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const WM_CLOSE = &H10
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Function KILLIE(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim classname As String
Dim str5 As String
Dim len5 As Long, i As Long
str5 = String(255, 0)
len5 = 256
GetClassName hwnd, str5, 256
classname = Left(str5, InStr(1, str5, Chr(0)) - 1)
Debug.Print classname
If classname = "IEFrame" Then
PostMessage hwnd, WM_CLOSE, 0&, 0&
End If
KILLIE = True
End Function



请问如何才能 搜索到EXE并且打开 而不关闭外挂界面!谢谢。请只招~
...全文
385 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
赵4老师 2009-12-24
更正一下:

shell("cmd /c dir /s /b /a-d c:\CSOLauncher.exe >c:\out.txt")
shell("cmd /c dir /s /b /a-d d:\CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d e:\CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d f:\CSOLauncher.exe >>c:\out.txt")
然后从文件c:\out.txt里面读CSOLauncher.exe的全路径(如果存在的话)
回复
赵4老师 2009-12-24
[Quote=引用 8 楼 xiangainia 的回复:]
引用 7 楼 zhao4zhong1 的回复:

shell("cmd /c dir /s /b /a-d c:CSOLauncher.exe >c:\out.txt")
shell("cmd /c dir /s /b /a-d d:CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d e:CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d f:CSOLauncher.exe >>c:\out.txt")
然后从文件c:\out.txt里面读CSOLauncher.exe的全路径(如果存在的话)


你说的是直接搜索某个文件夹。
我要的是 搜索整个磁盘的里面含有指定的EXE

在任何电脑上搜索 然后运行 且还不关闭VB界面。
[/Quote]
你没试怎么知道我这个不能搜索整个c:d:e:f:磁盘里面哪里含有CSOLauncher.exe呢?
回复
xiangainia 2009-12-23
ren ne?
回复
xiangainia 2009-12-23
[Quote=引用 6 楼 tiger_zhao 的回复:]
钱自己赚,程序自己改。
[/Quote]
只是学习而已,不是赚钱。真的。
回复
xiangainia 2009-12-23
[Quote=引用 7 楼 zhao4zhong1 的回复:]

shell("cmd /c dir /s /b /a-d c:CSOLauncher.exe >c:\out.txt")
shell("cmd /c dir /s /b /a-d d:CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d e:CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d f:CSOLauncher.exe >>c:\out.txt")
然后从文件c:\out.txt里面读CSOLauncher.exe的全路径(如果存在的话)
[/Quote]

你说的是直接搜索某个文件夹。
我要的是 搜索整个磁盘的里面含有指定的EXE

在任何电脑上搜索 然后运行 且还不关闭VB界面。
回复
赵4老师 2009-12-23

shell("cmd /c dir /s /b /a-d c:CSOLauncher.exe >c:\out.txt")
shell("cmd /c dir /s /b /a-d d:CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d e:CSOLauncher.exe >>c:\out.txt")
shell("cmd /c dir /s /b /a-d f:CSOLauncher.exe >>c:\out.txt")
然后从文件c:\out.txt里面读CSOLauncher.exe的全路径(如果存在的话)
回复
Tiger_Zhao 2009-12-23
钱自己赚,程序自己改。
回复
xiangainia 2009-12-23
请问楼上的老鸟。能帮我改改吗?我很感激你。
主要是VB基础不太好。谢谢了。
回复
Tiger_Zhao 2009-12-23
递归改非递归是基本功。
将目录的完整路径加入 dirArray。
将 dirArray 数组看成队列或堆栈,只要非空,就取一个目录进行查找。
回复
xiangainia 2009-12-23
有高手吗?
回复
xiangainia 2009-12-23
请问如何修改,能详细点吗
最好有源码。谢谢了!!!
回复
Tiger_Zhao 2009-12-23
可能 SearchDirs 递归调用的层次太多,堆栈溢出导出程序崩溃。
改用非递归的方式。
回复
相关推荐
发帖
API
创建于2007-09-28

1466

社区成员

VB API
申请成为版主
帖子事件
创建了帖子
2009-12-23 01:12
社区公告
暂无公告