Code: Select all
#Persistent
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
SetBatchLines -1
DetectHiddenWindows, On
; dlghwnd := WinExist("ahk_exe dopus.exe ahk_class #32770 ahk_title test_dlg")
dlghwnd := Run("notepad.exe")
if (dlghwnd = 0) {
MsgBox, "App not running"
ExitApp
}
; preserve current positioning
WinGetPos, HX,HY,HW,HH, ahk_id %dlghwnd%
uEdge:=2 ; left=0,top=1,right=2,bottom=3
uAppWidth:=A_ScreenWidth * 1/3 ; "ideal" width for a vertical appbar
uAppHeight:=30 ; "ideal" height when horizontal
if (uEdge = 2) {
dlgx := A_ScreenWidth - uAppWidth
} else {
dlgx := 0
}
if (uEdge = 3) {
dlgy := A_ScreenHeight - uAppHeight
} else {
dlgy := 0
}
if (uEdge in 0,2) {
dlgw := uAppWidth
dlgh := A_ScreenHeight-30
} else {
dlgw := A_ScreenWidth
dlgh := uAppHeight
}
GoSub, SetWindow
GoSub, SetAPPBAR
OnExit, QuitScript
Return
SetWindow:
WinSet, Style, -0xC00000, ahk_id %dlghwnd% ; hide title bar
WinSet, ExStyle, +0x80, ahk_id %dlghwnd% ; Remove it from the alt-tab list
WinSet, ExStyle, -0x00040000, ahk_id %dlghwnd% ; Turn off WS_EX_APPWINDOW
WinSet, Style, -0x800000, ahk_id %dlghwnd% ; hide thin-line border
WinSet, Style, -0x400000, ahk_id %dlghwnd% ; hide dialog frame
WinSet, Style, -0x40000,ahk_id %dlghwnd% ; hide thickframe/sizebox
WinSet, AlwaysOnTop, On, ahk_id %dlghwnd%
WinMove, ahk_id %dlghwnd%,,%dlgx%,%dlgy%,%dlgw%,%dlgh%
Return
SetAPPBAR:
ABM := DllCall("RegisterWindowMessage", Str,"AppBarMsg", "UInt")
VarSetCapacity(APPBARDATA , (cbAPPBARDATA := A_PtrSize == 8 ? 48 : 36), 0)
Off := NumPut(cbAPPBARDATA, APPBARDATA, "Ptr")
Off := NumPut(dlghwnd, Off+0, "Ptr")
Off := NumPut(ABM, Off+0, "UInt")
Off := NumPut(uEdge, Off+0, "UInt")
Off := NumPut(dlgx, Off+0, "Int")
Off := NumPut(dlgy, Off+0, "Int")
Off := NumPut(dlgw, Off+0, "Int")
Off := NumPut(dlgh, Off+0, "Int")
Off := NumPut(1, Off+0, "Ptr")
DllCall("Shell32.dll\SHAppBarMessage", UInt,(ABM_NEW:=0x0) , Ptr,&APPBARDATA)
DllCall("Shell32.dll\SHAppBarMessage", UInt,(ABM_QUERYPOS:=0x2), Ptr,&APPBARDATA)
DllCall("Shell32.dll\SHAppBarMessage", UInt,(ABM_SETPOS:=0x3) , Ptr,&APPBARDATA)
Return
Unset_Window:
if (dlghwnd = 0) return
WinSet, Style, +0xC00000, ahk_id %dlghwnd% ; hide title bar
WinSet, ExStyle, -0x80, ahk_id %dlghwnd% ; Remove it from the alt-tab list
WinSet, ExStyle, +0x00040000, ahk_id %dlghwnd% ; Turn off WS_EX_APPWINDOW
WinSet, Style, +0x800000, ahk_id %dlghwnd% ; hide thin-line border
WinSet, Style, +0x400000, ahk_id %dlghwnd% ; hide dialog frame
WinSet, Style, +0x40000,ahk_id %dlghwnd% ; hide thickframe/sizebox
WinSet, AlwaysOnTop, Off, ahk_id %dlghwnd%
WinMove, ahk_id %dlghwnd%,,%HX%,%HY%,%HW%,%HH%
Return
RemoveAppBar:
DllCall("Shell32.dll\SHAppBarMessage", UInt,(ABM_REMOVE := 0x1), Ptr,&APPBARDATA )
Return
QuitScript:
GoSub, Unset_Window
GoSub, RemoveAppbar
ExitApp
Return
Run(Target)
{
Try Run, % Target,,, OutputVarPID
Catch,
Throw, "Couldn't run " Target
WinWait, % "ahk_pid " OutputVarPID
Return WinExist("ahk_pid " OutputVarPID)
}