xiaosan000 发表于 2011-12-15 12:56:33

如何查找QQ.exe再我电脑哪个盘符,然后再进行调用呢?谢谢

只能从注册表判断吗?能不能对盘符搜索呢。谢谢啦。

epac 发表于 2011-12-15 13:22:01

不知道呢……

兔子先生 发表于 2011-12-15 13:36:41

对盘符搜索太耗时间了

afan 发表于 2011-12-15 13:53:20

在注册表中存在相关信息是运行QQ.exe的基本条件。既然如此,为何不读取注册表呢?

zldfsz 发表于 2011-12-15 13:53:29

先查找C:\Documents and Settings\Administrator\「开始」菜单\程序\腾讯软件\QQ2011里QQ的快捷方式,再根据快捷方式判断在那个位置

xiaosan000 发表于 2011-12-15 14:22:41

若是从注册表读取的话,是不是也很慢呢,谢谢了。zldfsz若是按你的那种办法,这咋写呢?

afan 发表于 2011-12-15 14:31:05

MsgBox(0, '', StringRegExpReplace(RegRead('HKEY_CLASSES_ROOT\Tencent\DefaultIcon', ''), '[^\\]+$', '') & 'QQ.exe')

zldfsz 发表于 2011-12-15 15:30:11

本帖最后由 zldfsz 于 2011-12-15 15:49 编辑

回复 6# xiaosan000


    其实推荐用A版的那个,比较简洁,我的这个也可以参考一下$lnk=@ProgramsDir & "\腾讯软件\QQ2011\腾讯QQ2011.lnk";快捷方式路径,根据QQ版本不同会有变化
        Local $details = FileGetShortcut($lnk);获取该快捷方式的各种属性
If @error Then;如果错误,提示找不到
        MsgBox(0, "QQ路径", "未找到该路径")
Else;否则返回快捷方式的目标路径
        MsgBox(0, "QQ路径:", $details)
EndIf

qqgghh1 发表于 2011-12-15 15:59:39

送给你,绿色版QQ也可以找到,改了软件名那就没法了。全盘找,你累不
#include <File.au3>
$var = DriveGetDrive( "all" );所有盘符名称
If NOT @error Then
      For $i = 1 to $var
                _Filefind($var[$i]);针对每个盘符进行搜索
      Next
EndIf


Func _Filefind($_Path)
      $folder = _FileListToArray($_Path, "*", 2);找文件夹
      If Not IsArray($folder) Then Return 0
      For $i = 1 To $folder
                        $newPath = $_Path & "\" & $folder[$i]
                        $file = _FileListToArray($newPath, "QQ.EXE", 1);找QQ.EXE
                        If @error = 0 Then
                              MsgBox(0,0,$newPath) ;满足条件的文件的路径
                              ShellExecute($newPath&"\QQ.EXE",0);打开此文件
                        Else
                              _Filefind($newPath);当前目录下找不到再继续其它路径找
                        EndIf
                Next
EndFunc

流浪628 发表于 2011-12-15 16:32:32

$pid=ProcessExists("QQ.exe")
MsgBox(0, '', _ProcessGetLocation($pid))

Func _ProcessGetLocation($iPID)
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
    If $aProc = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc, 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc, 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
    If StringLen($aReturn) = 0 Then Return SetError(2, 0, '')
    Return $aReturn
EndFunc

给你这段代码?它能自动把QQ的运行路径梳出来。

流浪628 发表于 2011-12-15 16:41:49

回复 9# qqgghh1


    这是什么呀,运行后除了没有报错,其它的什么就都没有了

qqgghh1 发表于 2011-12-15 16:45:44

回复 11# 流浪628


    你不是要全盘找QQ.EXE吗

qqgghh1 发表于 2011-12-15 16:45:49

回复 11# 流浪628


    你不是要全盘找QQ.EXE吗

流浪628 发表于 2011-12-15 16:46:27

回复 8# zldfsz


    你这个不好用,我QQ在运行呢,这个图标是上面代码运行的结果,都什么都没有。

流浪628 发表于 2011-12-15 16:48:21

回复 7# afan


    这段代码是好用的,我验正过了
页: [1] 2
查看完整版本: 如何查找QQ.exe再我电脑哪个盘符,然后再进行调用呢?谢谢