关于VB全盘搜索指定EXE文件并打开的问题。请能人解决!谢谢。
用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并且打开 而不关闭外挂界面!谢谢。请只招~ --------------------编程问答-------------------- 可能 SearchDirs 递归调用的层次太多,堆栈溢出导出程序崩溃。
改用非递归的方式。 --------------------编程问答-------------------- 请问如何修改,能详细点吗
最好有源码。谢谢了!!! --------------------编程问答-------------------- 有高手吗? --------------------编程问答-------------------- 递归改非递归是基本功。
将目录的完整路径加入 dirArray。
将 dirArray 数组看成队列或堆栈,只要非空,就取一个目录进行查找。 --------------------编程问答-------------------- 请问楼上的老鸟。能帮我改改吗?我很感激你。
主要是VB基础不太好。谢谢了。 --------------------编程问答-------------------- 钱自己赚,程序自己改。 --------------------编程问答-------------------- 用
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界面。 --------------------编程问答--------------------
只是学习而已,不是赚钱。真的。 --------------------编程问答-------------------- ren ne? --------------------编程问答--------------------
你没试怎么知道我这个不能搜索整个c:d:e:f:磁盘里面哪里含有CSOLauncher.exe呢? --------------------编程问答-------------------- 更正一下:
用
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的全路径(如果存在的话)
补充:VB , API