;NoClose.ahk ; Disable the Close button (X) of selected windows ; To run, save to BlockInput.ahk and install AutoHotkey from www.autohotkey.com ;Skrommel @2006 #SingleInstance,Force SetTitleMatchMode,2 applicationname=NoClose ids= oldids= Gosub,INIREAD Gosub,TRAYMENU Gosub,STARTUP OnExit,EXIT Hotkey,%add%,ADD Hotkey,%swap%,SWAP Loop { Sleep,500 allids= activeids= WinGet,id_,List,,,Program Manager Loop,%id_% { Sleep,0 id:=id_%A_Index% allids=%allids%%id%`, IfInString,ids,%id%`, activeids=%activeids%%id%`, If autodisable=0 Continue IfInString,oldids,%id%`, Continue WinGetTitle,title,ahk_id %id% WinGetClass,class,ahk_id %id% rule=%title% ahk_class %class%||| IfInString,rules,%rule% { DISABLE(id) activeids=%activeids%%id%`, } } oldids:=allids ids:=activeids } Return STARTUP: allids= WinGet,id_,List,,,Program Manager Loop,%id_% { id:=id_%A_Index% allids=%allids%%id%`, If disableonstartup=0 Continue WinGetTitle,title,ahk_id %id% WinGetClass,class,ahk_id %id% rule=%title% ahk_class %class%||| IfInString,rules,%rule% { DISABLE(id) ids=%ids%%id%`, } } oldids:=allids Return EXIT: If enableonexit=0 ExitApp WinGet,id_,List,,,Program Manager Loop,%id_% { id:=id_%A_Index% IfInString,ids,%id%`, { ENABLE(id) StringReplace,ids,ids,%id%`,, } } ExitApp ADD: WinGet,id,ID,A WinGetTitle,title,ahk_id %id% WinGetClass,class,ahk_id %id% rule=%title% ahk_class %class%||| IfInString,rules,%rule% Return Else { DISABLE(id) rules=%rules%%rule% ids=%ids%%id%`, IniWrite,%rules%,%applicationname%.ini,Settings,rules } Return SWAP: WinGet,id,ID,A WinGetTitle,title,ahk_id %id% WinGetClass,class,ahk_id %id% IfInString,ids,%id%`, { ENABLE(id) StringReplace,ids,ids,%id%`,, Return } DISABLE(id) ids=%ids%%id%`, Return DISABLE(id) ;By RealityRipple at http://www.xtremevbtalk.com/archive/index.php/t-258725.html { menu:=DllCall("user32\GetSystemMenu","UInt",id,"UInt",0) DllCall("user32\DeleteMenu","UInt",menu,"UInt",0xF060,"UInt",0x0) WinGetPos,x,y,w,h,ahk_id %id% WinMove,ahk_id %id%,,%x%,%y%,%w%,% h-1 WinMove,ahk_id %id%,,%x%,%y%,%w%,% h+1 } ENABLE(id) ;By Mosaic1 at http://www.xtremevbtalk.com/archive/index.php/t-258725.html { menu:=DllCall("user32\GetSystemMenu","UInt",id,"UInt",1) DllCall("user32\DrawMenuBar","UInt",id) } TRAYMENU: Menu,Tray,NoStandard Menu,Tray,DeleteAll Menu,Tray,Add,%applicationname%,ABOUT Menu,Tray,Add, Menu,Tray,Add,&Settings...,SETTINGS Menu,Tray,Add,&About...,ABOUT Menu,Tray,Add,E&xit,EXIT Menu,Tray,Default,%applicationname% Menu,Tray,Tip,%applicationname% Return INIREAD: IfNotExist,%applicationname%.ini { disableonstartup=1 autodisable=1 enableonexit=1 swap=^1 add=^2 rules= Gosub,INIWRITE Gosub,ABOUT } IniRead,disableonstartup,%applicationname%.ini,Settings,disableonstartup IniRead,autodisable,%applicationname%.ini,Settings,autodisable IniRead,enableonexit,%applicationname%.ini,Settings,enableonexit IniRead,swap,%applicationname%.ini,Settings,swap IniRead,add,%applicationname%.ini,Settings,add IniRead,rules,%applicationname%.ini,Settings,rules Return INIWRITE: IniWrite,%disableonstartup%,%applicationname%.ini,Settings,disableonstartup IniWrite,%autodisable%,%applicationname%.ini,Settings,autodisable IniWrite,%enableonexit%,%applicationname%.ini,Settings,enableonexit IniWrite,%swap%,%applicationname%.ini,Settings,swap IniWrite,%add%,%applicationname%.ini,Settings,add IniWrite,%rules%,%applicationname%.ini,Settings,rules Return SETTINGS: HotKey,%swap%,Off HotKey,%add%,Off Gui,Destroy Gui,Add,Tab,W340 H330 xm,Options|Rules Gui,Tab,1 Gui,Add,GroupBox,xm+10 ym+40 w320 h70,&Hotkey to Enable/Disable the active windows' close button Gui,Add,Hotkey,xp+10 yp+20 w300 vsswap StringReplace,current,swap,+,Shift +%A_Space% StringReplace,current,current,^,Ctrl +%A_Space% StringReplace,current,current,!,Alt +%A_Space% Gui,Add,Text,xm+20 y+5,Current hotkey: %current% Gui,Add,GroupBox,xm+10 y+30 w320 h70,Hotkey to &Add a new rule Gui,Add,Hotkey,xm+20 yp+20 w300 vsadd StringReplace,current,add,+,Shift +%A_Space% StringReplace,current,current,^,Ctrl +%A_Space% StringReplace,current,current,!,Alt +%A_Space% Gui,Add,Text,xm+20 y+5,Current hotkey: %current% Gui,Add,GroupBox,xm+10 y+30 w320 h80,Automatic rule execution Gui,Add,CheckBox,xm+20 yp+20 Checked%disableonstartup% vsdisableonstartup,Disable close buttons on NoClose &Startup Gui,Add,CheckBox,xm+20 y+5 Checked%autodisable% vsautodisable,Disable close buttons on &Window Creation Gui,Add,CheckBox,xm+20 y+5 Checked%enableonexit% vsenableonexit,Enable close buttons on NoClose &Exit Gui,Tab,2 StringReplace,rules,rules,|||,`n,All Gui,Add,GroupBox,w320 h280 xm+10 y+10,&Windows Titles and Classes Gui,Add,Edit,xm+20 yp+20 w300 h180 Multi -Wrap vsrules,%rules% Gui,Add,Text,xm+20 y+5,Syntax: Gui,Add,Text,xm+20 y+5,Example: Calculator ahk_class SciCalc Gui,Add,Text,xm+30 y+5,will disable all Calculator close buttons. Gui,Add,Text,xm+20 y+5,Either part is optional. Gui,Tab Gui,Add,Button,xm+10 y+30 w75 GSETTINGSOK,&OK Gui,Add,Button,x+5 w75 GSETTINGSCANCEL,&Cancel Gui,Show,,%applicationname% Settings Return SETTINGSOK: Gui,Submit If sswap<> { swap:=sswap HotKey,%swap%,SWAP } HotKey,%swap%,On If sadd<> { add:=sadd HotKey,%add%,ADD } HotKey,%add%,On If sdelay<> delay:=sdelay StringReplace,rules,srules,`n,|||,All rules=%rules%||| Loop { StringReplace,rules,rules,||||||,|||,All StringGetPos,pos,rules,|||||| If pos<0 Break } StringLeft,start,rules,3 If start=||| StringTrimLeft,rules,rules,3 disableonstartup:=sdisableonstartup autodisable:=sautodisable enableonexit:=senableonexit Gosub,INIWRITE Return SETTINGSCANCEL: HotKey,%swap%,SWAP HotKey,%swap%,On HotKey,%add%,ADD HotKey,%add%,On Gui,Destroy Return ABOUT: Gui,99:Destroy Gui,99:Margin,20,20 Gui,99:Add,Picture,xm Icon1,%applicationname%.exe Gui,99:Font,Bold Gui,99:Add,Text,x+10 yp+10,%applicationname% v1.1 Gui,99:Font Gui,99:Add,Text,y+10,Disable the Close button (X) of selected windows. Gui,99:Add,Text,y+10,- Press Ctrl+1 to Enable or Disable a close button. Gui,99:Add,Text,y+5 ,- Press Ctrl+2 to Add a rule. Gui,99:Add,Text,y+10,- To change the settings, choose Settings in the tray menu. Gui,99:Add,Picture,xm y+20 Icon5,%applicationname%.exe Gui,99:Font,Bold Gui,99:Add,Text,x+10 yp+10,1 Hour Software by Skrommel Gui,99:Font Gui,99:Add,Text,y+10,For more tools, information and donations, please visit Gui,99:Font,CBlue Underline Gui,99:Add,Text,y+5 G1HOURSOFTWARE,www.1HourSoftware.com Gui,99:Font Gui,99:Add,Picture,xm y+20 Icon7,%applicationname%.exe Gui,99:Font,Bold Gui,99:Add,Text,x+10 yp+10,DonationCoder Gui,99:Font Gui,99:Add,Text,y+10,Please support the contributors at Gui,99:Font,CBlue Underline Gui,99:Add,Text,y+5 GDONATIONCODER,www.DonationCoder.com Gui,99:Font Gui,99:Add,Picture,xm y+20 Icon6,%applicationname%.exe Gui,99:Font,Bold Gui,99:Add,Text,x+10 yp+10,AutoHotkey Gui,99:Font Gui,99:Add,Text,y+10,This tool was made using the powerful Gui,99:Font,CBlue Underline Gui,99:Add,Text,y+5 GAUTOHOTKEY,www.AutoHotkey.com Gui,99:Font Gui,99:Show,,%applicationname% About hCurs:=DllCall("LoadCursor","UInt",NULL,"Int",32649,"UInt") ;IDC_HAND OnMessage(0x200,"WM_MOUSEMOVE") Return 1HOURSOFTWARE: Run,http://www.1hoursoftware.com,,UseErrorLevel Return DONATIONCODER: Run,http://www.donationcoder.com,,UseErrorLevel Return AUTOHOTKEY: Run,http://www.autohotkey.com,,UseErrorLevel Return 99GuiClose: Gui,99:Destroy OnMessage(0x200,"") DllCall("DestroyCursor","Uint",hCur) Return WM_MOUSEMOVE(wParam,lParam) { Global hCurs MouseGetPos,,,,ctrl If ctrl in Static10,Static14,Static18 DllCall("SetCursor","UInt",hCurs) Return } Return