;;source of basic of code http://www.autohotkey.com/forum/topic6422.html&sid=b9f02b605947f64c07e1dec56b751650;; Use_Large_Icons =1 Font_Size =13 Font_Type =MS sans serif Gui_Colour =000080 Listview_Colour =E4E2FC Gui_x =Center Gui_y :=A_ScreenHeight * 0.25 Height_Max_Modifier =0.95 Listview_Width := A_ScreenWidth * 0.55 Edge_Dock_Activation_Delay =750 Edge_Dock_Border_Visible =5 Col_1 =Auto Col_2 =0 Col_4 =Auto Height_Max := A_ScreenHeight * Height_Max_Modifier Small_to_Large_Ratio =1.6 #SingleInstance Force #Persistent #InstallKeybdHook #InstallMouseHook TRAYMENU: Menu,Tray,NoStandard Menu,Tray,DeleteAll Menu,Tray,Tip,MouseAltTab Menu,Tray,Add,E&xit,EXIT Process Priority,,High SetBatchLines, -1 WS_EX_APPWINDOW =0x40000 WS_EX_TOOLWINDOW =0x80 WS_DISABLED =0x8000000 GW_OWNER = 4 SysGet, Scrollbar_Vertical_Thickness, 2 Display_List_Shown =0 Window_Hotkey =0 Use_Large_Icons_Current =%Use_Large_Icons% Hide_From_Listview_List = Gui_Dock_Windows_List = Blank = Time_Since_Last_Alt_Close =0 Return XRotine: If AltTabIsActive = True { If ( GetKeyState("LWin") ) Return Else { SetTimer, XRotine, off If ( GetKeyState("LCtrl") ) Return If LWinDown2 = True Return Gosub, ListView_Destroy AltTabIsActive = false } } Return ~LWin::LWin If LWinDown2 = True LWinDown2 = False Else LWinDown2 = True Return #!Esc::Exitapp LWin & WheelDown:: SetTimer, XRotine, 10 AltTabIsActive = true Critical Gosub, Alt_Tab_Common_Stuff Selected_Row += 1 If Selected_Row > %Window_Found_Count% Selected_Row =1 LV_Modify(Selected_Row, "Focus Select") If ! ( GetKeyState("LWin") ) Gosub, ListView_Destroy Hotkey, $*~LWin Up, ListView_Destroy, On Return Lwin & WheelUp:: SetTimer, XRotine, 10 AltTabIsActive = true Critical Gosub, Alt_Tab_Common_Stuff Selected_Row -= 1 If Selected_Row =0 Selected_Row =%Window_Found_Count% LV_Modify(Selected_Row, "Focus Select") If ! ( GetKeyState("LWin") ) Gosub, ListView_Destroy Hotkey, $*~LWin Up, ListView_Destroy, On Return Alt_Esc: Critical Hotkey, $*~LWin Up, Off Hotkey, !Esc, Off Gui, 1: Default Gui, 1: Submit IL_Destroy(ImageListID1) LV_Delete() Gui, 1: Destroy WinActivate, ahk_id %Active_ID% Display_List_Shown =0 Return Alt_Tab_Common_Stuff: Hotkey, !Esc, Alt_Esc, On If Display_List_Shown =0 { WinGet, Active_ID, ID, A Gosub, Display_List If (Listview_NowH > Height_Max AND Use_Large_Icons_Current =1) { Use_Large_Icons_Current =0 IL_Destroy(ImageListID1) LV_Delete() Gui, 1: Destroy Display_List_Shown =0 Gosub, Display_List } If ((Listview_NowH * Small_to_Large_Ratio) < Height_Max AND Use_Large_Icons_Current =0 AND Use_Large_Icons=1) { Use_Large_Icons_Current =1 IL_Destroy(ImageListID1) LV_Delete() Gui, 1: Destroy Display_List_Shown =0 Gosub, Display_List } If ( GetKeyState("LWin") ) Gui, 1: Show, AutoSize x%Gui_x_Now% y%Gui_y_Now% Active_ID_Loop =0 Active_ID_Found =0 Loop, %Window_Found_Count% { Active_ID_Loop +=1 If Window%Active_ID_Loop% =%Active_ID% { Active_ID_Found =1 LV_Modify(Active_ID_Loop, "Focus Select") Break } } If Active_ID_Found =0 { WinGet, Active_Process, ProcessName, ahk_id %Active_ID% WinGetClass, Active_Class, ahk_id %Active_ID% If (Active_Class ="Progman" OR Active_Class ="WorkerW" OR Active_Class ="Shell_TrayWnd" OR Active_Class ="") { Active_ID_Loop =1 Active_ID_Found =1 } If Active_ID_Found =0 { Active_ID_Loop =0 Loop, %Window_Found_Count% { Active_ID_Loop +=1 If Exe_Name%Active_ID_Loop% =%Active_Process% { Active_ID_Found =1 LV_Modify(Active_ID_Loop, "Focus Select") Break } } } } } Selected_Row := LV_GetNext(0, "F") Return Display_List: Critical If Display_List_Shown =1 { IL_Destroy(ImageListID1) LV_Delete() } ImageListID1 := IL_Create(10,5,Use_Large_Icons_Current) WinGet, Window_List, List Process, Exist, explorer.exe Explorer_PID =%ErrorLevel% Loop, %Window_List% { wid := Window_List%A_Index% WinGet, PID%A_Index%, PID, ahk_id %wid% } Window_Found_Count =0 Window_Loop_Count =0 Loop, %Window_List% { Window_Loop_Count +=1 wid := Window_List%Window_Loop_Count% If Hide_From_Listview_List contains %wid% Continue WinGet, es, ExStyle, ahk_id %wid% WinGet, Style, Style, ahk_id %wid% If ( ( ! DllCall( "GetWindow", "uint", wid, "uint", GW_OWNER ) and ! ( es & WS_EX_TOOLWINDOW ) and ! ( Style & WS_DISABLED )) or ( es & WS_EX_APPWINDOW ) ) { Window_Found_Count += 1 Gosub, Retrive_Window_Icon Window_Parent_%Window_Found_Count% = Window%Window_Found_Count% =%wid% WinGet, Exe_Name%Window_Found_Count%, ProcessName, ahk_id %wid% Continue } If ( ! DllCall( "GetWindow", "uint", wid, "uint", GW_OWNER ) and ( Style & WS_DISABLED ) ) { Window_Found_Count += 1 hw_popup := DllCall( "GetLastActivePopup", "uint", wid ) SetFormat, integer, hex hw_popup += 0 SetFormat, integer, d Gosub, Retrive_Window_Icon WinGetTitle, hw_popup_title, ahk_id %hw_popup% Title%Window_Found_Count% := "/ DIALOG: " hw_popup_title " / " Title%Window_Found_Count% new_line Window_Parent_%Window_Found_Count% =%wid% Window%Window_Found_Count% =%hw_popup% WinGet, Exe_Name%Window_Found_Count%, ProcessName, ahk_id %hw_popup% Continue } WinGetClass, Win_Class, ahk_id %wid% If ( ! ( Win_Class ="#32770" ) ) Continue Parent := DllCall( "GetParent", "uint", wid ) SetFormat, integer, hex Parent += 0 SetFormat, integer, d WinGet, es, ExStyle, ahk_id %Parent% WinGet, Style, Style, ahk_id %Parent% If ( ( ( ! DllCall( "GetWindow", "uint", Parent, "uint", GW_OWNER ) and ! ( es & WS_EX_TOOLWINDOW ) and ! ( Style & WS_DISABLED )) or ( es & WS_EX_APPWINDOW ) ) ) { Window_Found_Count += 1 CPA_file_name := GetCPA_file_name( wid ) If ( CPA_file_name ) IL_Add( ImageListID1, CPA_file_name, 1 ) Else Gosub, Retrive_Window_Icon WinGetTitle, Title%Window_Found_Count%, ahk_id %wid% Title%Window_Found_Count% :="/ DIALOG: "Title%Window_Found_Count% Window_Parent_%Window_Found_Count% = Window%Window_Found_Count% =%wid% WinGet, Exe_Name%Window_Found_Count%, ProcessName, ahk_id %wid% } } If Display_List_Shown !=1 { Gui, 1: +AlwaysOnTop +ToolWindow -Caption Gui, 1: Font, s%Font_Size%, %Font_Type% Gui, 1: Color, %Gui_Colour% Gui, 1: Margin, 2, 2 Gui, 1: Add, ListView, r%Window_Found_Count% w%Listview_Width% -E0x200 AltSubmit -Multi Background%Listview_Colour% Count10 gListView_Event vListView1,#| |Window|Exe } LV_SetImageList(ImageListID1, 1) Loop, %Window_Found_Count% LV_Add("Icon" . A_Index,A_Space, A_Index, Title%A_Index%, Exe_Name%A_Index%) DetectHiddenWindows, On Process, Exist WinGet, Gui_ID, ID, ahk_class AutoHotkeyGUI ahk_pid %ErrorLevel% If Display_List_Shown !=1 { LV_ModifyCol(1, Col_1) LV_ModifyCol(2, Col_2) LV_ModifyCol(4, Col_4) SendMessage, 0x1000+29, 0, 0, SysListView321, ahk_id %Gui_ID% Width_Column_1 := ErrorLevel SendMessage, 0x1000+29, 1, 0, SysListView321, ahk_id %Gui_ID% Width_Column_2 := ErrorLevel SendMessage, 0x1000+29, 3, 0, SysListView321, ahk_id %Gui_ID% Width_Column_4 := ErrorLevel Col_3 := Listview_Width - Width_Column_1 - Width_Column_2 - Width_Column_4 LV_ModifyCol(3, Col_3) } SendMessage, 0x1000+31, 0, 0, SysListView321, ahk_id %Gui_ID% WinGetPos,,,, lv_header_h, ahk_id %ErrorLevel% VarSetCapacity( rect, 16, 0 ) SendMessage, 0x1000+14, 0, &rect, SysListView321, ahk_id %Gui_ID% y1 := 0 y2 := 0 Loop, 4 { y1 += *( &rect + 3 + A_Index ) y2 += *( &rect + 11 + A_Index ) } lv_row_h := y2 - y1 lv_h := 2 + lv_header_h + ( lv_row_h * Window_Found_Count ) + 2 GuiControl, Move, SysListView321, h%lv_h% GuiControlGet, Listview_Now, Pos, ListView1 Gui_x_Now := Gui_x Gui_y_Now := Gui_y If Gui_y_Now !=Center { If ((Gui_y_Now + Listview_NowH) > Height_Max) Gui_y_Now := Gui_y_Now + (Height_Max - (Listview_NowH + Gui_y_Now)) } If (Listview_NowH > Height_Max AND Use_Large_Icons_Current =0) { Col_3 := Col_3 - Scrollbar_Vertical_Thickness LV_ModifyCol(3, Col_3) Gui_y_Now := (A_ScreenHeight - Height_Max) / 2 GuiControl, Move, ListView1, h%Height_Max% } DetectHiddenWindows, Off If Display_List_Shown =1 { Gui, 1: Show, AutoSize x%Gui_x_Now% y%Gui_y_Now% If Selected_Row >%Window_Found_Count% Selected_Row =%Window_Found_Count% LV_Modify(Selected_Row, "Focus Select") } Display_List_Shown =1 Return ListView_Event: Critical If A_GuiEvent =Normal Gosub, ListView_Destroy If A_GuiEvent =K Gosub, Key_Pressed_1st_Letter Return GuiContextMenu: Selected_Row := LV_GetNext(0, "F") LV_GetText(RowText, Selected_Row, 2) Gui_2_wid := Window%RowText% Gui_2_wid_Title :=Title%RowText% StringLeft, Gui_2_wid_Title, Gui_2_wid_Title, 40 If (A_GuiControl = "ListView1") { Menu, ContextMenu1, Add Menu, Gui_Dock_Windows, Add Menu, Gui_Exclude_Windows, Add Menu, Gui_Un_Exclude_Windows, Add Menu, Gui_Window_Group_Load, Add Menu, Gui_Window_Group_Delete, Add Menu, Gui_Processes, Add Menu, ContextMenu1, DeleteAll Menu, Gui_Dock_Windows, DeleteAll Menu, Gui_Exclude_Windows, DeleteAll Menu, Gui_Un_Exclude_Windows, DeleteAll Menu, Gui_Window_Group_Load, DeleteAll Menu, Gui_Window_Group_Delete, DeleteAll Menu, Gui_Processes, DeleteAll Menu, Gui_Dock_Windows, Add, Left, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add, Right, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add, Top, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add, Bottom, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add Menu, Gui_Dock_Windows, Add, Corner - Top Left, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add, Corner - Top Right, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add, Corner - Bottom Left, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add, Corner - Bottom Right, Gui_Dock_Windows Menu, Gui_Dock_Windows, Add Menu, Gui_Dock_Windows, Add, Un-Dock, Gui_Un_Dock_Window Menu, Gui_Dock_Windows, Add, Un-Dock All, Gui_Un_Dock_Windows_All IfNotInString, Gui_Dock_Windows_List,%Gui_2_wid% Menu, Gui_Dock_Windows, Disable, Un-Dock Else { Menu, Gui_Dock_Windows, Disable, Left Menu, Gui_Dock_Windows, Disable, Right Menu, Gui_Dock_Windows, Disable, Top Menu, Gui_Dock_Windows, Disable, Bottom Menu, Gui_Dock_Windows, Disable, Corner - Top Left Menu, Gui_Dock_Windows, Disable, Corner - Top Right Menu, Gui_Dock_Windows, Disable, Corner - Bottom Left Menu, Gui_Dock_Windows, Disable, Corner - Bottom Right Menu, Gui_Dock_Windows, Check, % Edge_Dock_Position_%Gui_2_wid% } If Gui_Dock_Windows_List = Menu, Gui_Dock_Windows, Disable, Un-Dock All Menu, ContextMenu1, Add, Dock to Edge, :Gui_Dock_Windows Menu, ContextMenu1, Add Menu, Gui_Exclude_Windows, Add, % "Exclude All Of: " Exe_Name%RowText% , Gui_Exclude_Windows_Exclude_Exe_Only Menu, Gui_Exclude_Windows, Add, % "Exclude All Except: " Exe_Name%RowText% , Gui_Exclude_Windows_Include_Exe_Only Menu, Gui_Exclude_Windows, Add, Exclude All, Gui_Exclude_Windows_All Menu, Gui_Exclude_Windows, Add Menu, Gui_Exclude_Windows, Add, %Gui_2_wid_Title% (ID=%Gui_2_wid%), Gui_Exclude_Windows_Sub_Exclude Menu, ContextMenu1, Add, Exclude, :Gui_Exclude_Windows If Window_Found_Count =1 Menu, ContextMenu1, Disable, Exclude StringTrimLeft, Hide_From_Listview_List, Hide_From_Listview_List, 1 Loop, Parse, Hide_From_Listview_List,| { temp =%A_LoopField% Loop, %Window_List% { If Window_List%A_Index% contains %temp% Break If A_Index < %Window_List% Continue StringReplace, Hide_From_Listview_List, Hide_From_Listview_List,%temp% StringReplace, Hide_From_Listview_List, Hide_From_Listview_List,||,| } } StringSplit, Hide_From_Listview_List_Array, Hide_From_Listview_List,| Menu, Gui_Un_Exclude_Windows, Add, Un-Exclude All, Gui_Exclude_Windows_Sub_Un_Exclude_All Menu, Gui_Un_Exclude_Windows, Add Loop, %Hide_From_Listview_List_Array0% { WinGetTitle, Hide_From_Listview_List_Title, % "ahk_id " Hide_From_Listview_List_Array%A_Index% StringLeft, Hide_From_Listview_List_Title, Hide_From_Listview_List_Title, 40 Menu, Gui_Un_Exclude_Windows, Add, % Hide_From_Listview_List_Title " (ID=" Hide_From_Listview_List_Array%A_Index% ")", Gui_Exclude_Windows_Sub_Un_Exclude_Window } Menu, ContextMenu1, Add, Un-Exclude, :Gui_Un_Exclude_Windows If Hide_From_Listview_List_Array0 =0 Menu, ContextMenu1, Disable, Un-Exclude Menu, ContextMenu1, Add Loop, Parse, Window_Group_Name_List,| { If A_LoopField contains DOTEXE Menu, Gui_Window_Group_Load, Add, % Window_Group_Name_%A_LoopField% , Gui_Window_Group_Load Else Menu, Gui_Window_Group_Load, Add,%A_LoopField%, Gui_Window_Group_Load } If Window_Group_Name_List = Menu, Gui_Window_Group_Load, Add Menu, ContextMenu1, Add, Group - Load, :Gui_Window_Group_Load If Window_Group_Name_List = Menu, ContextMenu1, Disable, Group - Load Menu, ContextMenu1, Add, Group - Save, Gui_Window_Group_Save Loop, Parse, Window_Group_Name_List,| { If A_LoopField contains DOTEXE Menu, Gui_Window_Group_Delete, Add, % Window_Group_Name_%A_LoopField% , Gui_Window_Group_Delete Else Menu, Gui_Window_Group_Delete, Add,%A_LoopField%, Gui_Window_Group_Delete } If Window_Group_Name_List = Menu, Gui_Window_Group_Delete, Add If Window_Group_Name_List = Menu, ContextMenu1, Disable, Group - Load Menu, ContextMenu1, Add, Group - Delete, :Gui_Window_Group_Delete If Window_Group_Name_List = Menu, ContextMenu1, Disable, Group - Delete Menu, ContextMenu1, Add Menu, ContextMenu1, Add, Hotkeys, Gui_Hotkeys Menu, ContextMenu1, Add Menu, Gui_Processes, Color, FF3333, Single Menu, Gui_Processes, Add, % "End: " Gui_2_wid_Title, End_Process_Single Loop, Parse, Gui_Dock_Windows_List,| { If A_LoopField =%Gui_2_wid% Menu, Gui_Processes, Disable, % "End: " Gui_2_wid_Title } Menu, Gui_Processes, Add Menu, Gui_Processes, Add, % "End All: " Exe_Name%RowText%, End_Process_All_Instances Menu, ContextMenu1, Add, Processes, :Gui_Processes Menu, ContextMenu1, Add Menu, Gui_Help, Add, Help, HELP_and_LATEST_VERSION_CHANGES Menu, Gui_Help, Add, Latest Changes, HELP_and_LATEST_VERSION_CHANGES Menu, ContextMenu1, Add, Help, :Gui_Help Menu, ContextMenu1, Show, %A_GuiX%, %A_GuiY% } Return Gui_Dock_Windows: Edge_Dock_%Gui_2_wid% =%Gui_2_wid% Edge_Dock_Position_%Gui_2_wid% :=A_ThisMenuItem WinGet, Edge_Dock_State_%Gui_2_wid%, MinMax, ahk_id %Gui_2_wid% If Edge_Dock_State_%Gui_2_wid% =-1 WinRestore, ahk_id %Gui_2_wid% WinGetPos, Edge_Dock_X_%Gui_2_wid%, Edge_Dock_Y_%Gui_2_wid%, Edge_Dock_Width_%Gui_2_wid%, Edge_Dock_Height_%Gui_2_wid%, ahk_id %Gui_2_wid% Edge_Dock_X_Initial_%Gui_2_wid% := Edge_Dock_X_%Gui_2_wid% Edge_Dock_Y_Initial_%Gui_2_wid% := Edge_Dock_Y_%Gui_2_wid% Edge_Dock_Width_Initial_%Gui_2_wid% := Edge_Dock_Width_%Gui_2_wid% Edge_Dock_Height_Initial_%Gui_2_wid% := Edge_Dock_Height_%Gui_2_wid% WinGet, Edge_Dock_AlwaysOnTop_%Gui_2_wid%, ExStyle, ahk_id %Gui_2_wid% If Gui_Dock_Windows_List = Gui_Dock_Windows_List =%Gui_2_wid% Else Gui_Dock_Windows_List =%Gui_Dock_Windows_List%|%Gui_2_wid% Gosub, Alt_Esc Gui_Dock_Windows_ReDock: Edge_Dock_X = Edge_Dock_Y = If Edge_Dock_Position_%Gui_2_wid% contains Left Edge_Dock_X := - ( Edge_Dock_Width_%Gui_2_wid% - Edge_Dock_Border_Visible ) If Edge_Dock_Position_%Gui_2_wid% contains Right Edge_Dock_X := A_ScreenWidth - Edge_Dock_Border_Visible If Edge_Dock_Position_%Gui_2_wid% contains Top Edge_Dock_Y := - ( Edge_Dock_Height_%Gui_2_wid% - Edge_Dock_Border_Visible ) If Edge_Dock_Position_%Gui_2_wid% contains Bottom Edge_Dock_Y := A_ScreenHeight - Edge_Dock_Border_Visible WinMove, ahk_id %Gui_2_wid%,, %Edge_Dock_X%, %Edge_Dock_Y% WinSet, AlwaysOnTop, On, ahk_id %Gui_2_wid% SetTimer, Check_Mouse_Position, %Edge_Dock_Activation_Delay% Return Check_Mouse_Position: If Gui_Dock_Windows_List = { SetTimer, Check_Mouse_Position, Off SetTimer, Check_Mouse_Position_Deactivate, Off Return } Loop, Parse, Gui_Dock_Windows_List,| { IfWinNotExist, ahk_id %A_LoopField% { Gui_2_wid =%A_LoopField% Gosub, Gui_Un_Dock_Window } WinGet, Edge_Dock_State_%A_LoopField%, MinMax, ahk_id %A_LoopField% If Edge_Dock_State_%A_LoopField% =-1 WinRestore, ahk_id %A_LoopField% } WinGet, Previously_Active_Window_Before_Using_Docked, ID, A Edge_Dock_Active_Window = If ( Edge_Dock_%Previously_Active_Window_Before_Using_Docked% != Blank ) Edge_Dock_Active_Window := Edge_Dock_%Previously_Active_Window_Before_Using_Docked% MouseGetPos,,, Mouse_Over_Window If ( Edge_Dock_%Mouse_Over_Window% != Blank ) Edge_Dock_Active_Window := Edge_Dock_%Mouse_Over_Window% If Edge_Dock_Active_Window != { SetTimer, Check_Mouse_Position, Off Edge_Dock_X = Edge_Dock_Y = If Edge_Dock_Position_%Edge_Dock_Active_Window% contains Left Edge_Dock_X =0 If Edge_Dock_Position_%Edge_Dock_Active_Window% contains Right Edge_Dock_X := A_ScreenWidth - Edge_Dock_Width_%Edge_Dock_Active_Window% If Edge_Dock_Position_%Edge_Dock_Active_Window% contains Top Edge_Dock_Y =0 If Edge_Dock_Position_%Edge_Dock_Active_Window% contains Bottom Edge_Dock_Y := A_ScreenHeight - Edge_Dock_Height_%Edge_Dock_Active_Window% WinGet, Edge_Dock_MinMax, MinMax, ahk_id %Edge_Dock_Active_Window% If Edge_Dock_MinMax = 1 WinSet, AlwaysOnTop, Off, ahk_id %Edge_Dock_Active_Window% WinMove, ahk_id %Edge_Dock_Active_Window%,, %Edge_Dock_X%, %Edge_Dock_Y% WinActivate, ahk_id %Edge_Dock_Active_Window% SetTimer, Check_Mouse_Position_Deactivate, %Edge_Dock_Activation_Delay% } Return Check_Mouse_Position_Deactivate: Loop, Parse, Gui_Dock_Windows_List,| { IfWinNotExist, ahk_id %A_LoopField% { Gui_2_wid =%A_LoopField% Gui_Un_Dock_Window_No_Alt_Esc =1 Gosub, Gui_Un_Dock_Window } } WinGet, Edge_Dock_MinMax, MinMax, ahk_id %Edge_Dock_Active_Window% If Edge_Dock_MinMax = 1 WinSet, AlwaysOnTop, Off, ahk_id %Edge_Dock_Active_Window% WinGet, Active_Window_Now, ID, A If Active_Window_Now =%Edge_Dock_Active_Window% MouseGetPos,,, Active_Window_Now WinGet, PID_Edge_Dock_Active_Window, PID, ahk_id %Edge_Dock_Active_Window% WinGet, PID_Active_Window_Now, PID, ahk_id %Active_Window_Now% If PID_Active_Window_Now != %PID_Edge_Dock_Active_Window% { SetTimer, Check_Mouse_Position_Deactivate, Off WinGet, Style, Style, ahk_id %Edge_Dock_Active_Window% If ( Style & WS_DISABLED ) { SetTimer, Check_Mouse_Position, %Edge_Dock_Activation_Delay% Return } WinGet, Edge_Dock_State, MinMax, ahk_id %Edge_Dock_Active_Window% If Edge_Dock_State =-1 WinRestore, ahk_id %Edge_Dock_Active_Window% WinGetPos, Edge_Dock_X_%Edge_Dock_Active_Window%, Edge_Dock_Y_%Edge_Dock_Active_Window%, Edge_Dock_Width_%Edge_Dock_Active_Window%, Edge_Dock_Height_%Edge_Dock_Active_Window%, ahk_id %Edge_Dock_Active_Window% WinActivate, ahk_id %Active_Window_Now% Gui_2_wid =%Edge_Dock_Active_Window% Gosub, Gui_Dock_Windows_ReDock } Return Gui_Un_Dock_Window: If ! ( Edge_Dock_AlwaysOnTop_%Gui_2_wid% & 0x8 ) WinSet, AlwaysOnTop, Off, ahk_id %Gui_2_wid% WinMove, ahk_id %Gui_2_wid%,, % Edge_Dock_X_Initial_%Gui_2_wid%, % Edge_Dock_Y_Initial_%Gui_2_wid%, % Edge_Dock_Width_Initial_%Gui_2_wid%, % Edge_Dock_Height_Initial_%Gui_2_wid% Edge_Dock_%Gui_2_wid% = Edge_Dock_X_Initial_%Gui_2_wid% = Edge_Dock_Y_Initial_%Gui_2_wid% = Edge_Dock_Width_Initial_%Gui_2_wid% = Edge_Dock_Height_Initial_%Gui_2_wid% = Edge_Dock_State_%Gui_2_wid% = Edge_Dock_X_%Gui_2_wid% = Edge_Dock_Y_%Gui_2_wid% = Edge_Dock_Width_%Gui_2_wid% = Edge_Dock_Height_%Gui_2_wid% = Edge_Dock_Position_%Gui_2_wid% = Edge_Dock_AlwaysOnTop_%Gui_2_wid% = If Gui_Dock_Windows_List =%Gui_2_wid% StringReplace, Gui_Dock_Windows_List, Gui_Dock_Windows_List,%Gui_2_wid% Else StringReplace, Gui_Dock_Windows_List, Gui_Dock_Windows_List,%Gui_2_wid%| If Gui_Un_Dock_Window_No_Alt_Esc !=1 Gosub, Alt_Esc Gui_Un_Dock_Window_No_Alt_Esc = WinActivate, ahk_id %Gui_2_wid% Return Gui_Un_Dock_Windows_All: Loop, Parse, Gui_Dock_Windows_List,| { Gui_2_wid := A_LoopField Gui_Un_Dock_Window_No_Alt_Esc =1 Gosub, Gui_Un_Dock_Window } Return Gui_Hotkeys: Gosub, Alt_Esc WinGetClass, Gui_2_Class, ahk_id %Gui_2_wid% Gui, 2: Default Gui, 2: +Owner + AlwaysOnTop Gui, 2: Add, Text,, Hotkey for "%Gui_2_Class%" , Win + Gui, 2: Add, Hotkey, x+10 y+-15 vGui2_Hotkey_Add Gui, 2: Add, Button, x+10 gGui2_Hotkey_Add, Submit Gui, 2: Add, ListView, xm r10 w500 gListView2_Event vListView2, Hotkey|Window Class Group Loop, %Window_Hotkey% LV_Add("", Window_Hotkey%A_Index%, Window_Hotkey_Class%A_Index% " (" Gui_2_Process%A_Index% ")") Gui, 2: Show,, Hotkeys Return ListView2_Event: Return Gui2_Hotkey_Add: Gui, 2: Submit Gui, 2: Destroy Window_Hotkey +=1 Window_Hotkey_Class%Window_Hotkey% =%Gui_2_Class% WinGet, Gui_2_Process%Window_Hotkey%, ProcessName, ahk_id %Gui_2_wid% GroupAdd, Group#%Gui2_Hotkey_Add%, ahk_class %Gui_2_Class% Window_Hotkey%Window_Hotkey% =%Gui2_Hotkey_Add% Gosub, Window_Hotkeys_Enable Gosub, Gui_Hotkeys Return Window_Hotkeys_Enable: Loop, %Window_Hotkey% { Window_Hotkey_temp :=Window_Hotkey%A_Index% Hotkey, #%Window_Hotkey_temp%, Window_Hotkey_Action, On } Return Window_Hotkey_Action: GroupActivate, Group%A_ThisHotkey%, R Return Gui_Window_Group_Load: Gosub, Gui_Exclude_Windows_Sub_Un_Exclude_All Gosub, Display_List If A_ThisMenuItem contains .exe { Loop, %Window_Found_Count% { If Exe_Name%A_Index% =%A_ThisMenuItem% Continue Hide_From_Listview_List = % Hide_From_Listview_List "|" Window%A_Index% } } Else { Loop, %Window_Found_Count% { If Window_Group_Name_%A_ThisMenuItem% contains % Window%A_Index% Continue Hide_From_Listview_List = % Hide_From_Listview_List "|" Window%A_Index% } } Gosub, Display_List Return Gui_Window_Group_Save: Hotkey, $*~LWin Up, Off Gui, 1: -AlwaysOnTop InputBox, Window_Group_Name_Save_Input, Window Group Name, ( Save current list: Enter a name for this group of windows to restore in future.`n Dynamic lists: Use the name of the selected program's exe to generate a list that always shows only its windows. ),,600,,,,,, % Exe_Name%RowText% Gui, 1: +AlwaysOnTop Hotkey, $*~LWin Up, ListView_Destroy, On If ErrorLevel != 0 Return temp =%Window_Group_Name_Save_Input% StringReplace, Window_Group_Name_Save_Input, Window_Group_Name_Save_Input,%A_Space%,_, All StringReplace, Window_Group_Name_Save_Input, Window_Group_Name_Save_Input,.exe,DOTEXE, All Window_Group_Name_List = % Window_Group_Name_List "|" Window_Group_Name_Save_Input If InStr(Window_Group_Name_List,"|") =1 StringTrimLeft, Window_Group_Name_List, Window_Group_Name_List, 1 If Window_Group_Name_Save_Input = Return If Window_Group_Name_Save_Input contains DOTEXE Window_Group_Name_%Window_Group_Name_Save_Input% =%temp% Else { temp = Loop, %Window_Found_Count% temp = % temp "|" Window%A_Index% Window_Group_Name_%Window_Group_Name_Save_Input% =%temp% } Gosub, Display_List Return Gui_Window_Group_Delete: StringReplace, temp, A_ThisMenuItem,%A_Space%,_, All StringReplace, temp, temp,.exe,DOTEXE, All StringReplace, Window_Group_Name_List, Window_Group_Name_List,%temp% StringReplace, Window_Group_Name_List, Window_Group_Name_List,||,| Return Gui_Exclude_Windows_Sub_Un_Exclude_All: Hide_From_Listview_List = Gosub, Display_List Return Gui_Exclude_Windows_Sub_Exclude: Hide_From_Listview_List =%Hide_From_Listview_List%|%Gui_2_wid% Gosub, Display_List Return Gui_Exclude_Windows_All: Loop, %Window_Found_Count% { If Window%A_Index% =% Window%RowText% Continue Hide_From_Listview_List =% Hide_From_Listview_List "|" Window%A_Index% } Gosub, Display_List Return Gui_Exclude_Windows_Exclude_Exe_Only: Loop, %Window_Found_Count% { If Exe_Name%A_Index% =% Exe_Name%RowText% Hide_From_Listview_List =% Hide_From_Listview_List "|" Window%A_Index% } Gosub, Display_List Return Gui_Exclude_Windows_Include_Exe_Only: Loop, %Window_Found_Count% { If Exe_Name%A_Index% =% Exe_Name%RowText% Continue Hide_From_Listview_List =% Hide_From_Listview_List "|" Window%A_Index% } Gosub, Display_List Return Gui_Exclude_Windows_Sub_Un_Exclude_Window: Hide_From_Listview_List = Loop, %Hide_From_Listview_List_Array0% { If A_ThisMenuItem contains % Hide_From_Listview_List_Array%A_Index% Continue Hide_From_Listview_List = % Hide_From_Listview_List "|" Hide_From_Listview_List_Array%A_Index% } Gosub, Display_List Return End_Process_Single: Loop, Parse, Gui_Dock_Windows_List,| { If A_LoopField =%Gui_2_wid% Return } PostMessage, 0x112, 0xF060,,, ahk_id %Gui_2_wid% WinWaitClose, ahk_id %Gui_2_wid%,, 1 Gosub, Display_List Return End_Process_All_Instances: List_of_Process_To_End = Loop, %Window_Found_Count% { WinGetClass, Win_Class, % "ahk_id " Window%A_Index% If Win_Class = #32770 Continue If Exe_Name%RowText% = % Exe_Name%A_Index% List_of_Process_To_End =% List_of_Process_To_End "|" Window%A_Index% } StringTrimLeft, List_of_Process_To_End, List_of_Process_To_End, 1 Loop, Parse, List_of_Process_To_End,| { Gui_2_wid := A_LoopField Gosub, End_Process_Single } List_of_Process_To_End = Return Key_Pressed_1st_Letter: Key_Pressed_ASCII =%A_EventInfo% Selected_Row := LV_GetNext(0, "F") LV_GetText(RowText, Selected_Row, 2) If Key_Pressed_ASCII =220 { If ( A_TickCount - Time_Since_Last_Alt_Close < 200 ) Return Time_Since_Last_Alt_Close := A_TickCount Gui_2_wid := Window%RowText% Gosub, End_Process_Single Return } If Key_Pressed_ASCII =191 { If ( A_TickCount - Time_Since_Last_Alt_Close < 200 ) Return Time_Since_Last_Alt_Close := A_TickCount Gui_2_wid := Window%RowText% Gosub, End_Process_All_Instances Return } Loop, %Window_Found_Count% { Selected_Row +=1 If Selected_Row > %Window_Found_Count% Selected_Row =1 LV_GetText(List_Title_Text, Selected_Row, 2) If Window_Parent_%List_Title_Text% != WinGetTitle, List_Title_Text, % "ahk_id " Window_Parent_%List_Title_Text% Else WinGetTitle, List_Title_Text, % "ahk_id " Window%Selected_Row% StringUpper, List_Title_Text, List_Title_Text List_Title_Text:=Asc(List_Title_Text) If Key_Pressed_ASCII =%List_Title_Text% { LV_Modify(Selected_Row, "Focus Select") Break } } Return ListView_Destroy: LWinDown2 = False Critical Hotkey, $*~LWin Up, Off Hotkey, !Esc, Off Gui, 1: Default Selected_Row := LV_GetNext(0, "F") LV_GetText(RowText, Selected_Row, 2) Gui, 1: Submit IL_Destroy(ImageListID1) LV_Delete() Gui, 1: Destroy wid := Window%RowText% WinGet, wid_MinMax, MinMax, ahk_id %wid% If wid_MinMax =-1 WinRestore, ahk_id %wid% WinActivate, ahk_id %wid% Display_List_Shown =0 Return Retrive_Window_Icon: If Use_Large_Icons_Current =1 { SendMessage, 0x7F, 1, 0,, ahk_id %wid% h_icon := ErrorLevel } Else h_icon = If ( ! h_icon ) { SendMessage, 0x7F, 2, 0,, ahk_id %wid% h_icon := ErrorLevel If ( ! h_icon ) { SendMessage, 0x7F, 0, 0,, ahk_id %wid% h_icon := ErrorLevel If ( ! h_icon ) { If Use_Large_Icons_Current =1 h_icon := DllCall( "GetClassLong", "uint", wid, "int", -14 ) If ( ! h_icon ) { h_icon := DllCall( "GetClassLong", "uint", wid, "int", -34 ) If ( ! h_icon ) h_icon := DllCall( "LoadIcon", "uint", 0, "uint", 32512 ) } } } } If (h_icon =FAIL or ! h_icon) { IL_Add(ImageListID1, "C:\WINDOWS\system32\shell32.dll" , 3) WinGetTitle, Title%Window_Found_Count%, ahk_id %wid% Title%Window_Found_Count% :="/ NOT RESPONDING!!!: "Title%Window_Found_Count% } If h_icon !=FAIL { IconNumber := DllCall("ImageList_ReplaceIcon", UInt, ImageListID1, Int, -1, UInt, h_icon) WinGetTitle, Title%Window_Found_Count%, ahk_id %wid% } Return GuiClose: GuiEscape: Gosub, Alt_Esc Return 2GuiClose: 2GuiEscape: Gui, 1: -Disabled Gui, 2: Submit LV_Delete() Gui, 2: Destroy Gui, 1: Default Gosub, Alt_Esc Return GetCPA_file_name( p_hw_target ) { WinGet, pid_target, PID, ahk_id %p_hw_target% hp_target := DllCall( "OpenProcess", "uint", 0x18, "int", false, "uint", pid_target ) hm_kernel32 := DllCall( "GetModuleHandle", "str", "kernel32.dll" ) pGetCommandLineA := DllCall( "GetProcAddress", "uint", hm_kernel32, "str", "GetCommandLineA" ) buffer_size = 6 VarSetCapacity( buffer, buffer_size ) DllCall( "ReadProcessMemory", "uint", hp_target, "uint", pGetCommandLineA, "uint", &buffer, "uint", buffer_size, "uint", 0 ) loop, 4 ppCommandLine += ( ( *( &buffer+A_Index ) ) << ( 8*( A_Index-1 ) ) ) buffer_size = 4 VarSetCapacity( buffer, buffer_size, 0 ) DllCall( "ReadProcessMemory", "uint", hp_target, "uint", ppCommandLine, "uint", &buffer, "uint", buffer_size, "uint", 0 ) loop, 4 pCommandLine += ( ( *( &buffer+A_Index-1 ) ) << ( 8*( A_Index-1 ) ) ) buffer_size = 260 VarSetCapacity( buffer, buffer_size, 1 ) DllCall( "ReadProcessMemory", "uint", hp_target, "uint", pCommandLine, "uint", &buffer, "uint", buffer_size, "uint", 0 ) DllCall( "CloseHandle", "uint", hp_target ) ix_b := InStr( buffer, "Control_RunDLL" )+16 ix_e := InStr( buffer, ".cpl", false, ix_b )+3 StringMid, CPA_file_name, buffer, ix_b, ix_e-ix_b+1 if ( ix_e ) return, CPA_file_name else return, false } HELP_and_LATEST_VERSION_CHANGES: Gosub, Alt_Esc Gui, 99: Font, s9, Courier New Gui, 99: Add, ListView, r25 w900 -Hdr, Text Gui, 99: Default If A_ThisMenuItem =Help { Loop, Parse, HELP,`n LV_Add("", A_LoopField) } If A_ThisMenuItem =Latest Changes { Loop, Parse, LATEST_VERSION_CHANGES,`n LV_Add("", A_LoopField) } LV_ModifyCol(1, 870) Gui, 99: Show,, %A_ThisMenuItem% Return 99GuiClose: 99GuiEscape: LV_Delete() Gui, 99: Destroy Return EXIT: ExitApp