Hilfe zu:SHGetFileInfo ! Sie scheint MZ ,NE und PE im Loword nicht zu kennen.
-
Frage mich, was dadran unklar sein soll.
-
Der Satzbau? Die Grammatik? Oder einfach nur die Tatsache, daß du nicht klar erklären konntest, was du willst?
@Topic: Wenn du schon "auf _T() tippst", hast du womöglich ein Problem mit der UNICODE-Umsetzung. Wenn du versuchst, einen char-Test in einer UNICODE-Umgebung auszugeben, wird der mitunter ziemlich unsauber interpretiert (sizeof(wchar_t) Zeichen werden zu einem zusammengefasst und dann das dazu passende Zeichen rausgesucht - die Fragezeichen stehen vermutlich für unbekannte Codes).
-
Der gesamte Beitrag ist sauber , ausser mein Zusatz.
oder etwa nicht?
danke dennoch.
-
Nicht wirklich (im Gegensatz zu dir wissen wir nicht, wie sich dein Problem auswirkt).
Nur das mit dem DisplayName erscheint mir noch schleierhaft, ... ich tippe auf dieses seltsame _T ----- was auch immer das für n String sein soll........
Wo taucht denn in dem obigen Code ein "seltsames _T" auf?
_T() ist ein Hilfsmakro, um unabhängig von UNICODE-Einstellunge schreiben zu können - das wandelt ein Stringliteral in den passenden Datentyp um (je nach Einstellung wird aus _T("xyz") entweder "xyz" (char-String) oder L"xyz" (wchar_t-String)). Wenn es Probleme macht, dann vermutlich, weil du es nicht konsequent genug eingesetzt hast.
-
ich dachte, dass Ihr auch in dem Link nachschaut und seht, was ich sah:
Einen code mit einem seltsamen _T() Makro, welchen ich selber nicht verwende.
Und dann bin ich fälschlicherweise davon ausgegangen, ihr würdet , wie ich, meinen Code direkt mit dem Schnipsel hinter dem Link vergleichen und euch das gleiche fragen, was ich mich fragte:
"DAS MAKEWORD! ICH VOLLIDIOT. WENN ICH DAS VERWENDE BLEIBT ABER IMMER NOCH DER FEHLER MIT DEN FRAGEZEICHEN.... WIE LÖSE ICH DAS?"Aber Ihr saht weder nach noch fragtet Ihr Euch Ähnliches.
Das tut mir leid.
Sorry....
akzeptiert?
-
me-S-on schrieb:
... BLEIBT ABER IMMER NOCH DER FEHLER MIT DEN FRAGEZEICHEN.... WIE LÖSE ICH DAS?
Musst ShGetFileInfo () zweimal aufrufen, weil der Rückgabewert von ShGetFileinfo () je nach "Bedarf" eine andere Bedeutung hat :
SHFILEINFO fis; DWORD dwRetVal; ... dwRetVal = SHGetFileInfo(path_and_file,0,0,0,SHGFI_EXETYPE); if (LOWORD(dwRetVal) == 'PE') ... // dann Win32-EXE ... dwRetVal = SHGetFileInfo(path_and_file,0,&fis,sizeof(fis),SHGFI_DISPLAYNAME | SHGFI_TYPENAME); if ( dwRetVal != 0 ) ... // dann fis.szDisplayName und fis.szTypeName auswerten ...
-
es kommt doch gar nicht auf den Rückgabewert an, wenn ich den DisplayName haben will.
Der steht doch in der Struktur SHFILEINFO, der Rückgabewert ist doch nur voller FLAGS.
Aber der Name steht doch in dem Strukturmember, psfi.szDisplayName oder ?
-
me-S-on schrieb:
es kommt doch gar nicht auf den Rückgabewert an, wenn ich den DisplayName haben will.
Der steht doch in der Struktur SHFILEINFO, der Rückgabewert ist doch nur voller FLAGS.Auf den Rückgabewert kommt es sehr wohl an. Dieser sagt nämlich schon mal aus, ob die Funktion erfolgreich war, oder nicht.
Und wo befindet sich der Rückgabewert der Funktion SHGetFileInfo in der Struktur SHFILEINFO???
-
Sicher, das er den Erfolg anzeigt, das ist klar.
Nur bezogen auf diesen Falls meinte ich , das er für die Ausgabe des Strings doch nicht extra einen anderen Wert annehmen muss, als im Aufruf vorher ( da merker schrieb, ich sollte die SHGetFileInfo zweimal aufrufen ).Der Rückgabewert wird doch nicht in der Struktur untergebracht, oder doch?
-
me-S-on schrieb:
es kommt doch gar nicht auf den Rückgabewert an, wenn ich den DisplayName haben will.
Der steht doch in der Struktur SHFILEINFO, der Rückgabewert ist doch nur voller FLAGS.
Aber der Name steht doch in dem Strukturmember, psfi.szDisplayName oder ?Was genau die Funktion dir liefert, hängt aber davon ab, mit welchen Parametern du sie aufrufst - wenn du als letzten Parameter SHGFI_EXETYPE angibst, erhältst du die Kennzeichnung des Typs als Rückgabe (und vermutlich keine brauchbaren Werte in deiner SHFILEINFO-Struktur), bei anderen Flags werden die entsprechenden Member der Fileinfo mit sinnvollen Werten gefüllt.
(und die MSDN sagt zu SHGFI_EXETYPE "This flag cannot be specified with any other flags." - darum brauchst du zwei seperate Aufrufe, um Exe-Typ und Anzeigename zu erhalten)
-
Genau. Das las ich auch..... und dennoch war ich mir bezüglich der Struktur und dem Rückgaberwert im Unklaren.
Also,Heute Abend wieder dran, WE war zu alkoholhaltig...... nicht einmal zum coden gekommen, SCHANDE über mein HAUPT.
