Deutsch
Forum

Woran hatte ich eigentlich gestern gearbeitet...

 

Michael
Wodrich
Da ich immer mehrere Projekte gleichzeitig am Wickel habe, kann schon mal das Suchen nach den letzten Arbeiten ein wenig Zeit in Anspruch nehmen. Dafür wollte ich schon immer mal etwas schreiben.

Last1000 listet die zuletzt angefaßten 1000 Dateien auf. Warum so viele? Weil Windows und im Hintergrund laufende Programme ja auch Dateien anfaßen, und die werden alle mit aufgelistet.

Wer daran herumwurschteln möchte - nur zu: es ist Freeware.

Der Abbruch läuft noch bis zum Ende des gerade bearbeiteten Verzeichnisses (so entsteht kein Speichermüll, weil FindClose hier greift).

Ein neuer Start löscht vorher die beiden Listboxen.

Ich habe den Dialog mit ROC aufgebaut und auch von dort die Icons genommen.
KompilierenMarkierenSeparieren
 $P+
********************** HINWEISE ********************************
CODE ERZEUGT MIT ROKOS OBJECT CREATOR 4.2b
DATUM  25.02.2006
VERWENDETE PROFANVERSION IST 9.1-NT XPROFAN
CODE ERSTELLT UNTER WINDOWS XP
********************** DATEN ***********************************
PROJEKTNAME    Last1000
BESCHREIBUNG   Neueste Dateien auflisten
VERSION        1.00
AUTOR          Michael Wodrich
ERSTELLDATUM   25.02.2006
********************** ANMERKUNGEN *****************************
Dieses Programm listet die Dateien
(der letzten 10 Tage) und zeigt diese
in einer sortierten Listbox an.
Es werden maximal 1000 Dateien gezeigt.
Durch die Sortierung fallen alte Dateien
dabei heraus.
Wenn alles glatt läuft, dann läßt sich
dieses Programm jederzeit abbrechen.
*) "der letzten 10 Tage" habe ich mal herausgenommen
********************** QUELLCODE *******************************
Set("ErrorLevel",0)
Set("TrueColor",1)
Set("AutoPaint",2)
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
 $I C:PROFANLIBBILDBUTTON.INC (Für Bildbuttons/Iconbuttons)
Vertauschen der Ziffern (0 -> 9, 1 -> 8, 2 -> 7, ...)
führt zu absteigender Sortierung (alles außer Ziffern fällt hier weg)

Proc SortDesc

    Parameters dat$
    Declare B#,i%,j%,k%,erg$
    Dim B#,Len(dat$)+1
    String B#,0 = dat$
    j% = Len(dat$)

    While i% < j%

        k% = Byte(B#,i%)
        Byte B#,i% = If( (k% >= 47) and (k% <= 57),105 - k%, 46)
        Inc i%

    EndWhile

    erg$ = String$(B#,0)
    Dispose B#
    Return Translate$(erg$,".","")

EndProc

Zeile für die sortierte Listbox aufbereiten

Proc SortZeile

    Parameters Datei$
    Declare Zeile$

    If FileExists(Datei$)

        Zeile$ = SortDesc(GetFDate$(Datei$) + GetFTime$(Datei$)) +
        " " +
        GetFDate$(Datei$) +
        " " +
        Datei$

    EndIf

    Return Zeile$

EndProc

PROC DIALOG  ---------------------------------------------------------------------------

    Verzeichnisse werden hier zwischengelagert

    Proc Add_L

        Parameters x$
        Declare y$,i%
        i% = SendMessage(LB&,$01A2,-1,Addr(x$))

        If i% < 0

            AddString(LB&,x$)

        EndIf

    EndProc

    ...und nach dem Abruf auch wieder entfernt

    Proc Get_L

        Declare s$

        If GetCount(LB&,0) > 0

            s$ = GetString$(LB&,0)
            DeleteString(LB&,0)

        EndIf

        Return s$

    EndProc

    Hier wird die sortierte Listbox mit den Dateinamen gefüllt

    Proc Add_R

        Parameters x$
        Declare y$,i%
        y$ = SortZeile(x$)
        i% = SendMessage(SLB&,$01A2,-1,Addr(y$))

        If i% < 0

            AddString(SLB&,y$)
            SetText TEXT2&,"gefundene Dateien: "+Format$("#,##0",GetCount(SLB&))+Space$(10)

            If GetCount(SLB&) > 1000

                DeleteString(SLB&,1000)
                SetText TEXT2&,"gefundene Dateien: "+Format$("#,##0",GetCount(SLB&))+Space$(10)

            EndIf

        EndIf

    EndProc

    ein Plattenverzeichnis durcharbeiten

    Proc WholeSub

        Declare Datei$,V$
        ChDir Pfad$
        Case @Right$(Pfad$,1) = "" : Pfad$ = Del$(Pfad$,@Len(Pfad$),1)
        Let Datei$ = @Upper$(@FindFirst$("*.*"))

        WhileNot %IOResult

            If gestartet%

                If Datei$ <> ""

                    If @Left$(Datei$,1) = "["  ->ein Verzeichnis

                        Datei$ = @Mid$(Datei$,2,@Len(Datei$)-2)

                        IfNot (Datei$=".") Or (Datei$="..")

                            V$ = Pfad$ + "" + Datei$
                            Add_L( V$ )             ...merken

                        EndIf

                        Else                       ->eine Datei
                        V$ = Pfad$ + "" + Datei$
                        Add_R( V$ )             ...auflisten

                    EndIf

                EndIf

                ------

                If %PeekMessage  ...wenn eine Message anliegt

                    If %MWnd = DLG&  Ist die Message für mich???

                        -------
                        SetTimer 500
                        WAITINPUT  ja, holen
                        während der Dateisuche interessiert nur der Abbruch-Wunsch

                        If GETFOCUS(ICONBUTTON1&) ICONBUTTON (Abbruch)

                            SETFOCUS(DLG&)
                            Clear gestartet%  Arbeit einstellen
                            SendMessage(LB&,$0184,0,0)  Verzeichnis-Liste löschen

                        EndIf

                        KillTimer
                        -------

                    EndIf

                EndIf

                ------

            EndIf

            Let Datei$ = @Upper$(@FindNext$())

        EndWhile

    EndProc

    Vorarbeiten für ein ganzes Laufwerk

    Proc WholeDisk

        Parameters Lw$

        If gestartet%

            Declare Such$
            Pfad$ = @Upper$(Lw$)

            If Len(Pfad$) = 1

                Pfad$ = Pfad$ + ":"

            ElseIf Right$(Pfad$,1) = ":"

                Pfad$ = Pfad$ + ""

            ElseIf Right$(Pfad$,1) = ""

                Pfad$ = Left$(Pfad$,Len(Pfad$) - 1)

            EndIf

            If DirExists(Pfad$)  nicht vergessen (bei Wechselmedien wichtig)

                ChDir Pfad$
                Pfad$ = @GetDir$("@")
                Add_L( Pfad$ )
                Pfad$ = Get_L()

                While Pfad$ <> ""

                    WholeSub
                    Pfad$ = Get_L()

                EndWhile

            EndIf

        EndIf

    EndProc

    DECLARE DLG&, DIALOGENDE%
    DECLARE LB&, SLB&
    DECLARE TEXT1&, TEXT2&
    DECLARE ICONBUTTON1&, ICONBUTTON2&, ICONBUTTON3&
    Declare gestartet%
    WINDOWSTYLE 31
    DLG& = CREATE("DIALOG",%HWND,"Neueste Dateien zeigen",((%MAXX / 2) - (640 / 2)),((%MAXY / 2) - (480 / 2)), 640,480)
    USEFONT "MS Sans Serif",13,0,0,0,0
    SETDIALOGFONT 1
    LB& = CREATE("LISTBOX",DLG&,"LISTBOX",10,50,180,400)
    Create("Tooltip",DLG&,LB&,"Hier werden die noch zu bearbeitenden Verzeichnisse aufgelistet.")
    TEXT1& = CREATE("TEXT",DLG&,"zu bearbeitende Verzeichnisse:",10,20,150,20)
    TEXT2& = CREATE("TEXT",DLG&,"gefundene Dateien:",200,20,180,20)
    SLB& = CREATE("SORTEDLISTBOX",DLG&,"SORTEDLISTBOX",200,50,420,400)
    Create("Tooltip",DLG&,SLB&,"Hier stehen die gefundenen Dateien - jüngste oben.")
    ICONBUTTON "30","C:\PROFAN\ROCICON.DLL",DLG&,520,6,40,40
    LET ICONBUTTON1& = @&(0)
    Create("Tooltip",DLG&,ICONBUTTON1&,"Die Suche wird abgebrochen.")
    ICONBUTTON "18","C:\PROFAN\ROCICON.DLL",DLG&,570,6,40,40
    LET ICONBUTTON2& = @&(0)
    Create("Tooltip",DLG&,ICONBUTTON2&,"Dies ist der Ausgang - Auf Wiedersehen!")
    ICONBUTTON "52","C:\PROFAN\ROCICON.DLL",DLG&,470,6,40,40
    LET ICONBUTTON3& = @&(0)
    Create("Tooltip",DLG&,ICONBUTTON3&,"Eine neue Suche wird gestartet.")
    SETFOCUS(DLG&)
    Clear DIALOGENDE%

    WHILENOT DIALOGENDE%

        WAITINPUT

        If %KEY = 2

            Clear gestartet%
            LET DIALOGENDE% = 1

        ELSEIF GETFOCUS(LB&) LISTBOX

            SETFOCUS(DLG&)

        ELSEIF GETFOCUS(SLB&) SORTEDLISTBOX

            SETFOCUS(DLG&)

        ELSEIF GETFOCUS(ICONBUTTON3&) ICONBUTTON (Start)

            SETFOCUS(DLG&)
            gestartet% = 1
            SendMessage(LB&,$0184,0,0)
            SendMessage(SLB&,$0184,0,0)

        ELSEIF GETFOCUS(ICONBUTTON1&) ICONBUTTON (Abbruch)

            SETFOCUS(DLG&)
            Clear gestartet%

        ELSEIF GETFOCUS(ICONBUTTON2&) ICONBUTTON (Ende)

            SETFOCUS(DLG&)
            Clear gestartet%
            LET DIALOGENDE% = 1

        ENDIF

        If gestartet%

            WholeDisk("C")
            WholeDisk("D")
            WholeDisk("E")
            WholeDisk("F")
            WholeDisk("G")

        EndIf

    ENDWHILE

    DESTROYWINDOW(DLG&)
    ENDPROC --------------------------------------------------------------------------------

    Proc Main

        Declare Pfad$
        WindowTitle "Last1000"
        WindowStyle 16+64+1024
        Window 0,0 - 0,0
        Dialog

    EndProc

    Main
    ProgEnd

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
25.02.2006  
 




Michael
Wodrich
Upps, gleich was kaputt editiert. Jetzt ist der Abbruch nicht mehr ganz sauber.
Da habt Ihr dann ja was zum Basteln.

Schöne Grüße
Michael Wodrich

P.S.: Das lag am 2. WaitInput. Das habe ich jezt mit SetTimer überlistet.

Hoffentlich sind eure Platten nicht zu groß........
 
Programmieren, das spannendste Detektivspiel der Welt.
25.02.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

417 Betrachtungen

Unbenanntvor 0 min.

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Michael Wodrich (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie