Zugriff auf Windows: Papierkorb leeren
-
Dieser Thread wurde von Moderator/in junix aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
-
Auch wenn ich das nicht so gerne mache weil man dann ja nicht versteht was im code steht ... aber JA ich habe sie einfach mal so kopiert.
Vielecht scheitert es auch daran dass ich net so genau weiss wie man eine Funkion in C++ aufruft.
(hab das nur mal in JavaScript gemacht)Also kann mir einer meiner Unwissenheit ein ende setzen und mir etwas auf die Sprünge helfen.

bool CanEmptyRecycleBin() { 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 SHQueryRecycleBin(0, &info); // SHQueryRecycleBin aufrufen return (info.i64NumItems > 0); // zurück wenn info.i64NumItems grösser als 0 }
-
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 schreibenif(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 malHRESULT Successwenn 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...
