GetWindowRect
'寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题)
private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
private Declare Function GetWindowRect Lib "user32" _
Alias "GetWindowRect" (ByVal hwnd As Long, _
lpRect As RECT) As Long
查找以上API函数功能 用法 就可以达到你的功能
比如我安装了一个游戏.我用一个按钮来运行指定的游戏exe.但是我安装的路径和别人不同.要怎样自动获取程序位置.直接把代码发来.并解释一下复制去Google翻译翻译结果
这要首先要在注册表中查找了
注册表路径为 HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion\Uninstall
能找到所有程序的列表 当然除了绿色软件.正常安装的都会有
这里的路径也是卸载程序的,但有目录了 就可以查找一下你的程序名来找到你要运行的程序
读取注册表的 API太多 如你所说 Google去 一般都是以Reg开头的
如果你的程序是后者 这里没有你的程序 那你只有一个目录一个目录查找了.一般默认的也不多
查找一般为 Dir函数
递归目录,逐盘逐目录查找,下面是查找指定文件夹下面的所有文件和其子目录下的文件:
''=============================================
''名称: FindPath
''作用: 查找指定文件夹下面的所有文件和其子目录下的文件
''参数:strPath 要查找的目录,
'' strFiles 用于存查找结果的缓冲区,String 类型的动态数组,调用时事先初始化, 如Redim strFiles(0)
'' FileCount 用于返回文件个数
''=============================================
Public Sub FindPath(ByVal strPath As String, strFiles() As String, FileCount As Long)
Dim strDirs() As String
Dim strResult As String
Dim FileLimit As Long
Dim dirLimit As Long
Dim dirCount As Long
Dim I As Long
FileLimit = UBound(strFiles) + 1
dirLimit = 0
If Right$(strPath, 1) <> "/" Then strPath = strPath & "/"
strResult = Dir(strPath, vbDirectory + vbSystem + vbReadOnly + vbHidden + vbNormal + vbArchive)
Do While Len(strResult) > 0
If strResult <> "." And strResult <> ".." Then
If (GetAttr(strPath & strResult) And vbDirectory) <> vbDirectory Then
If FileCount >= FileLimit Then
ReDim Preserve strFiles(FileLimit + 10)
FileLimit = FileLimit + 10
End If
strFiles(FileCount) = strPath & strResult
FileCount = FileCount + 1
Else
If dirCount >= dirLimit Then
ReDim Preserve strDirs(dirLimit + 10)
dirLimit = dirLimit + 10
End If
strDirs(dirCount) = strPath & strResult
dirCount = dirCount + 1
End If
End If
strResult = Dir(, vbDirectory + vbSystem + vbReadOnly + vbHidden + vbNormal + vbArchive)
Loop
For I = 0 To dirCount - 1
Call FindPath(strDirs(I), strFiles, FileCount)
Next I
End Sub
建议直接让用户输入, 或用户在文件对话框中去挑选。
不懂..复制去Google翻译翻译结果