PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmname rausfinden?



Surflam
06.02.2012, 18:07
Hey,
In meinem C++ Programmname kommen Unicodezeichen vor, und nun möchte ich das Programm in einen bestimmten Ordner Kopieren können. Diesen Ordner habe ich zuvor mit getenv(); erkannt und dann als String vorliegen. Nun möchte ich gern wissen wie ich den Programmname meines c++ im Programm selbst Dynamisch auslesen kann (das unicode richtig dargestellt) und dann z.b per cout ausgeben kann, ohne das ein z.b H?.exe" rauskommt. Da ich das Programm Unabhängig des Dateinamen in einen Ordner kopieren können muss wäre mir das sehr Wichtig, finde allerdings nirgends dazu eine Funktion o.ä, hat dazu jemand eine Idee? Zur Not Poste ich gerne ein Teil des Sourcecodes:)

Danke im Vorraus

Jut4h.tm
06.02.2012, 23:07
... in der main argv[0] google das mal ...

sp1nny
07.02.2012, 01:48
Unter Windows kannst du GetModuleFileNameW aus der WinAPI benutzen:

[/URL][URL="http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197%28v=vs.85%29.aspx"]GetModuleFileNameW (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683197%28v=vs.85%29.aspx)

Surflam
07.02.2012, 12:06
@Jut4h.tm (http://free-hack.com/member.php?u=35690)
Das geht nur wenn im Programmname kein Unicode vorkommt, was jedoch der Fall ist!

@sp1nny
kannst du mir dazu ein kleines Codebeispiel machen? Habe es nun versucht bekomme aber andauernd Fehler usw.. komme nicht so recht damit zurecht...
(http://free-hack.com/member.php?u=35690)

sp1nny
07.02.2012, 19:41
Versuchs mal so:



#include <windows.h>

int main(void)
{
WCHAR filename[MAX_PATH];
DWORD lengthfn;

lengthfn = GetModuleFileNameW(NULL, filename, sizeof(filename));
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), &filename, lengthfn, NULL, NULL);

return 0;
}
:)

mfg

Surflam
07.02.2012, 20:33
Habe es soeben versucht, es lässt sich Compilieren aber leider zeigts das immernoch nicht Korrekt an. Dort wo das unicode zeichen steht ist dann "H?.exe" anstelle von "Hexe.gif" (Das Unicodezeichen ist übrigens \u202e, falls das jemanden Hilft).
Normalerweise sollte WriteConsoleW(); doch Unicode korrekt darstellen können?
Nochmals Danke.

mfg cy

s3rb31
12.02.2012, 13:33
#include <windows.h>

int main(void)
{
WCHAR filename[MAX_PATH];
DWORD lengthfn;

lengthfn = GetModuleFileNameW(NULL, filename, sizeof(filename));
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), &filename, lengthfn, NULL, NULL);

return 0;
}




int main(void)
Das käme bei C++-strict nicht durch.

Außerdem würde ich einfach ne MessageBox zum austesten vorschlagen, viel einfacher:


int main()
{
wchar_t filename[MAX_PATH];

GetModuleFileNameW(NULL, filename, sizeof(filename));
MessageBoxW(0, filename, L"", 0);

return 0;
}

Bonkers
12.02.2012, 15:21
Außerdem würde ich einfach ne MessageBox zum austesten vorschlagen, viel einfacher:

Eventuell kann die cmd.exe einfach keine Unicode-Zeichen anzeigen.


C:\Users\User>type C:\Windows\System32\cmd.exe

Spielt euch ein schönes Lied auf der Konsole.

Surflam
12.02.2012, 15:52
int main()
{
wchar_t filename[MAX_PATH];

GetModuleFileNameW(NULL, filename, sizeof(filename));
MessageBoxW(0, filename, L"", 0);

return 0;
}

Das hat nun funktioniert ;)! Danke :)
Werde mal etwas weiter experimentieren damit , so das ich die Funktion hinbekomme die ich brauch für mein Programm :)
Danke nochmal an alle;)

mfg Surflam