Zugriff auf Windows: Papierkorb leeren



  • Dank @ flenders aber dort war ich heute als aller erstest und weil ich da nicht weiter gekommen bin habe ich einwenig gegoogelt ...

    💡



  • Benutzt Du Windows 2000?

    MSDN schrieb:

    With Microsoft® Windows® 2000, if NULL is passed in the pszRootPath parameter, the function fails and returns an E_INVALIDARG error code.

    Andererseits:
    Die Funktion liefert S_OK turück, wenn sie erfolgreich war.
    In der Winerror.h findet man folgende Zeile:

    #define S_OK ((HRESULT)0x00000000L)
    

    Also ist doch alles okay wenn die Funktion 0 zurückliefert!
    Das Ergebnis steht in der SHQUERYRBINFO-Struktur!

    Das mußt Du auslesen, was Dein return (info.i64NumItems > 0) ja auch tut...
    Also sollte das bei vollem Papierkorb != 0 sein...



  • Nicht ganz benutze Windoof XP SP1 ...
    (ist ja FAST 🙄 das Selbe wie Win 2K)

    💡 💡



  • Dann überprüf mal den Rückgabewert von SHQueryRecycleBin direkt, ob es S_OK oder E_INVALIDARG ist...



  • Bin nicht so der C++ Profi kannst du mir eventuell zeigen wie ich den return wert oder die Funkion auswerte/aufrufe ?

    BEDANKT ! 😉



  • z. B. so:

    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
    }
    


  • 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 ! 😞


Anmelden zum Antworten