当前位置:编程学习 > VB >>

关于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的全路径(如果存在的话) --------------------编程问答--------------------
引用 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界面。 --------------------编程问答--------------------
引用 6 楼 tiger_zhao 的回复:
钱自己赚,程序自己改。

只是学习而已,不是赚钱。真的。 --------------------编程问答-------------------- ren ne? --------------------编程问答--------------------
引用 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界面。

你没试怎么知道我这个不能搜索整个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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,