Sign in to follow this  
Followers 0
malu05

Get Full Process Path from ProcessID?

20 posts in this topic

How do i get the full process path from via only knowing the processID?


[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Share this post


Link to post
Share on other sites



A search would have revealed This



Get Beta versions Here Get latest SciTE editor Here AutoIt 1-2-3 by Valuater - A great starting point.

Time you enjoyed wasting is not wasted time ......T.S. Elliot
Suspense is worse than disappointment................Robert Burns
God help the man who won't help himself, because no-one else will...........My Grandmother

Share this post


Link to post
Share on other sites

A search would have revealed This

Haha.. just found that.. didnt find it in first search... but the tag "PID" helped.


[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Share this post


Link to post
Share on other sites

That topic is locked and does not work 100%

Only some procesess terurn path.

explorer.exe returns weird character and other programs return  questionmarks.

Why is that ?

Is there an alternative that would not only point to the folder but highlight the file as well ?

 

Thanks for reading this old topic.

Thanks !

Share this post


Link to post
Share on other sites

You could try _WinAPI_EnumProcessModules.  If that does not work check back in another 6.5 years.


Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

The only reason why it doesnt work is because i dont know how to use it.

Not only that, but my listview is killing the script by constantly reading from it. Have no idea how to make it read once and then stop unless item is clicked.

Please have a look at line 73

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Process.au3>
 #include <WinAPIProc.au3>

$ProgTitle = "Unhide 'n' Hide Hiddent Windows"
$File = (@DesktopDir & "\IgnoreList.txt")
$Gui = GUICreate ($ProgTitle,470,600)
GUICtrlCreateGroup ("Windows",5,5,290,590)
$Listview = GUICtrlCreateListView ("Title|Handle",10,25,280,565)
_GUICtrlListView_SetColumnWidth ( $Listview, 0, 190 )
_GUICtrlListView_SetColumnWidth ( $Listview, 1,70 )
GUICtrlCreateGroup ("Action",295,5,170,400)
$Title = GUICtrlCreateInput ("Wudow Title",300,25,160,20)
$Handle = GUICtrlCreateInput ("Window Handle",300,45,160,20)
$Process = GUICtrlCreateInput ("Process Name",300,65,160,20)
$processPID = GUICtrlCreateInput ("Process PID",300,85,160,20)
$AddtoIgnore = GUICtrlCreateButton ("Add to Ignore.txt",300,105,160,25)
$OpenProcessFile = GUICtrlCreateButton ("Open Process File",300,130,160,25)
$TerminateProcess = GUICtrlCreateButton ("Terminate Process",300,155,160,25)
$Show= GUICtrlCreateButton ("Show this window",300,180,160,25)
$Hide= GUICtrlCreateButton ("Hide this window",300,205,160,25)
_GetWindows()
GUISetState (@SW_SHOW,$Gui)
While 1
    $MSG = GUIGetMsg()
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    If $MSG = $AddtoIgnore Then
        $FileRead = FileRead ($File)
        $TitleRead = GUICtrlRead ($Title)
        If StringInStr ($FileRead,"["& $TitleRead & "]") = 0 Then
            FileClose ($FileRead)
            FileWrite ($File,"["& $TitleRead & "]")
            GUICtrlSetData ($Title,"")
            GUICtrlSetData ($Handle,"")
        Else
            $AskToRemove = MsgBox(48+4,'Warning','Title ' & $TitleRead & " is already aded to Ignore.txt file." & @CRLF & "Would you like to remove it ?")
            If $AskToRemove = 6 Then
                $NewFile = StringReplace ($FileRead,"["& $TitleRead & "]","")
                $FileOpen = FileOpen ($File,2) ;Open and erase previous content
                FileWrite ($FileOpen,$NewFile)
                FileClose ($FileOpen)
                MsgBox(32,"information","Done")
            EndIf
        EndIf
        _GetWindows()
    Endif
    If $MSG = $TerminateProcess Then ProcessClose (GUICtrlRead ($Process))
    If $MSG = $OpenProcessFile Then
        $PID = WinGetProcess (GUICtrlRead ($Title))
        $PName = _ProcessGetName ($PID)
        $FullPath = _ProcessGetLocation($PID)
        $Test = StringReplace ($FullPath,$PName,"")
        $FinalPath = StringTrimRight ($Test,1)
        If $FinalPath = "" Then
            MsgBox (16,"Error","Unable to get path" & @CRLF & $FullPath)
        Else
            ShellExecute ($FinalPath)
        EndIf
    EndIf
    $Index = _GUICtrlListView_GetNextItem ($Listview)
    If $Listview > "" Then
        $Index = _GUICtrlListView_GetNextItem ($Listview)
        $SelectedItemTitle = _GUICtrlListView_GetItemText ($Listview,$Index,0)
        $SelecedItemHandle = _GUICtrlListView_GetItemText ($Listview,$Index,1)
        $PID = WinGetProcess (GUICtrlRead ($Title),"")
        $PName = _ProcessGetName ($PID)
        $APIPATH = _WinAPI_EnumProcessModules ($PID)

        GUICtrlSetData ($Title,$SelectedItemTitle)
        GUICtrlSetData ($Handle,$SelecedItemHandle)
        GUICtrlSetData ($processPID,$PID)
        GUICtrlSetData ($Process,$PName)
        ;_GUICtrlListView_SetItemSelected ($Listview,$Index,False);deselect item to prevent this if statement triggered without manually clicking.
    EndIf
WEnd
Func _GetWindows()
    _GUICtrlListView_DeleteAllItems($Listview)
    $IgnoreList = FileRead ($File)
    $aList = WinList()
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 1) Then
            If StringInStr ($IgnoreList,"[" & $aList[$i][0] & "]") = 0 Then
                GUICtrlCreateListViewItem ($aList[$i][0] & "|" & $aList[$i][1],$Listview)
            EndIf
        EndIf
    Next
EndFunc

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

Share this post


Link to post
Share on other sites

This will always be true as $listview is a control id

If $Listview > "" Then

Maybe you want

if $msg = $listview

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

Doesn't work. Msg goes not pick anything up when I click items. U haven't tried the script but thanks

Share this post


Link to post
Share on other sites

I was addressing this problem...

Not only that, but my listview is killing the script by constantly reading from it. Have no idea how to make it read once and then stop unless item is clicked.

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

#10 ·  Posted (edited)

Also, everytime throught the messageloop you are doing this...

$Index = _GUICtrlListView_GetNextItem ($Listview)

It's difficult to follow what you want to do and what exactly is wrong...

edit: By the way, I did run it.  As you have it coded it takes appx. 10% CPU.  When changed as I suggested it takes < .1%

Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

Is there an alternative that would not only point to the folder but highlight the file as well?

 

Replace your ShellExecute($FinalPath) with the long-winded yet aptly named:

_WinAPI_ShellOpenFolderAndSelectItems($FullPath)

(Requires #include <WinAPIShellEx.au3>)

Edited by Kilmatead

Share this post


Link to post
Share on other sites

#12 ·  Posted (edited)

tonycst,

As near as I can determine this is what you are trying to do...

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Process.au3>
 #include <WinAPIProc.au3>
#include <WindowsConstants.au3> ;   <--------------------------------------------


$ProgTitle = "Unhide 'n' Hide Hiddent Windows"
$File = (@DesktopDir & "\IgnoreList.txt")
$Gui = GUICreate ($ProgTitle,470,600)
GUICtrlCreateGroup ("Windows",5,5,290,590)
$Listview = GUICtrlCreateListView ("Title|Handle",10,25,280,565)
_GUICtrlListView_SetColumnWidth ( $Listview, 0, 190 )
_GUICtrlListView_SetColumnWidth ( $Listview, 1,70 )
GUICtrlCreateGroup ("Action",295,5,170,400)
$Title = GUICtrlCreateInput ("Wudow Title",300,25,160,20)
$Handle = GUICtrlCreateInput ("Window Handle",300,45,160,20)
$Process = GUICtrlCreateInput ("Process Name",300,65,160,20)
$processPID = GUICtrlCreateInput ("Process PID",300,85,160,20)
$AddtoIgnore = GUICtrlCreateButton ("Add to Ignore.txt",300,105,160,25)
$OpenProcessFile = GUICtrlCreateButton ("Open Process File",300,130,160,25)
$TerminateProcess = GUICtrlCreateButton ("Terminate Process",300,155,160,25)
$Show= GUICtrlCreateButton ("Show this window",300,180,160,25)
$Hide= GUICtrlCreateButton ("Hide this window",300,205,160,25)
$ListView_Dummy = GUICtrlCreateDummy()  ;   <-------------------------------------
_GetWindows()
GUISetState (@SW_SHOW,$Gui)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;   <-------------------------------------
While 1
    $MSG = GUIGetMsg()
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    If $MSG = $AddtoIgnore Then
        $FileRead = FileRead ($File)
        $TitleRead = GUICtrlRead ($Title)
        If StringInStr ($FileRead,"["& $TitleRead & "]") = 0 Then
            FileClose ($FileRead)
            FileWrite ($File,"["& $TitleRead & "]")
            GUICtrlSetData ($Title,"")
            GUICtrlSetData ($Handle,"")
        Else
            $AskToRemove = MsgBox(48+4,'Warning','Title ' & $TitleRead & " is already aded to Ignore.txt file." & @CRLF & "Would you like to remove it ?")
            If $AskToRemove = 6 Then
                $NewFile = StringReplace ($FileRead,"["& $TitleRead & "]","")
                $FileOpen = FileOpen ($File,2) ;Open and erase previous content
                FileWrite ($FileOpen,$NewFile)
                FileClose ($FileOpen)
                MsgBox(32,"information","Done")
            EndIf
        EndIf
        _GetWindows()
    Endif
    If $MSG = $TerminateProcess Then ProcessClose (GUICtrlRead ($Process))
    If $MSG = $OpenProcessFile Then
        $PID = WinGetProcess (GUICtrlRead ($Title))
        $PName = _ProcessGetName ($PID)
        $FullPath = _ProcessGetLocation($PID)
        $Test = StringReplace ($FullPath,$PName,"")
        $FinalPath = StringTrimRight ($Test,1)
        If $FinalPath = "" Then
            MsgBox (16,"Error","Unable to get path" & @CRLF & $FullPath)
        Else
            ShellExecute ($FinalPath)
        EndIf
    EndIf
    If $MSG = $ListView_Dummy Then                  ;   <-----------------------------------------------
        $Index = _GUICtrlListView_GetNextItem ($Listview)
        $SelectedItemTitle = _GUICtrlListView_GetItemText ($Listview,$Index,0)
        $SelecedItemHandle = _GUICtrlListView_GetItemText ($Listview,$Index,1)
        $PID = WinGetProcess (GUICtrlRead ($Title),"")
        $PName = _ProcessGetName ($PID)
        $APIPATH = _WinAPI_EnumProcessModules ($PID)

        GUICtrlSetData ($Title,$SelectedItemTitle)
        GUICtrlSetData ($Handle,$SelecedItemHandle)
        GUICtrlSetData ($processPID,$PID)
        GUICtrlSetData ($Process,$PName)
        ;_GUICtrlListView_SetItemSelected ($Listview,$Index,False);deselect item to prevent this if statement triggered without manually clicking.
    EndIf
WEnd
Func _GetWindows()
    _GUICtrlListView_DeleteAllItems($Listview)
    $IgnoreList = FileRead ($File)
    $aList = WinList()
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 1) Then
            If StringInStr ($IgnoreList,"[" & $aList[$i][0] & "]") = 0 Then
                GUICtrlCreateListViewItem ($aList[$i][0] & "|" & $aList[$i][1],$Listview)
            EndIf
        EndIf
    Next
EndFunc

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

; added the detection routine for DBL click

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR, $hWndFrom, $iCode, $w

    $tNMHDR     = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom   = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode      = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case guictrlgethandle($listview)
            Switch $iCode
                Case $NM_DBLCLK
                    GUICtrlSendToDummy($ListView_Dummy)
                Case $LVN_ITEMCHANGED
                    GUICtrlSendToDummy($ListView_Dummy)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG

EndFunc

changed / added lines are indicated by "<-----------------------------------------------"

edit: The code you are working from is several generations of Autoit old.  You may need to change several things to get what you want.

edit2: added code to support moving through LV with arrow keys

edit3: changed $openprocessfile routine

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.12.0
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Process.au3>
 #include <WinAPIProc.au3>
#include <WindowsConstants.au3> ;   <--------------------------------------------


$ProgTitle = "Unhide 'n' Hide Hiddent Windows"
$File = (@DesktopDir & "\IgnoreList.txt")
$Gui = GUICreate ($ProgTitle,470,600)
GUICtrlCreateGroup ("Windows",5,5,290,590)
$Listview = GUICtrlCreateListView ("Title|Handle",10,25,280,565)
_GUICtrlListView_SetColumnWidth ( $Listview, 0, 190 )
_GUICtrlListView_SetColumnWidth ( $Listview, 1,70 )
GUICtrlCreateGroup ("Action",295,5,170,400)
$Title = GUICtrlCreateInput ("Wudow Title",300,25,160,20)
$Handle = GUICtrlCreateInput ("Window Handle",300,45,160,20)
$Process = GUICtrlCreateInput ("Process Name",300,65,160,20)
$processPID = GUICtrlCreateInput ("Process PID",300,85,160,20)
$AddtoIgnore = GUICtrlCreateButton ("Add to Ignore.txt",300,105,160,25)
$OpenProcessFile = GUICtrlCreateButton ("Open Process File",300,130,160,25)
$TerminateProcess = GUICtrlCreateButton ("Terminate Process",300,155,160,25)
$Show= GUICtrlCreateButton ("Show this window",300,180,160,25)
$Hide= GUICtrlCreateButton ("Hide this window",300,205,160,25)
$ListView_Dummy = GUICtrlCreateDummy()  ;   <-------------------------------------
_GetWindows()
GUISetState (@SW_SHOW,$Gui)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;   <-------------------------------------
While 1
    $MSG = GUIGetMsg()
    If $MSG = $GUI_EVENT_CLOSE Then ExitLoop
    If $MSG = $AddtoIgnore Then
        $FileRead = FileRead ($File)
        $TitleRead = GUICtrlRead ($Title)
        If StringInStr ($FileRead,"["& $TitleRead & "]") = 0 Then
            FileClose ($FileRead)
            FileWrite ($File,"["& $TitleRead & "]")
            GUICtrlSetData ($Title,"")
            GUICtrlSetData ($Handle,"")
        Else
            $AskToRemove = MsgBox(48+4,'Warning','Title ' & $TitleRead & " is already aded to Ignore.txt file." & @CRLF & "Would you like to remove it ?")
            If $AskToRemove = 6 Then
                $NewFile = StringReplace ($FileRead,"["& $TitleRead & "]","")
                $FileOpen = FileOpen ($File,2) ;Open and erase previous content
                FileWrite ($FileOpen,$NewFile)
                FileClose ($FileOpen)
                MsgBox(32,"information","Done")
            EndIf
        EndIf
        _GetWindows()
    Endif
    If $MSG = $TerminateProcess Then ProcessClose (GUICtrlRead ($Process))
    If $MSG = $OpenProcessFile Then
        $FullPath = _WinAPI_GetProcessFileName(WinGetProcess (GUICtrlRead ($Title)))
        if @error <> 0 or $FullPath = "" then continueloop
        ConsoleWrite('shelling to ' & $FullPath & @CRLF)
        ShellExecute ($FullPath)
    EndIf
    If $MSG = $ListView_Dummy Then                  ;   <-----------------------------------------------
        $Index = _GUICtrlListView_GetNextItem ($Listview)
        $SelectedItemTitle = _GUICtrlListView_GetItemText ($Listview,$Index,0)
        $SelecedItemHandle = _GUICtrlListView_GetItemText ($Listview,$Index,1)
        $PID = WinGetProcess (GUICtrlRead ($Title),"")
        $PName = _ProcessGetName ($PID)
        $APIPATH = _WinAPI_EnumProcessModules ($PID)

        GUICtrlSetData ($Title,$SelectedItemTitle)
        GUICtrlSetData ($Handle,$SelecedItemHandle)
        GUICtrlSetData ($processPID,$PID)
        GUICtrlSetData ($Process,$PName)
        ;_GUICtrlListView_SetItemSelected ($Listview,$Index,False);deselect item to prevent this if statement triggered without manually clicking.
    EndIf
WEnd
Func _GetWindows()
    _GUICtrlListView_DeleteAllItems($Listview)
    $IgnoreList = FileRead ($File)
    $aList = WinList()
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 1) Then
            If StringInStr ($IgnoreList,"[" & $aList[$i][0] & "]") = 0 Then
                GUICtrlCreateListViewItem ($aList[$i][0] & "|" & $aList[$i][1],$Listview)
            EndIf
        EndIf
    Next
EndFunc

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

; added the detection routine for DBL click

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR, $hWndFrom, $iCode, $w

    $tNMHDR     = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom   = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode      = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case guictrlgethandle($listview)
            Switch $iCode
                Case $NM_DBLCLK
                    GUICtrlSendToDummy($ListView_Dummy)
                Case $LVN_ITEMCHANGED
                    GUICtrlSendToDummy($ListView_Dummy)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG

EndFunc
Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

Whats a dummy thing for and what does it do that makes listview read when clicked while listview its self does not return any values when clicked.

It kinda does work but it takes 2 clicks to get correct process.exe. I was never able to figure out why but ok, good enough for me to start learning something from this.

THanks !

Share this post


Link to post
Share on other sites

I also noticed that _ProcessGetLocation does not work with C drive. It only identifies exe locations of other hard drives. Why is that ?

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

Share this post


Link to post
Share on other sites

#15 ·  Posted (edited)

tonycst,

This

$FullPath = _WinAPI_GetProcessFileName(WinGetProcess (GUICtrlRead ($Title)))

takes the place of _processgetlocation.

Whats a dummy thing for and what does it do that makes listview read when clicked while listview its self does not return any values when clicked.

 

The dummy control is actioned by a notification message ($NM_DBLCLK or $LVN_ITEMCHANGED in your case).  It will then execute whatever code is in the message loop for that control.

It kinda does work but it takes 2 clicks to get correct process.exe. I was never able to figure out why but ok, good enough for me to start learning something from this.

 

There are many notification messages.  I used these two for the sake of illustration.  You can find the messages in ListViewConstants.au3.

kylomas

Edited by kylomas

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
Still doesnt work for all processes.
Most processes that maybe services are not working. It doesnt even work for explorer.exe.
 
But thanks for helping to remove entire function from the script and replace it with this one line. Thats awesome :)

Share this post


Link to post
Share on other sites

What does "doesn't work" mean, exactly. 

Still doesnt work for all processes.
Most processes that maybe services are not working. It doesnt even work for explorer.exe.

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites

Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots.
So far, the Universe is winning.

Share this post


Link to post
Share on other sites

Its confusing. Post reffers to some UDF i need to include that has dead link.

I ran the scrip in X64 and it worked.

I hate the way windows works with 64bit with all the redirection garbage etc. Would have been allot easier to just add "Program Files (X64)" and then "Program Files (X128)" or what ever comes next, instead of having (X64) in "Program Files" and redirecting 32bit to "Program Files (x86)"

Too many issues.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0