Kleiner File-Deleter



  • Original erstellt von dEUs:
    Kann ich mir nicht vorstellen. Ausser du bist 3te Klasse und kannst kein English und kannst auhc net ein klein wenig logisch denken ...

    Yoaa nicht so freundlich. *küsschengeb*
    Hier haste mal was. Die ersten 32Bit einer File auslesen
    nur für den Fall dass du denkst ich sei einer von denen die alles gelöst bekommen haben wollen anstatt eigene arbeit reinzustecken.



  • 😕



  • Original erstellt von dEUs:
    😕

    Yo, hab ich mir gedacht. 😉

    Also ich hab mir mal diese ShellExecute angesehn.
    Irgendwie peil ich das nicht so richtig.
    Ich will jetzt erstmal eine Mp3 öffnen wenn ich auf einen button klicke.
    also hab ich mir folgenden Code zusammengebastelt. (läuft nicht)

    void CDeleterDlg::OnOpen() 
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    //); 
    
        HINSTANCE ShellExecute( HWND Sibey, 
     // handle to parent window 
    
    LPCTSTR lpOperation = NULL, 
     // pointer to string that specifies operation to perform 
    
    LPCTSTR  lpFile = "C:\\LOL.mp3", 
     // pointer to filename or folder name string 
    
    LPCTSTR lpParameters = NULL, 
     // pointer to string that specifies executable-file parameters 
    
    LPCTSTR lpDirectory = "C:\\", 
     // pointer to string that specifies default directory 
    
    INT nShowCmd = SW_SHOW
     // whether file is shown when opened 
    
    );  // Programmieren\Deleter\DeleterDlg.cpp(198) : error C2373: 'ShellExecuteA' : Neudefinition; unterschiedliche Modifizierer
    

    was ist daran falsch?
    wie mach ich das denn dass er diese File öffnet?
    und als nächsten Schritt dann: wie kann ich dem sagen dass der die datei öffnet, die ich in der leiste eingegeben habe?



  • ShellExecute(hWnd, "open", "C:\\LOL.mp3", NULL, NULL, SH_SHOWNORMAL);
    

    Sag mal, so richtig programmieren kannst Du nicht, oder?

    Du kennst den "<<"-Operator nicht, willst Dateien mit system() öffnen, weißt nicht, wie man Dateien löscht und weißt auch nicht, wie man ein EditControl abfragt???

    Au mann.....

    [ Dieser Beitrag wurde am 20.05.2003 um 18:42 Uhr von Hepi editiert. ]



  • Hallo.

    Also Dateien löscht man (bzw. ich) in MFC per:

    CFile* file = new CFile;
    file->Remove("C:\\Datei.txt");
    delete file;
    

    Öffnen tut (tut ist ein unschönes Wort... 🙄 ) man Dateien so:

    ShellExecute(0,0,"C:\\MeineDatei.exe",0,0,SW_SHOW)
    

    Editfelder fragt man so ab:

    void CmyDLg::OnDelete()
    {
       UpdateData(true); //@all: optional?
       CString sFiles = _T("");
       GetDlgItem(IDC_EDITFELD)->GetWindowText(sFiles);
    }
    

    MfG
    Happosai



  • @Happosai:

    Hint: CFile::Remove ist statisch 😉



  • Erstmal Danke für eure Hilfe.
    Werd direkt mal dran weitermachen.

    @Hepi:
    Fang doch nicht gleich an so auszuteilen.
    Du hast immerhin auch irgendwann angefangen.
    Da haste bestimmt auch nicht gleich alles gewusst.
    Man alter wir haben auffer Berufschule ein ganzes Jahr lang
    C und nicht C++ gemacht und erst jetzt in der Mittelstufe
    mit MFC angefangen. Ausserdem ist das hier ein Forum,
    da kann ich posten wenn ich Fragen habe ohne mir
    von jemandem wie dir anhören zu müssen dass ich nicht coden kann.

    Aber hier extra für dich,
    damitst heute auch beruhigt zu Bett gehen kannst:
    Ich kann nicht programmieren,
    Weiss nicht was der Linksshift macht,
    Öffne Files auf falschem Wege,
    Wie man EditControls abfragt weis ich nicht,
    Wasn das überhaupt?! Weiss ich auch nicht.



  • Ja, ich habe auch mal angefangen...

    Aber, und das ist der feine Unterschied, zu einer Zeit als es noch kein Internet gab (zumindest nicht in Deutschland)!

    Damals mußte man noch L-E-S-E-N können!

    Heutzutage brauchst Du doch nur die MSDN, um unter Windows programmieren zu können (nun gut, lesen sollte man noch immer können), und sie ist GRATIS!!!

    Man muß heutzutage nicht mehr zentnerschwere Bücher wälzen!
    Und dann nutzt Du diese Hilfen nicht mal zu 5%!

    DAS, und nur das, werfe ich Dir vor:
    Du willst unter Windows programmieren, aber anstatt in der MSDN (der "Bibel" für ausnahmslos JEDEN Windows-programmierer) zu suchen meinst Du hier finden sich manche Leute, die Dir schon Deinen Code zusammenbasteln... und das, obwohl es bei Dir an den Grundlagen mangelt (der Linksshift ist übrigens ein simpler C-Operator, den wirst Du garantiert in der Schule gehabt haben. Ansonsten frage ich mich, was Du da in der Schule gelehrt bekommen hast: C war das (ohne "<<") garantiert NICHT!)

    Ich sag Dir eins: Programmieren nennt man das nicht unbedingt, was Du hier betreibst!

    Mir persönlich ist das egal, aber bevor ich solche Fragen stellen würde würde ich erstmal auf eigene Faust Sachen ausprobieren (nachlesen, austesten usw.), anstatt sofort beim ersten Problemchen (Beispiel ShellExecute) wieder hier aufzutauchen....

    [ Dieser Beitrag wurde am 20.05.2003 um 21:37 Uhr von Hepi editiert. ]



  • Nun Leute beruhigt euch mal.
    Dies ist ein Forum und es gab schon schlimere Fragen.

    @Peter Piksa:
    www.mut.de -> leseecke -> Vc++ 6 in 21 Tagen hilft dir fürs erste.
    wenn du das durch hast dann verstehst du die Grundfunktionen.

    Und die Lösungen zu deinen aktuellen Problemen sind bereits in diesem Thread gepostet worden.



  • Original erstellt von Hepi:
    **Ja, ich habe auch mal angefangen...

    Aber, und das ist der feine Unterschied, zu einer Zeit als es noch kein Internet gab (zumindest nicht in Deutschland)!

    Damals mußte man noch L-E-S-E-N können!

    Heutzutage brauchst Du doch nur die MSDN, um unter Windows programmieren zu können (nun gut, lesen sollte man noch immer können), und sie ist GRATIS!!!

    Man muß heutzutage nicht mehr zentnerschwere Bücher wälzen!
    Und dann nutzt Du diese Hilfen nicht mal zu 5%!

    DAS, und nur das, werfe ich Dir vor:
    Du willst unter Windows programmieren, aber anstatt in der MSDN (der "Bibel" für ausnahmslos JEDEN Windows-programmierer) zu suchen meinst Du hier finden sich manche Leute, die Dir schon Deinen Code zusammenbasteln... und das, obwohl es bei Dir an den Grundlagen mangelt (der Linksshift ist übrigens ein simpler C-Operator, den wirst Du garantiert in der Schule gehabt haben. Ansonsten frage ich mich, was Du da in der Schule gelehrt bekommen hast: C war das (ohne "<<") garantiert NICHT!)

    Ich sag Dir eins: Programmieren nennt man das nicht unbedingt, was Du hier betreibst!

    Mir persönlich ist das egal, aber bevor ich solche Fragen stellen würde würde ich erstmal auf eigene Faust Sachen ausprobieren (nachlesen, austesten usw.), anstatt sofort beim ersten Problemchen (Beispiel ShellExecute) wieder hier aufzutauchen....

    [ Dieser Beitrag wurde am 20.05.2003 um 21:37 Uhr von [qb]Hepi** editiert. ][/QB]

    Tja wir hatten den Links/Rechtsshift-Operator nunmal nicht.
    Kannst du bezweifeln oder auch nicht, es ist nunmal so. 😞
    Ich fänds auch schöner wenn wir ein paar andere (elementärere) Dinge durchgearbeitet hätten als wir haben, aber das liegt ja nicht in meiner Entscheidung.

    Ich kann dich ja nachvollziehen wenn du es nicht raffst
    dass leute wie ich mit ihren Problemchen ins Forum kommen
    aber deswegen direkt so ein ton, das muss doch nicht sein. 😉
    Dann müsstest du ja auch jedem anderen User das selbe sagen wie mir
    und das sind noch ne Pallette Leute. wie bereits von Unix-Tom erwähnt
    gabs auch schon schlimmere fragen. (ich denke da zurück an "bilder einscannen mit scanf" 😃 *ggg*

    weisste wenn ich mal ehrlich bin:
    ich frage lieber halt mal nach bevor ich zich seiten umsonst lese,
    um dann irgendwann auf das richtige zu stossen. ich mein dafür wird
    ja dieses forum auch betrieben. das man sich gegenseitig hilft. 🙂

    aber zurück zum thema:
    wie kann ich das machen dass wenn das programm startet ich direkt in
    das fenster einen pfad eintippen kann, ohne erst draufzuklicken?
    also das der (ich glaube es nennt sich) "fokus" gleich auf meinen IDC_Directory liegt??

    und noch was:
    ich habe das tool einem freund geschickt und als er es startete,
    kam die fehlermeldung "mfc42.dll" sei nich da. obwohl er sie in seinem
    C:\windows\system32 drinne hat. wir haben sogar die selbe dateiversion!



  • Zum Fokus: Dem Editfeld die Tabulatorreihenfolge 1 geben (Strg+D)
    Zur DLL: kompilier dein programm als release und versuchs mal mit der DLL im selben verzeichnis.



  • Hallo.

    Also löschen wir Dateien über deisen Code, gelle? (Das soll man so aus'm Kopf wissen, dass Remove() static ist ... 🙄 ):

    CFile::Remove("C:\\MeineDatei.txt");
    

    Zum Fokus:
    1. Im Dialogeditor per Tabulatorreihenfolge (wie dEUs beschrieben hat)
    2. per GetDlgItem(IDC_EDITFELD)->SetFocus(); in der OnInitDialog()-Methode.

    MfG
    Happosai



  • Cool, also das Tool läuft jetzt soweit wunderbar. 🙂
    Nu ist mir noch eine Idee gekommen.
    Ich könnte ja noch eine Checkbox einbauen,
    die dafür sorgt dass das Fenster im Vordergrund bleibt,
    solange wie der Haken gesetzt ist.

    In den Eigenschaften des Fensters ist ein eine Option "Systemmodal".
    Wenn ich die aktiviert habe, bleibt das Fenster immer in Vordergrund.
    Wie kann ich das denn machen dass das Ding nur oben bleibt wenn der Haken gesetzt ist?



  • SetWindowPos und als ersten Parameter hwndTopMost oder so ähnlich. als die restlichen parameter alle 0 setzen ausser den letzten, den setzt du auf SWP_NORESIZE | SWP_NOMOVE

    Ich würde dir empfehlen SetWindowPos alle paar minuten aufzurufen, wenn der hacken gesetzt ist, da auch andere programme diesen code aufrufen können, es aber nur ein "TopMost"-Window geben kann ...



  • Irgendwie krieg ich das nicht hin mit mit dem Stay-On-Top.
    Aber egal, das kann ich immernoch machen.
    Jetzt wollte ich mal den Rückgabewert von ShellExecute nutzen um eine Fehlermeldung zu erzeugen.

    Da steht inner Hilfe dass wenn die File nicht da ist ein "ERROR_FILE_NOT_FOUND" zurückgegeben wird.

    nun habe ich mir sowas gebaut:

    if (ERROR_FILE_NOT_FOUND == ShellExecute(NULL, "open", Directory, NULL, NULL, SW_SHOWNORMAL))
    

    aber ist ja logisch dass das so nicht laufen kann.
    dieses HInstance ist eine struct sagt mein Compiler.
    Aber wie soll ich denn nun die Abfrage machen??? 😕
    Wenn dieses "ERROR_FILE_NOT_FOUND" zurückkommt will ich dass in das eingabefeld "File Not Found" reingeschrieben wird. das mache ich einfach mit

    GetDlgItem(IDC_Directory)->SetWindowText("File Not Found");
    

    fehlt also nur das auswerten des Rückgabewertes von ShellExecute, nur wie?



  • Frisch aus der MSDN:

    The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.

    0 The operating system is out of memory or resources.
    ERROR_FILE_NOT_FOUND The specified file was not found.
    ERROR_PATH_NOT_FOUND The specified path was not found.
    ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32® .exe or error in .exe image).
    SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
    SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
    SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
    SE_ERR_DDEFAIL The DDE transaction failed.
    SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
    SE_ERR_DLLNOTFOUND The specified dynamic-link library (DLL) was not found.
    SE_ERR_FNF The specified file was not found.
    SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
    SE_ERR_OOM There was not enough memory to complete the operation.
    SE_ERR_PNF The specified path was not found.
    SE_ERR_SHARE A sharing violation occurred.

    Da steht, Du sollst den Rückgabewert auf INT casten...

    Also:

    if (ERROR_FILE_NOT_FOUND == (int)ShellExecute(NULL, "open", Directory, NULL, NULL, SW_SHOWNORMAL))
    

    Ich würd's aber ein wenig anders machen:

    int iErgebnis = 0;
    iErgebnis = (int)ShellExecute(NULL, "open", Directory, NULL, NULL, SW_SHOWNORMAL));
    if(iErgebnis<=32)
    {
        switch(iErgebnis)
        {
        case ERROR_FILE_NOT_FOUND:
            // Datei nicht gefunden, was nun?
            break;
        case ERROR_PATH_NOT_FOUND:
            // Der Pfad wurde nich gefunden, was nun?
            break;
        default:
            // Hier das hinmachen, was im Normalfall getan wird
        }
    } else //ShellExecute() hat funktioniert!
    

    [ Dieser Beitrag wurde am 21.05.2003 um 17:23 Uhr von Hepi editiert. ]



  • cool danke! 🙂 🙂



  • So weiter gehts *g*

    Nun wollte ich noch ganz gerne einen Button haben der mir den Inhalt aus der Zwischenablage direkt in mein IDC_Directory Feld reinkopiert wenn ich draufdrücke. Das habe ich soweit hinbekommen allerdings sieht es doof aus wenn da "Clipboard" oder sowas in der Art draufsteht.

    Ich hätte da viel lieber einen von diesen schicken GrafikButtons drauf.
    Weis aber nicht wie ich den da hinbekomme *grr*
    Damit man weis was ich meine hab ich mal ein Bildchen hochgeladen. http://mitglied.lycos.de/oxse/deleter2.jpg

    Da gibt es doch eine Symboldatei im Windows "%SystemRoot%\system32\SHELL32.dll" die ganz viele Grafiken beinhaltet, das hab ich gefunden.
    Gibt es eine Möglichkeit Grafiken da rauszuholen und sie ins Programm einzubauen???



  • Für grafische Buttons guck mal bei CodeGuru.



  • Original erstellt von dEUs:
    Für grafische Buttons guck mal bei CodeGuru.

    Hab da gestern abend mal ne halbe stunde gesucht,
    aber nicht wirklich das gefunden...
    vielleicht habe ich es auch nur verpeilt weil habe nicht alles gelesene verstanden.

    So ein Copy Button ist doch bestimmt als ein Standartelement definiert, oder nich?? 😞


Anmelden zum Antworten