Zugriff auf Windows: Papierkorb leeren



  • ahh das sieht gut aus ... 🙂

    Habe schon einwenig im Netz gesucht aber nix gefunden ...
    Wie kann ich diese (oder auch andere) selbst geschriebene Funkionen in meinem Quelltext aufrufen ? 😕
    Wie gesagt habe das mit den Funkionen nur mal in JavaScript gemacht. Aber wie geht´s in C++ ???

    so geht´s irgentwie nicht:

    //---------------------------------------------------------------------------
    void __fastcall TForm1::Label3Click(TObject *Sender)
    {
    CanEmptyRecycleBin();
    }
    //---------------------------------------------------------------------------
    

    Aber ich denke ich bin nah drann 😃



  • so rufst die funktion auf, aber es bring nix weil du den rückgabewert in abfängst.

    if(CanEmptyRecycleBin())
    {
        MessageBox(NULL, "Papierkorb kann geleert werden", "info", MB_OK);
        // ..
    }
    else
        MessageBox(NULL, "Papierkorb schon leer", "info", MB_OK);
    

    sei mir nicht böse, aber du solltest dir erstmal ein grundladentutorial durchlesen. http://www.c-plusplus.net/tutorials.htm



  • Nö bin dir net böse.

    Ich bin klein und muss noch vieeel lernen 🙂

    Deswegen bin ich auch oft hier im Forum und lese die Beiträge.

    ... Okay ich arbeite das Tut durch ...

    //---------------------------------------------------\\

    Aber es geht leder immer noch nicht 😞

    Warum ?

    Ich beiss gleich in meine Tastatur !

    GRRR 😡



  • Was für eine MessageBox bekommst du denn jetzt ausgegeben - oder bekommst du irgendwelche Fehler?!



  • also ich führe folgenden Code aus:

    //---------------------------------------------------------------------------
    bool CanEmptyRecycleBin()
    {
      HRESULT Success = 0;
      SHQUERYRBINFO info; // SHQUERYRBINFO die Variable info zuweisen
      ZeroMemory(&info, sizeof(info)); // ? Speicher auf null setzen ?
      info.cbSize = sizeof(info); // info und DWORD cbSize verknüpfen
      Success = SHQueryRecycleBin(0, &info); // SHQueryRecycleBin aufrufen
      if (Success != S_OK)
      {
         MessageBox(NULL, "Fehler bei SHQueryRecycleBin", "Fehler!", MB_OK|MB_ICONERROR);
         return FALSE;
      }
      return (info.i64NumItems > 0); // zurück wenn info.i64NumItems grösser als 0
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Label3Click(TObject *Sender)
    {
    if(CanEmptyRecycleBin()) //sollte hier nicht eigentlich ein vergleich hin ? und wenn ja was für einer ?
    {
        MessageBox(NULL, "Papierkorb kann geleert werden", "info", MB_OK);
        // ..
    }
    else
        MessageBox(NULL, "Papierkorb schon leer", "info", MB_OK);
    }
    //---------------------------------------------------------------------------
    

    und als fehlermeldung gibt mein Compiler Folgendes aus:

    "W8004 'Success' is assigned a value that is never used"

    (naja ist halt nur wegen der Vereinbarung ...)

    und es kommt natürlich auch nur eine MessageBox (Papierkorb schon leer).

    Irgent welche Ideen ?



  • TheGeek schrieb:

    "W8004 'Success' is assigned a value that is never used"

    Das hört sich nur nach einer Warnung an - kein Fehler! Aber du könntest es mal so versuchen:

    HRESULT Success = SHQueryRecycleBin(...);
    

    TheGeek schrieb:

    und es kommt natürlich auch nur eine MessageBox (Papierkorb schon leer).

    Dass nur eine MessageBox kommt ist ja eigentlich gut 😉
    Ist der Papierkorb denn eigentlich nicht leer, oder wo liegt dein Problem 😕



  • uii das gefällt ihm gar nicht 😮

    wenn ich statt:

    HRESULT Success = 0;
    
    HRESULT Success = SHQueryRecycleBin(...);
    

    nehme dann kommt "Expression syntax" (falsche Syntax !?) als Fehler.

    Naja eigentlich will ich ja nur wissen ob der Paperkorb voll oder leer ist ...
    Ist das echt so schwer ?

    Wenn ja ist das ja eine tolle ironie:

    Daten löschen = voll einfach
    ABER
    Gugen ob Daten im Papierkorb sind = schwer 😃



  • TheGeek schrieb:

    HRESULT Success = SHQueryRecycleBin(...);
    

    die punkte bedeuten das du den syntax schon gebehalten sollst oder den entsprechenden einfügst.

    HRESULT Success = SHQueryRecycleBin(0, &info);
    

    TheGeek schrieb:

    Naja eigentlich will ich ja nur wissen ob der Paperkorb voll oder leer ist ...
    Ist das echt so schwer ?

    aller anfang ist schwer

    TheGeek schrieb:

    if(CanEmptyRecycleBin()) //sollte hier nicht eigentlich ein vergleich hin ? und wenn ja was für einer ?
    

    ist ein vergleich, und zwar ob die funktion (oder variable) true ist.
    du könntest auch schreiben

    if(CanEmptyRecycleBin() == true)
    


  • NEBENBEI:
    Kann man eigentlich bei jeder boolischen if verzweigung das "== true" weglassen ? Oder geht das nur bei eigenen Funkionen ?

    //-------------------------------------------------------------------

    mhh hatt sich leider nix verändert Success fehler kommt weiterhin ...



  • TheGeek schrieb:

    NEBENBEI:
    Kann man eigentlich bei jeder boolischen if verzweigung das "== true" weglassen ?

    hab ich doch geschrieben. ja kann man.

    [edit]
    mach mal

    HRESULT Success
    

    wenn immernoch die warnung kommt dann lebe mit der warnung 😉



  • TheGeek schrieb:

    mhh hatt sich leider nix verändert Success fehler kommt weiterhin ...

    Wir hatten doch schon auf Seite 1 festgestellt, das ab Windows 2000 nicht NULL als erster Parameter angegeben werden darf... 🙄



  • mhhh !?! Das muss doch irgentwie gehen ???

    Aber find es super cool das man hier im forum solch tolle hilfen bekommt ! 😃

    Warum gibbet eigenlich ne Microsoft Site die einem weiter helfen kann ???

    Das was ich bis jetzt so gesehen habe, habe ich noch nicht so ganz verstanden 😕 ... habt ihr schon mal geschaut ?

    ...



  • Na gib halt nen Pfad als ersten Parameter an, genau wie auf "der Microsoft Hilfeseite" (das ist die MSDN) beschrieben ist...

    Success = SHQueryRecycleBin("C:\\", &info);
    


  • nope ! Geht auch net ! 😞



  • Könntest du evtl. mal etwas ausführlicher sagen, was du jetzt hast, wie dabei dein Ergebnis (fälschlicherweise?) aussieht und was du dir als Ergebnis wünscht?!
    Denn aus deinen bisherigen Aussagen wurde ich nicht so recht schlau, was eigentlich überhaupt nicht funktioniert 🤡



  • Sorry Leuts konnte net Posten weil ich so viel um die Ohren hatte 🙂

    Also ich führe folgenden Code aus:

    //--------------------------------------------------------------------------- 
    bool CanEmptyRecycleBin() 
    { 
      HRESULT Success = SHQueryRecycleBin(0, &info);
      SHQUERYRBINFO info; // SHQUERYRBINFO die Variable info zuweisen 
      ZeroMemory(&info, sizeof(info)); // ? Speicher auf null setzen ? 
      info.cbSize = sizeof(info); // info und DWORD cbSize verknüpfen 
      Success = SHQueryRecycleBin("C:\\", &info); // SHQueryRecycleBin aufrufen 
      if (Success != S_OK) 
      { 
         MessageBox(NULL, "Fehler bei SHQueryRecycleBin", "Fehler!", MB_OK|MB_ICONERROR); 
         return FALSE; 
      } 
      return (info.i64NumItems > 0); // zurück wenn info.i64NumItems grösser als 0 
    } 
    
    //--------------------------------------------------------------------------- 
    void __fastcall TForm1::Label3Click(TObject *Sender) 
    { 
    if(CanEmptyRecycleBin()) 
    { 
        MessageBox(NULL, "Papierkorb kann geleert werden", "info", MB_OK); 
        // .. 
    } 
    else 
        MessageBox(NULL, "Papierkorb schon leer", "info", MB_OK); 
    } 
    //---------------------------------------------------------------------------
    

    und als Ergebnis wünsch ich mir das ich rausbekomme ob der Papierkorb voll oder leer ist ...



  • Abgesehen von einem kleinen Fehler funktioniert dein Code bei mir (W2K) 🙂

    Du musst info erst deklarieren und dann verwenden, nicht andersrum 😉
    Also diese Zeile muss eins weiter nach oben:

    SHQUERYRBINFO info; // SHQUERYRBINFO die Variable info zuweisen
    

    Wobei dein Kommentar nicht so sehr Sinn macht bzw. flasch ist - SHQUERYRBINFO ist der Typ der Variable info, die du deklarierst.



  • Naja der Code funzt aber leder gibt er net das richtige zurück bei mir kommt immer nur die MessageBox "Papierkorb schon leer" egal ob er voll oder leer ist ... bei dir auch Flenders ?



  • Nein, wenn ich bei mir von Laufwerk C etwas lösche kommt, dass der Papierkorb gelöscht werden kann 🙂


Anmelden zum Antworten