Add PID to Window Spy.

Propose new features and changes
CDog
Posts: 13
Joined: 02 Oct 2015, 03:34

Add PID to Window Spy.

08 Mar 2017, 14:22

Just simply that, might be nice if Window Spy could let us know the process ID in the window along with the Title, Class and Process (name).
wolf_II
Posts: 2688
Joined: 08 Feb 2015, 20:55

Re: Add PID to Window Spy.

08 Mar 2017, 18:51

Try this customized scrpt:

Code: Select all

;
; Active Window Info
;

#NoEnv
#NoTrayIcon
#SingleInstance Ignore
SetWorkingDir, %A_ScriptDir%
SetBatchLines, -1
CoordMode, Pixel, Screen

IfExist, ActiveWindowInfo.ico ; Seems useful enough to support standalone operation.
	Menu, Tray, Icon, ActiveWindowInfo.ico

try
    Hotkey #a, FreezeDisplay
catch
    Hotkey #vk41, FreezeDisplay

isUpd := true
txtNotFrozen := "(Win+A to freeze display)"
txtFrozen := "(Win+A to unfreeze display)"

Gui, New, hwndhGui AlwaysOnTop Resize MinSize
Gui, Add, Text,, Window Title, Class and Process:
Gui, Add, Edit, w320 r4 ReadOnly -Wrap vCtrl_Title
Gui, Add, Text,, Mouse Position:
Gui, Add, Edit, w320 r3 ReadOnly vCtrl_MousePos
Gui, Add, Text,, Control Under Mouse Position:
Gui, Add, Edit, w320 r5 ReadOnly vCtrl_MouseCur
Gui, Add, Text,, Active Window Position:
Gui, Add, Edit, w320 r2 ReadOnly vCtrl_Pos
Gui, Add, Text,, Status Bar Text:
Gui, Add, Edit, w320 r2 ReadOnly vCtrl_SBText
Gui, Add, Checkbox, vCtrl_IsSlow, Slow TitleMatchMode
Gui, Add, Text,, Visible Text:
Gui, Add, Edit, w320 r2 ReadOnly vCtrl_VisText
Gui, Add, Text,, All Text:
Gui, Add, Edit, w320 r2 ReadOnly vCtrl_AllText
Gui, Add, Text, w320 r1 vCtrl_Freeze, % txtNotFrozen
Gui, Show,, Active Window Info
GetClientSize(hGui, temp)
horzMargin := temp*96//A_ScreenDPI - 320
SetTimer, Update, 250
return

GuiSize:
Gui %hGui%:Default
if !horzMargin
	return
ctrlW := A_GuiWidth - horzMargin
list = Title,MousePos,MouseCur,Pos,SBText,VisText,AllText,Freeze
Loop, Parse, list, `,
	GuiControl, Move, Ctrl_%A_LoopField%, w%ctrlW%
return

Update:
Gui %hGui%:Default
curWin := WinExist("A")
if (curWin = hGui)
	return
WinGetTitle, t1
WinGetClass, t2
WinGet, t3, ProcessName
WinGet, t4, PID
GuiControl,, Ctrl_Title, % t1 "`nahk_class " t2 "`nahk_exe " t3 "`nahk_pid " t4
CoordMode, Mouse, Screen
MouseGetPos, msX, msY, msWin, msCtrlHwnd, 2
CoordMode, Mouse, Relative
MouseGetPos, mrX, mrY,, msCtrl
CoordMode, Mouse, Client
MouseGetPos, mcX, mcY
GuiControl,, Ctrl_MousePos, % "Absolute:`t" msX ", " msY " (less often used)`nRelative:`t" mrX ", " mrY " (default)`nClient:`t" mcX ", " mcY " (recommended)"
PixelGetColor, mClr, %msX%, %msY%, RGB
mClr := SubStr(mClr, 3)
mText := "`nColor:`t" mClr " (Red=" SubStr(mClr, 1, 2) " Green=" SubStr(mClr, 3, 2) " Blue=" SubStr(mClr, 5) ")"
if (curWin = msWin)
{
    ControlGetText, ctrlTxt, %msCtrl%
    mText := "ClassNN:`t" msCtrl "`nText:`t" textMangle(ctrlTxt) mText
    ControlGetPos cX, cY, cW, cH, %msCtrl%
    mText .= "`n`tx: " cX "`ty: " cY "`tw: " cW "`th: " cH
    WinToClient(msWin, cX, cY)
    GetClientSize(msCtrlHwnd, cW, cH)
    mText .= "`nClient:`tx: " cX "`ty: " cY "`tw: " cW "`th: " cH
} else mText := "`n" mText
GuiControl,, Ctrl_MouseCur, % mText
WinGetPos, wX, wY, wW, wH
GetClientSize(curWin, wcW, wcH)
GuiControl,, Ctrl_Pos, % "`tx: " wX "`ty: " wY "`tw: " wW "`th: " wH "`nClient:`t`t`tw: " wcW "`th: " wcH
sbTxt := ""
Loop
{
    StatusBarGetText, ovi, %A_Index%
    if ovi =
    break
    sbTxt .= "(" A_Index "):`t" textMangle(ovi) "`n"
}
StringTrimRight, sbTxt, sbTxt, 1
GuiControl,, Ctrl_SBText, % sbTxt
GuiControlGet, bSlow,, Ctrl_IsSlow
if bSlow
{
DetectHiddenText, Off
WinGetText, ovVisText
DetectHiddenText, On
WinGetText, ovAllText
}
else
{
ovVisText := WinGetTextFast(false)
ovAllText := WinGetTextFast(true)
}
GuiControl,, Ctrl_VisText, % ovVisText
GuiControl,, Ctrl_AllText, % ovAllText
return

GuiClose:
ExitApp

WinGetTextFast(detect_hidden)
{
    WinGet controls, ControlListHwnd
    static WINDOW_TEXT_SIZE := 32767
    VarSetCapacity(buf, WINDOW_TEXT_SIZE * (A_IsUnicode ? 2 : 1))
    text := ""
    Loop Parse, controls, `n
    {
    if !detect_hidden && !DllCall("IsWindowVisible", "ptr", A_LoopField)
    continue
    if !DllCall("GetWindowText", "ptr", A_LoopField, "str", buf, "int", WINDOW_TEXT_SIZE)
    continue
    text .= buf "`r`n"
}
return text
}

GetClientSize(hWnd, ByRef w := "", ByRef h := "")
{
    VarSetCapacity(rect, 16)
    DllCall("GetClientRect", "ptr", hWnd, "ptr", &rect)
    w := NumGet(rect, 8, "int")
    h := NumGet(rect, 12, "int")
}

WinToClient(hWnd, ByRef x, ByRef y)
{
    WinGetPos wX, wY,,, ahk_id %hWnd%
    x += wX, y += wY
    VarSetCapacity(pt, 8), NumPut(y, NumPut(x, pt, "int"), "int")
    if !DllCall("ScreenToClient", "ptr", hWnd, "ptr", &pt)
    return false
    x := NumGet(pt, 0, "int"), y := NumGet(pt, 4, "int")
    return true
}

textMangle(x)
{
    if pos := InStr(x, "`n")
    x := SubStr(x, 1, pos-1), elli := true
    if StrLen(x) > 40
    {
    StringLeft, x, x, 40
    elli := true
    }
    if elli
    x .= " (...)"
    return x
}

FreezeDisplay:
Gui %hGui%:Default
isUpd := !isUpd
SetTimer, Update, % isUpd ? "On" : "Off"
GuiControl,, Ctrl_Freeze, % isUpd ? txtNotFrozen : txtFrozen
return
I don't remember where I got it from originally, maybe from a link posted by jeeswg.
ActiveWindowInfo.zip
icon
(400 Bytes) Downloaded 206 times
kon
Posts: 1756
Joined: 29 Sep 2013, 17:11

Re: Add PID to Window Spy.

08 Mar 2017, 22:00

Displaying the PID, or the win ID for that matter, would give the false impression that that info is actually useful for hard-coding into a script.
lexikos
Posts: 9583
Joined: 30 Sep 2013, 04:07
Contact:

Re: Add PID to Window Spy.

08 Mar 2017, 23:13

It's not useful for hard-coding into a script, but it could be useful for debugging.

ActiveWindowInfo.ahk is a script. You can do whatever you want to it.

Return to “Wish List”

Who is online

Users browsing this forum: No registered users and 18 guests