Added hul, a script for restoring hidden windows
This commit is contained in:
parent
513adaa5f6
commit
0e912908e5
1 changed files with 187 additions and 0 deletions
187
tools/hul.ahk
Normal file
187
tools/hul.ahk
Normal file
|
@ -0,0 +1,187 @@
|
|||
/**
|
||||
* hul! - Find and restore (hidden) windows
|
||||
* Copyright (c) 2011 joten
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @version 0.1.0.01 (02.10.2011)
|
||||
*/
|
||||
|
||||
NAME := "hul!"
|
||||
VERSION := "0.1.0"
|
||||
HELP :=
|
||||
(Join
|
||||
"USAGE`n
|
||||
`n
|
||||
Specify one, two or all of the following search criteria:`n
|
||||
- Type a regular expression in the field next to 'Partial title'.`n
|
||||
- Type a class name (exact match) in the field next to 'Class name'.`n
|
||||
- Type a process name (e. g. the name of an exeutable, exact match) in the field next to 'Process name'.`n
|
||||
`n
|
||||
The search will be done on typing the search criteria.`n
|
||||
`n
|
||||
You may navigate between the input fields by pressing Tab (forward) or Shift+Tab (back).`n
|
||||
Press Enter to go to the list box, which contains the search results.`n
|
||||
Select an entry and press Enter again to restore the selected window.`n
|
||||
`n
|
||||
Press the Escape (Esc) key to clear all fields and go back to entering the search criteria.`n"
|
||||
)
|
||||
|
||||
/**
|
||||
* Script settings
|
||||
*/
|
||||
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
|
||||
#NoTrayIcon
|
||||
#SingleInstance force
|
||||
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
|
||||
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
|
||||
; DetectHiddenWindows, On
|
||||
; SetFormat, Integer, h
|
||||
|
||||
/**
|
||||
* Pseudo main function
|
||||
*/
|
||||
WinGet, Main_aWndId, ID, A
|
||||
|
||||
; BEGIN: Init GUI
|
||||
IfWinExist, %NAME%
|
||||
Gui, Destroy
|
||||
Gui, +LastFound +0xCF0000 -0x80000000
|
||||
|
||||
Gui, Add, Text, yp+11, Partial Title:
|
||||
Gui, Add, Edit, xp+82 yp-3 w700 gButtonSearch vGui_title,
|
||||
|
||||
Gui, Add, Text, xm, Class Name:
|
||||
Gui, Add, Edit, xp+82 yp-3 w700 gButtonSearch vGui_class,
|
||||
|
||||
Gui, Add, Text, xm, Process Name:
|
||||
Gui, Add, Edit, xp+82 yp-3 w700 gButtonSearch vGui_pName,
|
||||
|
||||
; Gui, Add, Button, xm w800 vGui_search, Search
|
||||
|
||||
Gui, Add, ListBox, +0x100 t36 xm w800 vGui_wnds,
|
||||
Gui, Add, Button, Default Hidden w800 vGui_restore, Restore
|
||||
|
||||
Gui, Show, AutoSize, %NAME%
|
||||
Gui_wndId := WinExist()
|
||||
Main_resize()
|
||||
; END: Init GUI
|
||||
Return ; end of the auto-execute section
|
||||
|
||||
/**
|
||||
* Hotkeys, function & label definitions
|
||||
*/
|
||||
#IfWinActive hul! ahk_class AutoHotkeyGUI
|
||||
{
|
||||
^h::MsgBox %HELP%
|
||||
}
|
||||
|
||||
ButtonRestore:
|
||||
Main_restore()
|
||||
Return
|
||||
|
||||
ButtonSearch:
|
||||
Main_search()
|
||||
Return
|
||||
|
||||
GuiClose:
|
||||
ExitApp
|
||||
Return
|
||||
|
||||
GuiEscape:
|
||||
GuiControl, , Gui_title,
|
||||
GuiControl, , Gui_class,
|
||||
GuiControl, , Gui_pName,
|
||||
GuiControl, , Gui_wnds, |
|
||||
GuiControl, Focus, Gui_title
|
||||
Return
|
||||
|
||||
GuiSize:
|
||||
Main_resize(A_GuiWidth, A_GuiHeight)
|
||||
Return
|
||||
|
||||
Main_resize(w = 0, h = 0) {
|
||||
Global Gui_wndId
|
||||
|
||||
If (w = 0 Or h = 0) {
|
||||
Sleep, 250
|
||||
WinGetPos, x, y, w, h, ahk_id %Gui_wndId%
|
||||
h += 1
|
||||
WinMove, ahk_id %Gui_wndId%, , x, y, w, h
|
||||
} Else {
|
||||
w -= 2 * 10
|
||||
w1 := w - (72 + 10)
|
||||
h -= 3 * 30
|
||||
; y := 8 + (3 * 30) + h + 8
|
||||
GuiControl, Move, Gui_title, w%w1%
|
||||
GuiControl, Move, Gui_class, w%w1%
|
||||
GuiControl, Move, Gui_pName, w%w1%
|
||||
; GuiControl, Move, Gui_search, w%w%
|
||||
GuiControl, Move, Gui_wnds, w%w% h%h%
|
||||
; GuiControl, Move, Gui_restore, y%y% w%w%
|
||||
}
|
||||
}
|
||||
|
||||
Main_restore() {
|
||||
Global Gui_wnds
|
||||
|
||||
GuiControlGet, wnd, , Gui_wnds
|
||||
If wnd {
|
||||
wndId := SubStr(wnd, 1, InStr(wnd, ": ") - 1)
|
||||
WinShow, ahk_id %wndId%
|
||||
WinRestore, ahk_id %wndId%
|
||||
WinSet, AlwaysOnTop, On, ahk_id %wndId%
|
||||
WinSet, AlwaysOnTop, Off, ahk_id %wndId%
|
||||
WinMove, ahk_id %wndId%, , 0, 0, 800, 600
|
||||
} Else
|
||||
GuiControl, Focus, Gui_wnds
|
||||
}
|
||||
|
||||
Main_search() {
|
||||
Global Gui_class, Gui_pName, Gui_title, Gui_wndId, Gui_wnds
|
||||
|
||||
GuiControl, , Gui_wnds, |
|
||||
|
||||
GuiControlGet, title, , Gui_title
|
||||
|
||||
GuiControlGet, class, , Gui_class
|
||||
If class
|
||||
criteria .= " ahk_class " class
|
||||
|
||||
GuiControlGet, pName, , Gui_pName
|
||||
If pName {
|
||||
Process, Exist, %pName%
|
||||
If ErrorLevel
|
||||
criteria .= " ahk_pid " ErrorLevel
|
||||
}
|
||||
|
||||
If Not (criteria Or title)
|
||||
criteria := "A"
|
||||
|
||||
wndListString := ""
|
||||
DetectHiddenWindows, On
|
||||
WinGet, wndId, List, % criteria
|
||||
Loop, % wndId {
|
||||
WinGetTitle, wndTitle, % "ahk_id " wndId%A_Index%
|
||||
If Not (wndId%A_Index% = Gui_wndId) And (Not title Or RegExmatch(wndTitle, title)) {
|
||||
WinGetClass, wndClass, % "ahk_id " wndId%A_Index%
|
||||
WinGet, wndPName, ProcessName, % "ahk_id " wndId%A_Index%
|
||||
WinGet, wndStyle, Style, % "ahk_id " wndId%A_Index%
|
||||
WinGetPos, wndPosX, wndPosY, wndPosW, wndPosH, % "ahk_id " wndId%A_Index%
|
||||
wndListString .= "|" wndId%A_Index% ": `t" wndTitle " (" wndClass ", " wndPName ", " wndStyle ", " wndPosX ", " wndPosY ", " wndPosW ", " wndPosH ")"
|
||||
}
|
||||
}
|
||||
DetectHiddenWindows, Off
|
||||
GuiControl, , Gui_wnds, % wndListString
|
||||
}
|
Loading…
Reference in a new issue