rt

解决方案 »

  1.   

    Option ExplicitPrivate Declare Function RegQueryValueEx& Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpszValueName$, ByVal lpdwRes&, lpdwType&, ByVal lpDataBuff$, nSize&)
    Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
    Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
    'Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
    Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPublic Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
    Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Public Const PROCESS_TERMINATE = &H1
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
    Public Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long
    Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
    Public Function GetVBPath() As String
    Dim s As String * 255, sVBEntry As String
    Dim lVBKey As Long, lType As Long, llen As Long, lrc As Long
    Dim sPath As String, strtemp As StringConst HKEY_LOCAL_MACHINE = &H80000002
    Const KEY_QUERY_VALUE = &H1&
    Const KEY_ENUMERATE_SUB_KEYS = &H8&
    Const KEY_NOTIFY = &H10&
    Const READ_CONTROL = &H20000
    Const STANDARD_RIGHTS_READ = READ_CONTROL
    Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
    Const REG_SZ = 1
    '    lRC = RegSaveKey(HKEY_LOCAL_MACHINE, "test.txt", Null)
    '    If lRC = 0 Then
    '
    '    End If
        strtemp = "user1"
        ' Search for VB5 path
        sVBEntry = "SOFTWARE\点康默信息"
        sPath = ""
        s = "wwww"
        llen = Len(s)
        lrc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sVBEntry, 0, KEY_READ, lVBKey)
        If lrc = 0 Then
    '        ' RegOpenKeyEx succeeded
    '        lRC = RegQueryValueEx(lVBKey, "ServerName", 0, lType, s, lLen)
    '        If lRC = 0 Then sPath = Left$(s, lLen - 1)  'RegQueryValueEx succeded
        Else
           lrc = RegCreateKey(HKEY_LOCAL_MACHINE, sVBEntry, lVBKey)
           If lrc = 0 Then MsgBox "seuee"
           
            RegCloseKey lVBKey
        End If
           lrc = RegSetValueEx(lVBKey, strtemp, 0, REG_SZ, ByVal s, llen)
           If lrc = 0 Then MsgBox "seuee"
           
           If sPath <> "" Then
            GetVBPath = sPath
            Exit Function
        End If
        
        ' vb5 key not found, search for vb6 path
        sVBEntry = "Software\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual Basic"
        llen = Len(s)
        lrc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sVBEntry, 0, KEY_READ, lVBKey)
        If lrc = 0 Then
            lrc = RegQueryValueEx(lVBKey, "ProductDir", 0, lType, s, llen)
            If lrc = 0 Then
                sPath = Left$(s, llen - 1)  ' vb6 key found
            Else
                sPath = InputBox("Please enter a valid path to NWind.mdb", "VB Path not found", "E:\Microsoft Visual Studio\VB98")
            End If
            RegCloseKey lVBKey
        End If
        GetVBPath = sPath
    End FunctionPublic Function cbEnumProcTest(ByVal hendl As Long, ByVal lParam As Long) As Boolean
      Dim process As Long
      Dim thread As Long
      thread = GetWindowThreadProcessId(hendl, process)
      cbEnumProcTest = True
    End FunctionPublic Function cbEnumProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
        Dim sSave As String * 255, Ret As Long
        Dim strTitle As String
        Dim lrc As Long, process_T As Long
        
        lrc = GetWindowThreadProcessId(hwnd, process_T)
       ' Form1.List2.AddItem Str$(lrc)
        '获得窗口列表
        Ret = GetWindowTextLength(hwnd)
        sSave = Space(Ret)
        Ret = Len(sSave)
        
        strTitle = GetWindowText(hwnd, ByVal sSave, Ret)
        Form1.Print Str$(hwnd) + " " + sSave
        Form1.List1.AddItem Str$(process_T) & "_" & Str$(lrc) & "_" & Str$(hwnd) & "_" & sSave
        Form1.List1.ItemData(Form1.List1.NewIndex) = Str$(hwnd)
        'continue enumeration
        cbEnumProc = True
    End Function