 |
AutoHotkey Community Let's help each other out
|
| View previous topic :: View next topic |
| Author |
Message |
Guest
|
Posted: Sat Feb 05, 2005 9:18 pm Post subject: QCD (quick cd) from c't article |
|
|
Has anybody tried this promising script from the respective article in c't 3, with which you should be able to change quickly in a folder, from which you don't know the exact place? ( http://www.heise.de/ct/05/03/links/196.shtml )
When I try it (Win XP) a error pop up will warn of a division by zero and the line is displayed where the problem would occur:
Loop, %ActDrive_qcd%:\*.* , 2, 1 ; Nur Verzeichnisse und Rekursiv
{
NumFolders_qcd = %A_Index%
...
PercentInc_qcd = 100
PercentInc_qcd /= %NumFolders_qcd%.0
I've tried to fix this with a if statement:
if NumFolders_qcd <> 0 ; vermeide Division durch 0
{
PercentInc_qcd /= %NumFolders_qcd%.0
}
else
{
PercentInc_qcd = 0
}
but this doesn't work.
Any idea? |
|
| Back to top |
|
 |
Arne Guest
|
Posted: Sat Feb 05, 2005 10:32 pm Post subject: |
|
|
kommt eine fehlermeldung für die Zeilen
556-565  |
|
| Back to top |
|
 |
Chris Site Admin
Joined: 02 Mar 2004 Posts: 10467
|
Posted: Sun Feb 06, 2005 1:24 am Post subject: |
|
|
| Quote: | | if NumFolders_qcd <> 0 ; vermeide Division durch 0 |
I can see that this would happen if the drive has no folders on it. Since in that case, NumFolders_qcd would probably be blank, check if it's blank or zero (though zero is probably impossible in this case):
if NumFolders_qcd ; It's not blank and not zero.
... |
|
| Back to top |
|
 |
Yordan Guest
|
Posted: Sun Feb 06, 2005 10:45 pm Post subject: |
|
|
hiho!
same problem here. the reason is not, that there are no folders. by trial and error i found a solution:
change
PercentInc_qcd = 100
PercentInc_qcd /= %NumFolders_qcd%.0
to
PercentInc_qcd = 100.0
PercentInc_qcd /= %NumFolders_qcd%
if anybody could explain it to me, i would be happy
i also added a button to open a command-prompt in the chosen directory. these were my first steps with this cool program. if anybody likes to see it, i can post it here. i'm sure, that it could be improved.
greetings
Yordan |
|
| Back to top |
|
 |
BoBo Guest
|
Posted: Sun Feb 06, 2005 11:11 pm Post subject: |
|
|
@ Yordan wrote:
| Quote: | | i also added a button to open a command-prompt in the chosen directory. these were my first steps with this cool program. if anybody likes to see it, i can post it here. i'm sure, that it could be improved. | "Gimme, gimme, gimme, gimme that code ...lalalala" (seem to remember that's a song from the 60's). So do it! Gimme that code. We'll tweak it to death  |
|
| Back to top |
|
 |
Yordan
Joined: 06 Feb 2005 Posts: 8
|
Posted: Sun Feb 06, 2005 11:39 pm Post subject: |
|
|
ok ok
i added code at different places, so i have to post the whole script...
| Code: | ; ---------------------------------------------------------------------
; Name: QuickChangeDir v0.2
; Author: Wolfgang Reszel für c't
; Datum: 7.12.2004
;
; Language: german/english
; Platform: tested with XP
; #Includeable: yes
;
; Beschreibung: (german)
; ---------------------------------------------------------------------
; Mit QCD kann man schnell zu einem gewünschten Verzeichnis wechseln,
; ohne dass man genau weiß wo es liegt. QCD durchsucht einen vorher
; erstellten Verzeichnisindex der gewünschten Laufwerke.
;
; QCD wird entweder per Doppelklick auf das Trayicon oder mit Strg+<
; aufgerufen. Man gibt in dem erscheinenden Fenster den Suchbegriff ein
; drückt Enter oder auf Suchen. Gibt es nur ein zum Suchbegriff
; passendes Verzeichnis, wird es direkt geöffnet. Ansonsten bekommt man
; eine Liste aller zum Suchbegriff passenden Verzeichnisse angezeigt.
; Dort kann man per Doppelklick oder mit der Schaltfläche
; "OK, wechseln" das Verzeichnis wechseln. Mit der Schaltfläche
; "Explorer" oder auch bei gedrückter Strg+Taste wird eine neues
; Explorer-Fenster geöffnet, statt im aktuellen Fenster das Verzeichnis
; zu wechseln.
;
; Ruft man das Skript mit einem beliebigen Parameter auf, wird
; direkt der Verzeichnisindex erstellt.
; ---------------------------------------------------------------------
; ---------------------------------------------------------------------
; -- Konfiguration: ---------------------------------------------------
; ---------------------------------------------------------------------
; Welche Laufwerke sollen berücksichtigt werden?
Drives_qcd = CD ; Laufwerksbuchstaben (direkt hintereinander)
; Wo werden die Verzeichnisindexe gespeichert
IndexPath_qcd = %AppData%
IndexFile_qcd = QCD_Index_
; ---------------------------------------------------------------------
; -- Initialisierung --------------------------------------------------
; ---------------------------------------------------------------------
; Programmname und Version
Version_qcd = 0.11
Titel_qcd = QuickChangeDir v%Version_qcd%
selectedDrives_qcd = %Drives_qcd%
#Singleinstance force
Coordmode, Caret, Screen
; Systemsprache ermitteln
StringRight, Lng, A_Language, 2
if Lng = 07 ; = Deutsch (0407, 0807, 0c07 ...)
{
lngUntersuche = Untersuche Laufwerk
lngIndiziere = Erstelle Verzeichnisindex
lngWechseln = &Verzeichnis wechseln
lngReIndizierung = Verzeichnisindex &aktualisieren
lngReIndizierungBreak = &Aktualisierung abbrechen
lngAbbruch = &Abbrechen
lngSuchen = &Suchen
lngAktualisieren = A&ktualisieren
lngAktualisierenAlle = alle Laufwerke aktualisieren
lngNeuesFenster = &Explorer
lngVerzWechseln = &OK, wechseln
lngÜberVerzHinzu = Überverzeichnis hinzufügen
lngAusIndexEntf = Verzeichnisbaum aus Index entfernen
lngLaufwerkERR = Laufwerk existiert nicht
lngSucheERR = Nichts gefunden
lngSuchEingabe = Suchbegriff eingeben:
lngEnde = Beende
lngDosBox = DOS-Box
}
else ; = andere Sprachen
{
lngUntersuche = Looking at drive
lngIndiziere = Creating directorylist
lngWechseln = &change directory
lngReIndizierung = &update directorylist
lngReIndizierungBreak = &cancel updating
lngAbbruch = &cancel
lngSuchen = &search
lngAktualisieren = &update
lngAktualisierenAlle = &update all drives
lngNeuesFenster = &Explorer
lngVerzWechseln = &OK, change
lngÜberVerzHinzu = add parent directory
lngAusIndexEntf = delete directorytree
lngLaufwerkERR = drive does noct exist
lngSucheERR = nothing found
lngSuchEingabe = Enter query:
lngEnde = Exit
lngDosBox = DOS-Box
}
; History laden
FileReadLine, HistoryFile_qcd, %IndexPath_qcd%\QCD_History.dat, 1
Loop, Parse, HistoryFile_qcd,|
{
If A_LoopField <>
History_qcd = %History_qcd%%A_LoopField%|
if A_Index > 20
break
}
; Tooltip und Icon anpassen
Menu, TRAY, Tip, %Titel_qcd%
Menu, TRAY, Icon, %SystemRoot%\system32\SHELL32.dll, 46
; Traymenü erweitern
Menu, TRAY, Add
Menu, TRAY, Add, %lngEnde% %Titel_qcd%, Quit
Menu, TRAY, Add
; Untermenü für die Laufwerksaktualisierung erzeugen
Loop, Parse, Drives_qcd
{
Menu, IndexLwf, Add, %A_Loopfield%:, subIndexDrives_qcd
}
Menu, IndexLwf, Add, %lngAktualisierenAlle%, subIndexDrives_qcd
; Erzeugtes Untermenü einem Menüpunkt im Hauptmenü zuweisen.
Menu, TRAY, Add, %lngReIndizierung%, :IndexLwf
Menu, TRAY, Add, %lngWechseln%, QCD
; Default-Menüpunkt auf 'Verzeichnis wechseln' setzen,
; somit wird beim Doppelklick auf das Trayicon dieser
; Befehl direkt ausgeführt
Menu, TRAY, Default, %lngWechseln%
; Wenn das Skript mit einem Parameter aufgerufen wird,
; dann direkt die Indizierung der Verzeichnisse starten
if 1 <>
gosub, IndexDrives_qcd
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
Return ; Auto-Execute-Bereich ist hier zu Ende
; ---------------------------------------------------------------------
; -- Eingabefenster für QCD ------------------------------------
; ---------------------------------------------------------------------
; Hotkey mit Strg+<
^SC056::gosub, QCD ; HotkeyDef
; ---------------------------------------------------------------------
QCD: ; Unterroutine für das Eingabefenster
WinGet , q_window_id, ID, A ; ID es aktiven Fensters
WinGetClass, q_class, ahk_id %q_window_id% ; Fensterklasse ermitteln
IfWinNotExist, %Titel_qcd% ; Fenster aufbauen, wenn es noch nicht existiert
{
WinH_qcd = 80 ; Fensterhöhe
WinW_qcd = 300 ; Fensterbreite
; Fenster aufbauen
Gui, Add, Text , , %lngSuchEingabe%
Gui, Font, Ccc0000 ; Text Rot (#CC0000)
Gui, Add, Text , x+5 , %ErrorMsg_qcd%
Gui, Add, ComboBox, vFindString_qcd x10 w280 , %History_qcd%
Gui, Add, Button , gIndexDrives_qcd w75 , %lngAktualisieren%
Gui, Add, Button , gGuiCancel x+60 w70 , %lngAbbruch%
Gui, Add, Button , gSearchOK_qcd x+5 w70 Default, %lngSuchen%
Gui, -Maximize
Gui, Show, w%WinW_qcd% h%WinH_qcd%, %Titel_qcd%
ErrorMsg_qcd =
}
else ; ... wenn Fenster existiert ...
{
WinActivate, %Titel_qcd% ; .. in den Vordergrund
}
Return
; ---------------------------------------------------------------------
SearchOK_qcd: ; Suchen-Schaltfläche
GetKeyState, ctrlState_qcd, Ctrl ; Status der Strg-Taste ermitteln
if ctrlState_qcd = U ; wenn nicht gedruckt
ctrlState_qcd = ; Statusvariable löschen, damit sie im Ergebnisfenster nochmals abgefragt wird
Gosub, Result_qcd
Return
; ---------------------------------------------------------------------
; -- Ergebnisfenster der Suche ----------------------------------------
; ---------------------------------------------------------------------
; ---------------------------------------------------------------------
Result_qcd: ; Unterroutine für die Verzeichnissuche [Suchen-Schaltfläche]
Gui, Submit ; Eingaben des Fenster in die Variablen übertragen
Gui, Destroy ; Eingabefenster beenden
; Rechte Maustaste und die Entf-Taste für das kommende Fenster zulassen
Hotkey, ~RButton, On
Hotkey, ~Del, On
StringLen, Len_qcd, FindString_qcd ; Länge des Suchbegriffs
StringReplace, History_qcd, History_qcd, %FindString_qcd%| ; Doppelter Eintrag in Historie entfernen
History_qcd = %FindString_qcd%|%History_qcd% ; Suchbegriffhistorie erweitern
FileDelete,%IndexPath_qcd%\QCD_History.dat
FileAppend,%History_qcd%,%IndexPath_qcd%\QCD_History.dat
; Wenn Suchbegriff länger als ein Zeichen
if Len_qcd > 1
{
NumDirs_qcd = 0 ; Anzahl der gefundenen Verzeichnisse auf 0 setzen
WinW_qcd = 620 ; Fensterbreite
WinH_qcd = 460 ; Fensterhöhe
MinW_qcd = 420 ; minimale Fensterbreite
MinH_qcd = 200 ; minimale Fensterhöhe
ListW_qcd = 600 ; Breite der Ergebnisliste
ListH_qcd = 400 ; Höhe der Ergebnisliste
EditY_qcd = 400 ; Position der Statuszeile
ButtonY_qcd = 430 ; Y-Position der Schaltflächen
Button2X_qcd = 225 ; X-Position von "Abbrechen"
Button5X_qcd = 325 ; X-Position von "DOS-Box"
Button3X_qcd = 425 ; X-Position von "gleiches Fenster"
Button4X_qcd = 520 ; X-Position von "neues Fenster"
Gui, Add, ListBox, h%ListH_qcd% w%ListW_qcd% Choose1 vvarResults_qcd gResultList_qcd Sort ; Ergebnisliste
Loop, Parse, Drives_qcd ; alle Laufwerke duchgehen
{
ActDrive_qcd = %A_LoopField% ; aktuelles Laufwerk
IndexTemp_qcd = %IndexPath_qcd%\%IndexFile_qcd%%ActDrive_qcd%.dat ; Dateiname Verzeichnisindex
Loop, Read, %IndexTemp_qcd% ; Verzeichnisindex laden
{
SplitPath, A_LoopReadLine, CheckFile, CheckDir ; Pfad aufteilen
If CheckFile contains %FindString_qcd% ; Wenn Suchbegriff vorhanden
{
GuiControl,,varResults_qcd,%A_LoopReadLine% ; Pfad zum Fenster hinzufügen
NumDirs_qcd++ ; Anzahl gefundener Verz. erhöhen
}
}
GuiControl, Choose, varResults_qcd, 1 ; erstes Verz. auswählen
}
; Fenster zeigen, wenn mehr als ein Verz. gefunden
if NumDirs_qcd > 1
{
Gui, Add, Edit , x10 y%EditY_qcd% w%ListW_qcd% vStatusBar ReadOnly
Gui, Add, Button, gResultIndexDrives_qcd x10 y%ButtonY_qcd% w90 , %lngAktualisieren%
Gui, Add, Button, gGuiCancel x%Button2X_qcd% y%ButtonY_qcd% w90 , %lngAbbruch%
Gui, Add, Button, gResultOK_qcd2 x%Button3X_qcd% y%ButtonY_qcd% w90 , %lngNeuesFenster%
Gui, Add, Button, gResultOK_qcd x%Button4X_qcd% y%ButtonY_qcd% w90 Default, %lngVerzWechseln%
Gui, Add, Button, gResultOK_qcd3 x%Button5X_qcd% y%ButtonY_qcd% w90 , %lngDosBox%
Gui, +Resize
Gui, Show, w%WinW_qcd% h%WinH_qcd%, %Titel_qcd%
SetTimer, ResultResize_qcd, 0 ; Fenstergrößen-Überwachungsroutine ständig aufrufen
}
; Wenn nur ein Verzeichnis gefunden, direkt dort hin wechseln
if NumDirs_qcd = 1
{
gosub, ResultOK_qcd
}
; Wenn kein Verzeichnis gefunden, dann Suchfenster wieder aufrufen
if NumDirs_qcd = 0
{
SetTimer,ResultResize_qcd,Off ; Größenüberwachung ausschalten
Gui,Destroy ; Fenster beenden
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
ErrorMsg_qcd = %lngSucheERR% ; Fehlermeldung setzen
Gosub, QCD ; Suchfenster wieder aufrufen
}
}
; Wenn Suchbegriff ein Zeichen lang, dann ist der Suchbegriff ein Laufwerksbuchstabe
if Len_qcd = 1
{
DriveGet, AllDrives_qcd, List ; Liste aller verfügbaren Laufwerksbuchstaben
if AllDrives_qcd contains %FindString_qcd% ; Ist Suchbegriff in der Liste ...
{ ; ... ja
q_path = %FindString_qcd%: ; Pfad setzen
gosub, q_ChangeDir ; Unterroutine um Pfad zu öffnen oder zu wechseln
ctrlState_qcd = ; Status der Strg-Taste zurücksetzen
}
else ; ... nein
{
ErrorMsg_qcd = %lngLaufwerkERR% ; Fehhlermeldung setzen
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
Gosub, QCD ; Suchfenster wieder aufrufen
}
}
Return
; ---------------------------------------------------------------------
ResultIndexDrives_qcd: ; Indizierung von der Ergebnisliste aufrufen
gosub, IndexDrives_qcd ; Indizierung starten
gosub, GuiCancel ; Ergebnisliste schließen ...
gosub, SearchOK_qcd ; ... und neu laden
Return
; ---------------------------------------------------------------------
ResultResize_qcd: ; Fenstergrößen-Überwachung
; - sorgt dafür, dass beim Vergrößern des Sucherergebnisfensters die Schaltflächen
; und die Ergebnisliste mit angepasst werden
wingetpos newWinX_qcd,newWinY_qcd,newWinW_qcd,newWinH_qcd, %Titel_qcd% ; Fenstermaße ermitteln
if newWinW_qcd < %MinW_qcd% ; Breitenlimit unterschritten ...
WinMove, %Titel_qcd%,,,,%MinW_qcd% ; ... dann auf Minimalbreite setzen
if newWinH_qcd < %MinH_qcd% ; Höhenlimit unterschritten ...
WinMove, %Titel_qcd%,,,,,%MinH_qcd% ; ... dann auf Minimalhöhe setzen
wingetpos newWinX_qcd,newWinY_qcd,newWinW_qcd,newWinH_qcd, %Titel_qcd% ; nochmals Fenstermaße ermitteln
WinGet, win_id, ID, A ; ID des aktiven Fensters
SysGet,TitleH_qcd,30 ; Höhe der Titelzeile
SysGet,BorderH_qcd,33 ; Höhe des Fensterrands
SysGet,BorderW_qcd,32 ; Breite des Fensterrands
TitleH_qcd += %BorderH_qcd%
TitleH_qcd += %BorderH_qcd%
; Differenz des veränderten Fensters zu der Originalgröße errechnen
DiffH_qcd = %newWinH_qcd%
DiffH_qcd -= %TitleH_qcd%
DiffH_qcd -= %WinH_qcd%
DiffW_qcd = %newWinW_qcd%
DiffW_qcd -= %BorderW_qcd%
DiffW_qcd -= %BorderW_qcd%
DiffW_qcd -= %WinW_qcd%
if DiffW_qcd = %lastDiffW_qcd%
if DiffH_qcd = %lastDiffH_qcd%
return
lastDiffW_qcd = %DiffW_qcd%
lastDiffH_qcd = %DiffH_qcd%
; Neue Positionen und Größen berechnen
newListW_qcd = %ListW_qcd%
newListW_qcd += %DiffW_qcd%
newListH_qcd = %ListH_qcd%
newListH_qcd += %DiffH_qcd%
newEditY_qcd = %EditY_qcd%
newEditY_qcd += %DiffH_qcd%
newButtonY_qcd = %ButtonY_qcd%
newButtonY_qcd += %DiffH_qcd%
newButton2X_qcd = %Button2X_qcd%
newButton2X_qcd += %DiffW_qcd%
newButton3X_qcd = %Button3X_qcd%
newButton3X_qcd += %DiffW_qcd%
newButton4X_qcd = %Button4X_qcd%
newButton4X_qcd += %DiffW_qcd%
newButton5X_qcd = %Button5X_qcd%
newButton5X_qcd += %DiffW_qcd%
; Fensterelemente anpassen
GuiControl, move, ListBox1, w%newListW_qcd% h%newListH_qcd%
GuiControl, move, Edit1, y%newEditY_qcd% w%newListW_qcd%
GuiControl, move, Button1, y%newButtonY_qcd%
GuiControl, move, Button2, x%newButton2X_qcd% y%newButtonY_qcd%
GuiControl, move, Button3, x%newButton3X_qcd% y%newButtonY_qcd%
GuiControl, move, Button4, x%newButton4X_qcd% y%newButtonY_qcd%
GuiControl, move, Button5, x%newButton5X_qcd% y%newButtonY_qcd%
Return
; ---------------------------------------------------------------------
ResultOK_qcd: ; Verzeichnis wechseln (OK-Schaltfläche)
SetTimer,ResultResize_qcd,Off
Gui, Submit
Gui, Destroy
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
IfExist,%varResults_qcd% ; nur wechslen wenn Verzeichnis existiert
{
q_path = %varResults_qcd%
gosub, q_ChangeDir
ctrlState_qcd =
}
return
; ---------------------------------------------------------------------
ResultOK_qcd2: ; neues Explorer-Fenster (Explorer-Schaltfläche)
ctrlState_qcd = D ; gedrückte Strg-Taste vortäuschen
gosub, ResultOK_qcd
Return
; ---------------------------------------------------------------------
ResultOK_qcd3: ; DOS-Fenster
SetTimer,ResultResize_qcd,Off
Gui, Submit
Gui, Destroy
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
IfExist,%varResults_qcd% ; nur wechseln wenn Verzeichnis existiert
{
StringSplit,splittedpath,varResults_qcd,:,,
Run, cmd.exe /K %splittedpath1%: && cd "%splittedpath2%"
ctrlState_qcd =
}
Return
; ---------------------------------------------------------------------
GuiEscape: ; Abbrechen/ESC beider Fenster (Eingabe und Ergebnisfenster)
GuiCancel: ; Abbrechen/ESC beider Fenster (Eingabe und Ergebnisfenster)
GuiClose: ; Abbrechen/ESC beider Fenster (Eingabe und Ergebnisfenster)
if BreakIndexing_qcd = ; Wenn Indizierung inaktiv
{
SetTimer,ResultResize_qcd,Off
Gui, Destroy ; Fenster schließen
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
}
else ; Wenn Indizierung aktiv
{
BreakIndexing_qcd = yes ; Indizierung wird abgebrochen
}
Return
; ---------------------------------------------------------------------
ResultList_qcd: ; Klick auf Ergebnisliste
; Statuszeile mit dem Namen ohne Pfad setzen
GuiControlGet, ListLine_qcd,,varResults_qcd
SplitPath,ListLine_qcd,FName_qcd,FDir_qcd
GuiControl, ,StatusBar,%FName_qcd%
; Bei Doppelklick "neues Fenster" ausführen
if A_GuiControlEvent = DoubleClick
gosub, ResultOK_qcd
return
; Kontextmenü der Ergebnisliste
~RButton:: ; HotkeyDef
IfWinActive, %Titel_qcd% ; nur wenn Fenster aktiv
{
MouseGetPos,,,,MouseControl_qcd ; Control unter Maus ermitteln
if MouseControl_qcd = ListBox1 ; Wenn Control Ergebnisliste ...
{
; ... dann Kontextmenü aufbauen
Send, {LButton} ; An Mauspositoin einen Klick ausführen, damit die Zeile markiert wird
Menu, context, add, %lngNeuesFenster%, ResultOK_qcd
Menu, context, add, %lngVerzWechseln%, ResultOK_qcd2
Menu, context, add, %lngDosBox%, ResultOK_qcd3
Menu, context, add
Menu, context, add, %lngAusIndexEntf%, DeleteEntry_qcd
Menu, context, add, %lngÜberVerzHinzu%, AddParent_qcd
Menu, context, show
Menu, context, DeleteAll
}
}
Return
~Del:: ; HotkeyDef
IfWinActive, %Titel_qcd% ; nur wenn Fenster aktiv
{
Gosub, DeleteEntry_qcd
}
Return
; ---------------------------------------------------------------------
DeleteEntry_qcd: ; Menüpunkt Eintrag aus der Verzeichnisindex entfernen
GuiControlGet, ListLine_qcd,,varResults_qcd ; aktuelle Zeile ermitteln
gosub, SubDeleteEntry_qcd
Return
; ---------------------------------------------------------------------
AddParent_qcd: ; Menüpunkt Überverzeichnis zur Liste hinzufügen
GuiControlGet, ListLine_qcd,,varResults_qcd
SplitPath, ListLine_qcd,,ListLine_qcd
GuiControl, Choose, varResults_qcd, 1
GuiControl, ChooseString, varResults_qcd, %ListLine_qcd%
GuiControlGet, SelLine,,varResults_qcd
if ListLine_qcd <> %SelLine%
GuiControl,, varResults_qcd, %ListLine_qcd%
GuiControl, ChooseString, varResults_qcd, %ListLine_qcd%
WinActivate, %Titel_qcd%
Return
; ---------------------------------------------------------------------
SubDeleteEntry_qcd: ; Unterroutine für Eintrag aus der Verzeichnisindex entfernen
; Schaltflächen deaktivieren
GuiControl, Disable, Button1
GuiControl, Disable, Button2
GuiControl, Disable, Button3
GuiControl, Disable, Button4
GuiControl, Disable, ListBox1
StringLeft, ActDrive_qcd, ListLine_qcd, 1 ; Laufwerksbuchstabe des ausgewählten Pfads
IndexTemp_qcd = %IndexPath_qcd%\%IndexFile_qcd%%ActDrive_qcd%_tmp.dat ; Temporärer Index
IndexDest_qcd = %IndexPath_qcd%\%IndexFile_qcd%%ActDrive_qcd%.dat ; Verzeichnisindex
GuiControl,+AltSubmit,varResults_qcd ; ... damit nicht der Name, sondern die ListenNr ermittelt wird
Loop, Read, %IndexDest_qcd% ; Verzeichnisindex laden
{
StringLen,Len_qcd,ListLine_qcd ; Länge des ausgewählten Pfads
StringLeft, MatchLine_qcd, A_LoopReadLine, %Len_qcd% ; geladener Eintrag aus Verzeichnisindex kürzen
If MatchLine_qcd <> %ListLine_qcd% ; Wenn ausgewählter Pfad <> geladener Eintrag
{
FileAppend, %A_LoopReadLine%`n, %IndexTemp_qcd% ; ... wieder in Verzeichnisindex schreiben
}
else ; ... sonst nicht schreiben ...
{
GuiControl,ChooseString,varResults_qcd, %A_LoopReadLine% ; Eintrag in Ergebnisliste auswählen
GuiControlGet,ListN_qcd,,varResults_qcd ; ListenNr ermitteln
Control, Delete, %ListN_qcd%, ListBox1, %Titel_qcd% ; Eintrag löschen
}
}
GuiControl,-AltSubmit,varResults_qcd ; ... damit wieder der Name von Listenelementen ermittelt wird
FileMove, %IndexTemp_qcd%, %IndexDest_qcd%,1 ; Verzeichnisindex durch temporären Index ersetzen
; Schaltfläche wieder aktivieren
GuiControl, Enable, Button1
GuiControl, Enable, Button2
GuiControl, Enable, Button3
GuiControl, Enable, Button4
GuiControl, Enable, ListBox1
GuiControl, Focus , ListBox1
Return
; ---------------------------------------------------------------------
; -- Laufwerke indizieren ---------------------------------------------
; ---------------------------------------------------------------------
IndexDrives_qcd: ; Laufwerke indizieren
If BreakIndexing_qcd = IndexingActiv ; Wenn Indizierung im Gange
{
BreakIndexing_qcd = yes ; Indizierung abbrechen (Aufruf kam also vom Traymenü)
Return ; und nicht weiter machen
}
If BreakIndexing_qcd = ; Wenn Indizierung nicht im Gange
BreakIndexing_qcd = IndexingActiv ; Status setzen
; Traymenü anpassen
Menu, TRAY, Disable, %lngWechseln% ; Verzeichniswechsel nicht erlauben
Menu, TRAY, Disable, %lngReIndizierung% ; Aktualisierung nicht erlauben
Menu, TRAY, Add , %lngReIndizierungBreak%, IndexDrives_qcd ; Menüpunkt für Aktualisierung abbrechen
Menu, TRAY, NoDefault ; Doppelklick (Standardmenüeintrag) verhindern
; Alle Schaltflächen bis auf "Abbrechen" deaktivieren
GuiControl, Disable, Button1
GuiControl, Disable, Button3
GuiControl, Disable, Button4
GuiControl, Disable, ListBox1
; Tastaturkürzel deaktivieren, womit auch vermieden wird,
; dass der Hook die Maus und Tastatur blockiert
Hotkey, ^SC056, Off
Hotkey, ~RButton, Off
Hotkey, ~Del, Off
; Sprechblase, dass die Indizierung beginnt
TrayTip, %Titel_qcd%, %lngIndiziere%,10
; Alle Laufwerksbuchstaben durchgehen
Loop, Parse, selectedDrives_qcd
{
ActDrive_qcd = %A_LoopField% ; Aktuelles Laufwerk
IndexTemp_qcd = %IndexPath_qcd%\%IndexFile_qcd%%ActDrive_qcd%_tmp.dat ; Temporärer Index
IndexDest_qcd = %IndexPath_qcd%\%IndexFile_qcd%%ActDrive_qcd%.dat ; Verzeichnisindex
PercentInt_qcd = 0 ; 0 %
; Tooltip für das Trayicon ändern
Menu,tray,Tip, %Titel_qcd%`n%lngUntersuche% %ActDrive_qcd%:
; Laufwerk durchgehen und anzahl der Verzeichnisse ermitteln
Loop, %ActDrive_qcd%:\*.* , 2, 1 ; Nur Verzeichnisse und Rekursiv
{
NumFolders_qcd = %A_Index%
gosub, Animate_qcd ; Trayicon animieren
If BreakIndexing_qcd = yes ; Abbruch?
break
}
; 100 / Anzahl der Verzeichnisse = Hochzählwert für den Prozentwert
PercentInc_qcd = 100.0 ; .0, weil sonst keine Nachkommastellen errechnet werden
PercentInc_qcd/=%NumFolders_qcd%
Percent_qcd = 0
PercentLast_qcd = 0
; Laufwerk durchgehen und Verzeichnisse in Verzeichnisindex schreiben
Loop, %ActDrive_qcd%:\*.* , 2, 1
{
FileAppend, %A_LoopFileFullPath%`n, %IndexTemp_qcd% ; in Verzeichnisindex schreiben
Percent_qcd += %PercentInc_qcd% ; Prozentwert erhöhen
Transform, PercentInt_qcd, Round, %Percent_qcd% ; gerundeter Prozentwert (für Anzeige)
if PercentInt_qcd <> %PercentLast_qcd% ; Wenn sich Prozentwert geändert hat ...
{
; ... Tooltip anpassen und Trayicon animieren
; durch den gerundeten Wert werden die folgende Befehle seltener ausgeführt
; womit die Geschwindigkeit erhöht wird (Tooltip anpassen bremst)
Menu, TRAY, Tip, %Titel_qcd%`n%lngUntersuche% %ActDrive_qcd%: %PercentInt_qcd%`% (%A_Index%/%NumFolders_qcd%)
IconDelay_qcd = 150 ; Animation erzwingen
gosub, Animate_qcd ; Trayicon animieren
PercentLast_qcd = %PercentInt_qcd% ; letzen Prozentwert merken
}
gosub, Animate_qcd ; Trayicon animieren
If BreakIndexing_qcd = yes ; Abbruch?
break
}
FileMove, %IndexTemp_qcd%, %IndexDest_qcd%,1 ; Verzeichnisindex durch temporären Index ersetzen
If BreakIndexing_qcd = yes ; Abbruch?
break
}
TrayTip ; Sprechblase entfernen
BreakIndexing_qcd = ; Indizierung beendet
; Tastaturkürzel wieder zulassen
Hotkey, ~RButton,On
Hotkey, ^SC056,On
Hotkey, ~Del,On
; Trayicon und Tooltip zurücksetzen
Menu, TRAY, Icon , %SystemRoot%\system32\SHELL32.dll,46
Menu, TRAY, Tip , %Titel_qcd%
; Traymenü zurücksetzen
Menu, TRAY, Enable , %lngWechseln%
Menu, TRAY, Enable , %lngReIndizierung%
Menu, TRAY, Delete , %lngReIndizierungBreak%
Menu, TRAY, Default, %lngWechseln%
; Schaltflächen wieder aktivieren
GuiControl, Enable, Button1
GuiControl, Enable, Button3
GuiControl, Enable, Button4
GuiControl, Enable, ListBox1
; Fenstertitel zurücksetzen (wegen Animation)
WinSetTitle ,,, %Titel_qcd%
selectedDrives_qcd = %Drives_qcd%
Return
; ---------------------------------------------------------------------
subIndexDrives_qcd: ; Laufwerke indizieren:Aufruf vom Untermenü
if A_ThisMenuItem = %lngAktualisierenAlle%
{
selectedDrives_qcd = %Drives_qcd%
}
else
{
StringLeft, selectedDrives_qcd, A_ThisMenuItem, 1
}
gosub, IndexDrives_qcd
Return
; ---------------------------------------------------------------------
Animate_qcd: ; Animiertes Trayicon und Fenstertitel
FirstIcon = 3 ; erste IconNr
LastIcon = 13 ; letzte IconNr
; Verzögerung, damit nich bei jedem Aufruf die Icondateien geladen werden
; ansonsten würde das Skript stark gebremst
IconDelay_qcd++ ; Verzögerungswert
if IconDelay_qcd < 150 ; kleiner 150 ...
return ; ... dann Unterroutine verlassen
IconDelay_qcd = 0
; IconNr hochzählen
TrayIcon_qcd++
If TrayIcon_qcd < %FirstIcon%
TrayIcon_qcd = %FirstIcon%
If TrayIcon_qcd > %LastIcon%
TrayIcon_qcd = %FirstIcon%
; Icon ändern
Menu,TRAY,Icon,%SystemRoot%\system32\taskmgr.exe,%TrayIcon_qcd%
; Titelleisten-Animation
NumAni_qcd++ ; Animationstufe hochzählen
If NumAni_qcd > 6
NumAni_qcd = 1
; linke animierte Klammer
AnimL_qcd1 = [
AnimL_qcd2 = (
AnimL_qcd3 = ‹
AnimL_qcd4 = -
AnimL_qcd5 = ‹
AnimL_qcd6 = (
; rechte animierte Klammer
AnimR_qcd1 = ]
AnimR_qcd2 = )
AnimR_qcd3 = ›
AnimR_qcd4 = -
AnimR_qcd5 = ›
AnimR_qcd6 = )
; Mit StringTrimLeft Arrays simulieren
StringTrimLeft, AnimL_qcd, AnimL_qcd%NumAni_qcd%, 0
StringTrimLeft, AnimR_qcd, AnimR_qcd%NumAni_qcd%, 0
; Titelleiste anpassen
WinSetTitle ,,, %Titel_qcd% %AnimL_qcd% %ActDrive_qcd%: %PercentInt_qcd% `% %AnimR_qcd%
Return
; ---------------------------------------------------------------------
; -- Unterroutine für den Verzeichniswechsel --------------------------
; ---------------------------------------------------------------------
q_ChangeDir: ; Unterroutine für den Verzeichniswechsel
WinWaitNotActive, %Titel_qcd% ; Warte bis QCD-Fenster verschwunden
WinActivate, qhk_class q_class ; Fenster anzeigen, wo QCD aufgerufen wurde
; Prüfen ob Fensterklasse unterstützt wird
if q_class contains #32770,ExploreWClass,CabinetWClass,Afx:400000:0,FileZilla Main Window,bosa_sdm
{
; Ermitteln ob ein Edit1-Control vorhanden ist (Eingabezeile)
q_EditClass = Edit1
ControlGetPos, q_Edit1Pos,,,, %q_EditClass% , ahk_id %q_window_id%
}
if q_Edit1Pos = ; Wenn kein Edit1-Control gefunden ...
{
; Ermitteln ob ein RichEdit-Control vorhanden ist (MS-Office)
q_EditClass = RichEdit20W2
ControlGetPos, q_Edit1Pos,,,, %q_EditClass% , ahk_id %q_window_id%
}
if ctrlState_qcd = ; Wenn keine vorgetäuschte Strg-Taste
GetKeyState, ctrlState_qcd, Ctrl ; Stauts der Strg-Taste ermitteln
if ctrlState_qcd <> D ; wenn Strg-Taste nicht gedrückt ...
{
; Verzeichnis in Dateidialogen wechseln
if q_class contains #32770,bosa_sdm
{
if q_Edit1Pos <>
{
WinActivate ahk_id %q_window_id%
ControlGetText, q_text, %q_EditClass%, ahk_id %q_window_id%
ControlSetText, %q_EditClass%, %q_path%, ahk_id %q_window_id%
ControlSend , %q_EditClass%, {Enter} , ahk_id %q_window_id%
Sleep, 100
ControlSetText, %q_EditClass%, %q_text%, ahk_id %q_window_id%
return
}
}
; Verzeichnis in Explorer-Fenstern wechseln
else if q_class in ExploreWClass,CabinetWClass
{
if q_Edit1Pos <>
{
ControlSetText, Edit1, %q_path% , ahk_id %q_window_id%
ControlSend , Edit1, {Right}{Enter}, ahk_id %q_window_id%
return
}
}
; Verzeichnis in AcdSee wechseln
else if q_class = Afx:400000:0
{
if q_Edit1Pos <>
{
ControlSetText, Edit1, %q_path%, ahk_id %q_window_id%
ControlSend , Edit1, {Enter} , ahk_id %q_window_id%
return
}
}
; Verzeichnis in FireFox wechseln
else if q_class = FileZilla Main Window
{
if q_Edit1Pos <>
{
ControlSetText, Edit1, %q_path%, ahk_id %q_window_id%
ControlSend , Edit1, {Enter} , ahk_id %q_window_id%
return
}
}
; Verzeichnis in der Eingabeaufforderung wechseln
else if q_class = ConsoleWindowClass
{
WinGetActiveTitle, wTitle
if wTitle contains cmd.exe
{
WinActivate, ahk_id %q_window_id%
SetKeyDelay, 0
IfInString, q_path, :
{
StringLeft, q_path_drive, q_path, 1
Send %q_path_drive%:{enter}
}
Send, cd %q_path%{Enter}
return
}
}
}
; Wenn alles nicht passt oder Strg gedrückt war, einfach nur den Explorer aufrufen
Run, Explorer %q_path%
return
Quit:
ExitApp
Return
|
best regards
Yordan |
|
| Back to top |
|
 |
nuk
Joined: 03 Feb 2005 Posts: 6 Location: Cologne, Germany
|
Posted: Mon Feb 07, 2005 12:10 pm Post subject: |
|
|
Yes, the problem was
PercentInc_qcd/=%NumFolders_qcd%.0
I added to the code above a call or recall of total commander instead of explorer (at the end):
### Orig ###
Run, Explorer %q_path%
### New ###
IfWinExist, Total Commander
{
WinActivate ; Automatically uses the window found above.
; With /O the exisiting commander will be used with the path specified
Run, C:\Program Files\totalcmd\totalcmd.exe /O "%q_path%" "%q_path%", ,Max
return
}
else
{
Run, C:\Program Files\totalcmd\totalcmd.exe "%q_path%" "%q_path%", ,Max
WinWait, Total Commander
WinActivate
} |
|
| Back to top |
|
 |
Tekl
Joined: 24 Sep 2004 Posts: 813 Location: Germany
|
Posted: Fri Apr 01, 2005 5:37 pm Post subject: |
|
|
Hi,
Strange bug with divison by 0, I don't have this on two systems with different versions of ahk. Well, changing the .0 is a good idea. Nice Enhancements Yordan.
Tekl (Wolfgang) |
|
| Back to top |
|
 |
|
|
You can post new topics in this forum You can reply to topics in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|