; pöhserFensterKiller.ahk / (c) 2008 derRaphael / zLib Lizenz Stil ; Schließ das pöhse Fenster! #WinActivateForce ; Krieg das Fenster - egal wie SetBatchLines, -1 ; Mach das Skript schneller SetTitleMatchMode, Fast ; Mir langen nur ein paar Daten ... SetTitleMatchMode, RegEx DetectHiddenWindows, On ; Ich kriege Euch ALLE!!! IniFile = poehseFenster.ini IniRead, HilfeAnzeigen, %IniFile%, standard, HilfeAnzeigen, ja Menu, Tray, Icon, Shell32.dll, 77 ; zeig n lustiges bild Menu, Tray, Add, Verwaltung anzeigen, PöhseFensterListe Menu, Tray, Add, Hilfe anzeigen, help Menu, Tray, Add, Killer an/aus , machDenModus Menu, Tray, Add Menu, Tray, Add, PöhseFensterKiller beenden, Beenden Menu, Tray, NoStandard Menu, Tray, Default, Verwaltung anzeigen Menu, ContextMenu, Add, Eintrag löschen, LöschDas Menu, ContextMenu, Add, Eintrag bearbeiten, BearbeiteDas Menu, ContextMenu, Add Menu, ContextMenu, Add, Verwaltung schließen, BeendeDas Gosub, machInternePöhseListe If (HilfeAnzeigen="ja") { Gosub, help } return +^F1:: help: MsgBox,68,Information, % "Zur Benutzung:`n`n" . "SHIFT+STRG+Q: Neues Pöhses Fenster wählen`n" . "SHIFT+STRG+A: Pöhse Fenster verwalten`n" . "SHIFT+STRG+W: Auf Pöhses Fenster achten an/aus`n`n" . "SHIFT+STRG+F1: Diese Hilfe anzeigen`n" . "SHIFT+STRG+F10: Programm editieren`n" . "SHIFT+STRG+F11: Programm beenden`n" . "SHIFT+STRG+F12: Programm neu laden`n`n" . "Soll die Hilfe beim Nächsten Start angezeigt werden?`n" IfMsgBox, Yes HilfeAnzeigen := "ja" else HilfeAnzeigen := "nein" IniWrite, %HilfeAnzeigen%, %IniFile%, standard, HilfeAnzeigen return +^q:: MsgBox,64,Hinweis, % "Such das Dich nervende pöhse Fenster`,`n" . "halte die STRG-Taste und klick es mit der Maus an`n" . "`n" . "Es wird dich nie wieder ärgern!" KlickDasPöhseFenster: Hotkey, ^LButton, NeuesPöhsesFenster, ON SetTimer, hinweisAN, 50 return +^w:: machDenModus: if !(mEWZ) { Menu, Tray, Icon, Shell32.dll, 66 ; zeig n anderes bild SetTimer, machEsWiederZu, 10 ; starte entdecker function mEWZ=1 ; merke, was du getan hast } else { Menu, Tray, Icon, Shell32.dll, 77 SetTimer, machEsWiederZu, OFF mEWZ=0 } return +^a:: PöhseFensterListe: If !(WinExist("Verwaltung der pöhsen Fenster")) { Gui, Add, ListView, r20 w600 +Grid -Multi gBearbeiteDas vPöhseListe, ClassNN|Pöhser Filter|Pöhser Ursprung Gui, Add, Button, Hidden Default w1 h1 x0 y0 gBearbeiteDas Hotkey, IfWinActive, Verwaltung der pöhsen Fenster Hotkey, Escape, BeendeDas, ON Hotkey, Delete, LöschDas, ON Hotkey, IfWinActive IniRead, AnzahlPöhserFenster, %IniFile%, standard, AnzahlPöhserFenster GoSub, machPöhseListe Gui, Show,, Verwaltung der pöhsen Fenster LV_ModifyCol() ; automatische Breite anpassen } else { WinActivate, Verwaltung der pöhsen Fenster } return machInternePöhseListe: InternePöhseListe := "" IniRead, AnzahlPöhserFenster, %IniFile%, standard, AnzahlPöhserFenster, 0 Loop, %AnzahlPöhserFenster% { Position := A_Index pöhserFilterSchlüssel = pöhserFensterFilter%Position% pöhseClassNNSchlüssel = pöhseFensterClassNN%Position% IniRead, gelesenerFilter, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% IniRead, geleseneClassNN, %IniFile%, pöhseFenster, %pöhseClassNNSchlüssel% If (geleseneClassNN) AND (geleseneClassNN!="error") { InternePöhseListe .= gelesenerFilter "`n" geleseneClassNN "`n" } } return machEsWiederZu: Loop, Parse, InternePöhseListe, `n { If (Mod(A_Index,2)) { pöhserFilter := A_LoopField pöhseClassNN := "" } else { pöhseClassNN := A_LoopField IfWinExist, %pöhserFilter% ahk_class %pöhseClassNN% { ; existiert das pöhse Fenster? ; Zeig her das Ding WinActivate, %pöhserFilter% ahk_class %pöhseClassNN% WinWaitActive ; Warte du nur .... WinClose ; und weg is! } } } return NeuesPöhsesFenster: Hotkey, ^LButton, NeuesPöhsesFenster, OFF MouseGetPos,,, HWND ; Zeig mir das pöhse Fenster! WinGetClass, NeuePöhseClassNN, ahk_id %HWND% ; Merke Dir die ClassNN WinGetTitle, NeuerPöhserTitel, ahk_id %HWND% ; Merke Dir den Titel Gosub, hinweisAUS Resultat := erkennePöhsesFenster( neuerPöhserTitel, neuePöhseClassNN ) If (Resultat = "unbekannt" ) { MsgBox,65,Hab keine Furcht!, % "Ich habe das neue pöhse Fenster erkannt!`n`n" . "Es hat folgende ClassNN:`n" . """" NeuePöhseClassNN """`n" . "und trägt folgenden Titel:`n" . """" NeuerPöhserTitel """`n`n" . "So merke ich mir das! " IfMsgBox, OK { MerkePöhsesFenster( NeuerPöhserTitel, NeuePöhseClassNN ) Gosub, machPöhseListe Gosub, machInternePöhseListe Gosub, machEsWiederZu If !(mEWZ) { Gosub, machDenModus } } } else If ( Resultat = "alterHut" ) { Titel := "Ich hab da mal so 'ne Frage..." SetTimer, andereKnöpfe, 1 MsgBox,34,%Titel%, % "Das pöhse Fenster mit den Eigenschaften`n`n" . "Titel: " . """" NeuerPöhserTitel """`n" . "ClassNN: " . """" NeuePöhseClassNN """`n`n" . "kenne ich schon. Ist das gar nicht so pöhse und`n" . "soll ich das wieder vergessen?" IfMsgBox, Ignore Merkbefreiung(neuerPöhserTitel, neuePöhseClassNN ) else IfMsgBox, Abort GoSub, PöhseFensterListe else IfMsgBox, Retry Gosub, KlickDasPöhseFenster } else If ( Resultat = "hutMitFeder" ) { pöhserFilterSchlüssel = pöhserFensterFilter%ErrorLevel% IniRead, bekannterPöhserFilter, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% SetTimer, andereKnöpfe, 1 Titel := "Ich hab da mal so 'ne Frage..." MsgBox,34,%Titel%, % "Das pöhse Fenster kenne ich schon.`n" . "Es hat schon einen eigenen Filter. So schaut's a mal aus:`n" . "Ursprung: " . """" NeuerPöhserTitel """`n" . "Filter: " . """" bekannterPöhserFilter """`n" . "ClassNN: " . """" NeuePöhseClassNN """`n`n" . "Was mache ich denn da am besten?" IfMsgBox, Ignore Merkbefreiung(neuerPöhserTitel, neuePöhseClassNN, bekannterPöhserFilter ) else IfMsgBox, Abort GoSub, PöhseFensterListe else IfMsgBox, Retry Gosub, KlickDasPöhseFenster } else if (Resultat = "nichtDieMama") { MsgBox, 16, NEIN DAS MACHE ICH NICHT, % "Wie möchtest du denn dann die ganzen" . "pöhsen Fenster verwalten können? Hmmmm?`n`n" . "Das lassen wir also schön bleiben!" } Gosub, machInternePöhseListe return andereKnöpfe: IfWinExist, Ich hab da mal so 'ne Frage... { SetTimer, andereKnöpfe, OFF ControlSetText, Button1, &Verwalten ControlSetText, Button2, V&erklickt ControlSetText, Button3, Ve&rgiss es } return hinweisAN: ToolTip, STRG + MausKlick auf das PÖHSE Fenster. return hinweisAUS: SetTimer, hinweisAN, OFF ToolTip return machPöhseListe: Gui, 1:Default LV_Delete() Loop, %AnzahlPöhserFenster% { Position := A_Index pöhserTitelSchlüssel = pöhserFensterTitel%Position% pöhserFilterSchlüssel = pöhserFensterFilter%Position% pöhseClassNNSchlüssel = pöhseFensterClassNN%Position% IniRead, gelesenerTitel , %IniFile%, pöhseFenster, %pöhserTitelSchlüssel% IniRead, gelesenerFilter, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% IniRead, geleseneClassNN, %IniFile%, pöhseFenster, %pöhseClassNNSchlüssel% If (geleseneClassNN) AND (geleseneClassNN!="error") { LV_Add("",geleseneClassNN,gelesenerFilter,gelesenerTitel) } } return GuiContextMenu: If (A_GuiControl="PöhseListe") { Menu, ContextMenu, Show } return GuiClose: BeendeDas: Hotkey, Delete, LöschDas, OFF Hotkey, Escape, BeendeDas, OFF Gui, Destroy return BearbeiteDas: Hotkey, Delete, LöschDas, OFF If (A_GuiEvent="doubleclick") AND (A_GuiControl="PöhseListe") { Zeile := A_EventInfo } else { Zeile := gibDieZeile() } if (Zeile) { LV_GetText(pöhseClassNN, Zeile, 1) LV_GetText(pöhserFilter, Zeile, 2) LV_GetText(pöhserTitel , Zeile, 3) Hotkey, Escape, BeendeDas, OFF Gui, 2:+Owner -Caption +Border Gui, 2:Font, s12 bold Gui, 2:Add, Text, w400, Der Pöhser Fenster Filter arbeitet mit regulären Ausdrücken (RegEx) Gui, 2:Font Gui, 2:Add, Text, x90 w310, % "Um alle Titel zu erfassen, die mit BLAH beginnen, " . "langt es entweder ^BLAH oder BLAH* einzugeben.`n" . "Um alle Fenster zu kriegen, die mit BLAH aufhören, " . "langt es entweder BLAH$ oder *BLAH einzugeben.`n" . "Um alle Fenster zu kriegen, die irgendwo BLAH " . "im Titel haben, langt es *BLAH* einzugeben.`n" Gui, 2:Add, Picture, x30 yp+10 w32 h32 Icon3, USER32.DLL Gui, 2:Add, Text, x10, Pöhses Fenster Filter: Gui, 2:Add, Edit, w400 vFilter, %pöhserFilter% Gui, 2:Add, Text,, Pöhses Fenster Urpsrung: Gui, 2:Add, Edit, w400 vUrsprung +Readonly, %pöhserTitel% Gui, 2:Add, Text,, Pöhses Fenster ClassNN: Gui, 2:Add, Edit, w400 vClassNN +Readonly, %pöhseClassNN% Gui, 2:Add, Button, wp g2Speichern +Default, &Speichern Gui, 2:Add, Button, wp g2Beenden, &Verwerfen Gui, 2:Show, w420, Pöhses Fenster bearbeiten } return 2Speichern: Gui, 2:Submit Merkbefreiung(pöhserTitel, pöhseClassNN, pöhserFilter) MerkePöhsesFenster( Ursprung, ClassNN, Filter) Gosub, machInternePöhseListe Gui, 1:Default LV_Modify(Zeile,"",ClassNN, Filter, Ursprung) LV_ModifyCol() ; automatische Breite anpassen 2GuiEscape: 2GuiClose: 2Beenden: Gui, 2:Destroy Hotkey, Escape, BeendeDas, ON return LöschDas: Titel := "Ohne Rücksicht auf Verluste..." MsgBox,36,%Titel%,% "Diese Aktion kann nicht rückgängig gemacht" . " werden`nSoll ich das wirklich löschen?" IfMsgBox, Yes { Zeile := gibDieZeile() LV_GetText(pöhseClassNN, Zeile, 1) LV_GetText(pöhserFilter, Zeile, 2) LV_GetText(pöhserTitel , Zeile, 3) If Zeile Merkbefreiung(pöhserTitel, pöhseClassNN, pöhserFilter) Gosub, machInternePöhseListe Gosub, machPöhseListe } return +^f12:: ReloadScript: reload return +^f11:: Beenden: exitApp return +^f10:: EditScript: edit return gibDieZeile() { Zeile = 0 Loop { lZeile := LV_GetNext(lZeile) if not lZeile break Zeile := lZeile } return, % Zeile } erkennePöhsesFenster( pöhserTitel, pöhseClassNN ) { If (pöhserTitel="Verwaltung der pöhsen Fenster") AND (pöhseClassNN="AutohotkeyGUI") { Resultat := "nichtDieMama" } else { Global IniFile IniRead, AnzahlPöhserFenster, %IniFile%, standard, AnzahlPöhserFenster If (AnzahlPöhserFenster="error") { IniWrite, 1, %IniFile%, standard, AnzahlPöhserFenster AnzahlPöhserFenster=1 } Resultat := "unbekannt" ; standardergebnis Loop, % AnzahlPöhserFenster { Position := A_Index pöhserTitelSchlüssel = pöhserFensterTitel%Position% pöhserFilterSchlüssel = pöhserFensterFilter%Position% pöhseClassNNSchlüssel = pöhseFensterClassNN%Position% IniRead, gelesenerTitel , %IniFile%, pöhseFenster, %pöhserTitelSchlüssel% IniRead, gelesenerFilter, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% IniRead, geleseneClassNN, %IniFile%, pöhseFenster, %pöhseClassNNSchlüssel% If (gelesenerTitel=pöhserTitel) AND (geleseneClassNN=pöhseClassNN) { Resultat := "alterHut" ; kenne ich schon => Alter Hut If (gelesenerFilter!=pöhserTitel) { Resultat := "hutMitFeder" ; gibt es spezialFilter? ErrorLevel := A_Index } break ; Schleifenende } } } Return, % Resultat } MerkePöhsesFenster( PöhserTitel, PöhseClassNN, PöhserFilter="") { Global IniFile ; Wo ist das IniFile? IniRead, AnzahlPöhserFenster, %IniFile%, standard, AnzahlPöhserFenster, 1 neuesPöhsesDing = 1 ; Standard: Neues pöhses Ding! Loop, % AnzahlPöhserFenster { Position := A_Index IniRead, geleseneClassNN, %IniFile%, pöhseFenster, pöhseFensterClassNN%Position%, %leer% If (geleseneClassNN="error") OR !(geleseneClassNN) { ; Stelle leer? neuesPöhsesDing = 0 ; kein neues pöhses Ding break ; Schleifenende, weil Stelle leer } } If !(PöhserFilter) { ; wenn ich keinen Filter habe, PöhserFilter:=PöhserTitel ; mache ich mir einen! } If (neuesPöhsesDing) { ; Neues Pöhses Dingens? Position++ ; Neue Position AnzahlPöhserFenster++ ; Sind jetzt mehr pöhse Fenster, als vorher IniWrite, %AnzahlPöhserFenster%, %IniFile%, standard, AnzahlPöhserFenster } pöhserTitelSchlüssel = pöhserFensterTitel%Position% pöhserFilterSchlüssel = pöhserFensterFilter%Position% pöhseClassNNSchlüssel = pöhseFensterClassNN%Position% IniWrite, %PöhserTitel% , %IniFile%, pöhseFenster, %pöhserTitelSchlüssel% IniWrite, %PöhserFilter%, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% IniWrite, %PöhseClassNN%, %IniFile%, pöhseFenster, %pöhseClassNNSchlüssel% } Merkbefreiung(pöhserTitel, pöhseClassNN, pöhserFilter="" ) { Global IniFile IniRead, AnzahlPöhserFenster, %IniFile%, standard, AnzahlPöhserFenster, 1 If !(PöhserFilter) { ; wenn ich keinen Filter habe, PöhserFilter:=PöhserTitel ; mache ich mir einen! } Loop, % AnzahlPöhserFenster { Position := A_Index pöhserTitelSchlüssel = pöhserFensterTitel%Position% pöhserFilterSchlüssel = pöhserFensterFilter%Position% pöhseClassNNSchlüssel = pöhseFensterClassNN%Position% IniRead, gelesenerTitel , %IniFile%, pöhseFenster, %pöhserTitelSchlüssel% IniRead, gelesenerFilter, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% IniRead, geleseneClassNN, %IniFile%, pöhseFenster, %pöhseClassNNSchlüssel% If (gelesenerTitel=pöhserTitel) AND (gelesenerFilter=pöhserFilter) AND (geleseneClassNN=pöhseClassNN) { IniWrite, %leer%, %IniFile%, pöhseFenster, %pöhserTitelSchlüssel% IniWrite, %leer%, %IniFile%, pöhseFenster, %pöhserFilterSchlüssel% IniWrite, %leer%, %IniFile%, pöhseFenster, %pöhseClassNNSchlüssel% break } } }