Results 1 to 4 of 4

Thread: Property Window of a File

  1. #1

    Thread Starter
    Lively Member James Bond 007's Avatar
    Join Date
    May 2000
    Location
    London
    Posts
    116
    Anyone knows how to access the property window of a file?
    License to Program

    007

  2. #2
    transcendental analytic kedaman's Avatar
    Join Date
    Mar 2000
    Location
    0x002F2EA8
    Posts
    7,221
    Code:
    Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
    
    Const SEE_MASK_INVOKEIDLIST = &HC
    Const SEE_MASK_NOCLOSEPROCESS = &H40
    Const SEE_MASK_FLAG_NO_UI = &H400
    
    Type SHELLEXECUTEINFO
        cbSize As Long
        fMask As Long
        hwnd As Long
        lpVerb As String
        lpFile As String
        lpParameters As String
        lpDirectory As String
        nShow As Long
        hInstApp As Long
        lpIDList As Long
        lpClass As String
        hkeyClass As Long
        dwHotKey As Long
        hIcon As Long
        hProcess As Long
    End Type
    'SHOWS PROPERTIES OF A FILES
    Function FileProperties(FileName As String, Optional OwnerhWnd&) As Boolean
    Dim a As SHELLEXECUTEINFO
        With a
            .cbSize = Len(a)
            .fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
            .hwnd = OwnerhWnd
            .lpVerb = "properties"
            .lpFile = FileName
            .lpParameters = vbNullChar
            .lpDirectory = vbNullChar
            .nShow = 0
            .hInstApp = 0
            .lpIDList = 0
        End With
        FileProperties = ShellExecuteEX(a)
    End Function
    Use
    writing software in C++ is like driving rivets into steel beam with a toothpick.
    writing haskell makes your life easier:
    reverse (p (6*9)) where p x|x==0=""|True=chr (48+z): p y where (y,z)=divMod x 13
    To throw away OOP for low level languages is myopia, to keep OOP is hyperopia. To throw away OOP for a high level language is insight.

  3. #3

    Thread Starter
    Lively Member James Bond 007's Avatar
    Join Date
    May 2000
    Location
    London
    Posts
    116
    Thanks for replying.

    Have two questions. What is "OwnerhWnd&" use for?

    Sorry, to mislead you. I want to get the location of executable in the property window. Not show the property window.
    License to Program

    007

  4. #4
    Guest
    Here is how to retrieve the exe's file path from the given handle:

    Code:
    'Author: Sam Huggill
    'Author's email: http://www.programmerz.com/vb/
    'Date Submitted: 2/6/1999
    'Compatibility: VB 6,VB 5
    
    
    Public Declare Function GetForegroundWindow Lib "user32" () As Long
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    
    'Get active window exe
    Public Const TH32CS_SNAPPROCESS As Long = 2&
    Public Const MAX_PATH As Long = 260
    Public Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwflags As Long
    szexeFile As String * MAX_PATH
    End Type
    Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
    Public Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlgas As Long, ByVal lProcessID As Long) As Long
    Public Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
    Public Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
    Public Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
    
    'Get active window caption
    Public Function GetWindowCaption(ByVal hwnd As Long, ByVal lParam As Long) As String
        Dim lWin As Long
        Dim strWinText As String
        strWinText = Space(255)
        lWin = GetWindowText(hwnd, strWinText, Len(strWinText))
        If lWin Then strWinText = Left(strWinText, lWin)
        GetWindowCaption = strWinText
    End Function
    
    'Get active window exe
    Public Function GetExeFromHandle(hwnd As Long) As String
        Dim threadID As Long, processID As Long, hSnapshot As Long
        Dim uProcess As PROCESSENTRY32, rProcessFound As Long
        Dim i As Integer, szExename As String
        ' Get ID for window thread
        threadID = GetWindowThreadProcessId(hwnd, processID)
        ' Check if valid
        If threadID = 0 Or processID = 0 Then Exit Function
        ' Create snapshot of current processes
        hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&
        ' Check if snapshot is valid
        If hSnapshot = -1 Then Exit Function
        'Initialize uProcess with correct size
        uProcess.dwSize = Len(uProcess)
        'Start looping through processes
        rProcessFound = ProcessFirst(hSnapshot, uProcess)
        Do While rProcessFound
            If uProcess.th32ProcessID = processID Then
                'Found it, now get name of exefile
                i = InStr(1, uProcess.szexeFile, Chr(0))
                If i > 0 Then szExename = Left$(uProcess.szexeFile, i - 1)
                Exit Do
            Else
                'Wrong ID, so continue looping
                rProcessFound = ProcessNext(hSnapshot, uProcess)
            End If
        Loop
        Call CloseHandle(hSnapshot)
        GetExeFromHandle = szExename
    End Function
    
    
    Usage
    
    Private Sub Command1_Click()
    MsgBox GetExeFromHandle(Me.hWnd)
    End Sub

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width