MP3s mit Leerstellen abspielen mit mciSendString
-
Servus
wir machen grade in der schule ein Projekt und ich möchte unter anderem einen Filemanager schreiben, der auch MP3s abspielt.... ( alles in der konsole )
Nach einigem googeln bin ich auch mciSendString gestoßen
das sieht dann zb so aus:
pfad = "musik\\Metal\\test.mp3"; string szCommand = "open " + pfad; mciSendString(szCommand.c_str(), NULL, 0, NULL);allerdings klappt das nicht, wenn der Pfad eine (oder mehrere...) Leerstellen enthält....
nun hab ich iwo gelesen, dass mciSendString die Leerstellen als was anderes einliest.weitergegoogelt und ich fand das hier:
[B]function GetShortPathName(fn: TFileName): TFileName; var buf: array [0..MAX_PATH] of Char; begin SetString(Result, PChar(@buf), Windows.GetShortPathName(PChar(fn), @buf, MAX_PATH) ) end;[/B] procedure TForm1.Button1Click(Sender: TObject); const FileName = '"C:\WINDOWS\Media\Windows XP-kritischer Fehler.wav"'; begin label1.Caption := inttostr( MCISendString(PChar('open ' + GetShortPathName(FileName)), nil, 0, Handle)); end;Bezieht sich auf mein Problem mit mciSendString, ist allerdings in Delphi geschrieben und davon hab ich absolut kP. Könnte das vll jemand in c++ umwandeln oder mir sagen was in der Funktion GetShortPathName passiert??
Oder gibt es unkomplizierte alternativen zu mciSendString ?
-
für GetShortPathName siehe MSDN http://msdn2.microsoft.com/en-us/library/aa364989(VS.85).aspx
-
[b]Syntax[/b] DWORD WINAPI GetShortPathName( __in LPCTSTR lpszLongPath, __out LPTSTR lpszShortPath, __in DWORD cchBuffer ); Parameters [i]lpszLongPath[/i] The path string. The function retrieves the short form of this path. In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming a File. [i]lpszShortPath[/i] A pointer to a buffer to receive the null-terminated short form of the path that lpszLongPath specifies. [i]cchBuffer[/i] The size of the buffer that lpszShortPath points to, in TCHARs.ok bin noch nicht sehr gut in c++ von daher wäre ein Beispielcode, der GetShortPathName verwendet, sehr hilfreich. Danke im voraus
-
pfad = "\"mu sik\\M et al\\test.mp3\"";
-
bitte mit erklärung....
funzt aber auch nicht^^
-
sorry
pfad = "musik\\Metal\\test.mp3"; string szCommand = "\\" + open " + pfad + "\\";
-
string szCommand = "\\" + "open " + pfad + "\\";
-
so jetzt aber!
string szCommand = "\"" + "open " + pfad + "\"";
-
sorry bin besoffen ich kriegs nicht richtig hin
-
...aha....!
sieht aber nicht so aus als obs auf ne lösung für mein problem hinausläuft...
wenn zb die datei dort liegt:
[b]musik\\Metal\\artist - song.mp3[/b]muss ich das irgendwie so machen:
[b]char dateiname_lang[100]="artist - song.mp3"; char dateiname_kurz[100]; char play[4]="play"; [i]// müsste eigentlich [ ..="play "; ] da sonst -> pla[u]ym[/u]usik\\Metal\\artist - song.mp3[/i] GetShortPathName(dateiname_lang, dateiname_kurz,255); strcat(play,dateiname_kurz); [i]// play = "play " + "musik\\Metal\\artist - song.mp3"[/i] mciSendString(play, NULL, 0, NULL);[/b]das lässt sich zumindest mal compilieren, aber getShortPathName funktioniert anscheinend mit strings nicht (mit denen ich aber arbeite^^).
-
http://c-plusplus.net/forum/viewtopic-var-t-is-39378.html
Die dort vorgestellte Funktion funktioniert mit Leerzeichen
-
na das ist doch mal was...
ich weiß zwar nicht genau wieso es klappt, denn auch wenn ich den code teilweise übernehme klappts mit meinem eigenen nicht hmm... ich probiers morgen (bzw Montag) weiter...
vielen dank "..........." für deine Bemühungen!!!!
-
Der "Trick" dabei ist, dass der Pfad mit Gänsefüßchen (<-lange nicht mehr gesagt/geschrieben :)) ummantelt wird.
-
Ich glaube, ich habs verstanden. Demnach müsste das "geheimnis" in dem
\"%\"liegen?!
wsprintf(cmd,"play \"%s\"",path); [i] // cmd = "play ..." + der pfad[/i] mciSendString(cmd,NULL,NULL,NULL) [i]// dann wird cmd abgespielt....[/i]
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.
-
Blackout1911 schrieb:
Demnach müsste das "geheimnis" in dem
\"%\"liegen?!
Genau!
(Soll ja keine Frage unbeantwortet bleiben :)).
-
Badestrand schrieb:
Blackout1911 schrieb:
Demnach müsste das "geheimnis" in dem
\"%\"liegen?!
Genau!
(Soll ja keine Frage unbeantwortet bleiben :)).Danke!
(Soll ja keine Antwort unbedankt bleiben :)).