Programmeigenen Dateinamen ermitteln?

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

maxinet

Betreff: Programmeigenen Dateinamen ermitteln?

BeitragSa, Feb 17, 2007 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
gibt es irgendwie eine Möglichkeit, den Programmeigenen Dateinamen zu ermitteln ?
Mit B+ alleine geht es ja denk ich mal nicht, gibt es eine Userlib für?

Gruss,
MaXi!
 

judos

BeitragSo, Okt 18, 2009 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
genau diese Frage stelle ich mir nun auch gerade, nur leider hat bis jetzt noch niemand geantwortet.

Kennt vielleicht jemand dazu die Antwort und wäre so freundlich hier zu antworten, falls dieser Threat überhaupt noch sichtbar ist?

mfg judos

p.s. ja ich habe im forum danach gesucht etc...

blackgecko

BeitragSo, Okt 18, 2009 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man den Speicherort und die Dateigröße weiß, kann man den Ordner mit ReadDir und NextFile auslesen und die Dateien, die in Frage kommen, also die exe Dateien, noch mal mit FileSize überprüfen...
Sehr umständlich und nicht unbedingt erfolgreich, aber ansonsten hab ich auf Anhieb keine Idee.
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax
Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die.
 

Christian+

BeitragMo, Okt 19, 2009 7:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Damit müsste es gehen der Code müsste auch im englischen Forum sein denn ich glaube da hatte ich diese Lösung vor langer Zeit mal gefunden.

Ermittelt den Pfad und den Dateinamen der Exe falls ihr nur den Dateinamen ohne Pfad braucht müsst ihr den String halt zerlegen.

decls:

Code: [AUSKLAPPEN]
.lib "kernel32.dll"
GetModuleFileNameA%(hModule%,lpFileName*,nSize%):"GetModuleFileNameA"


Beispiel:

Code: [AUSKLAPPEN]
lpFileName = CreateBank(256)
str_len = GetModuleFileNameA(0,lpFileName,BankSize(lpFileName))

If str_len > 0 Then
   For grab_exe_name = 0 To str_len-1
      exe_name$ = exe_name + Chr(PeekByte(lpFileName,grab_exe_name))
   Next
EndIf

Print exe_name$
MouseWait
End


mfg Christian+
strike2Death
 

judos

BeitragMo, Okt 19, 2009 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
super! thx, ich werds mal ausprobieren ^^

die idee mit filesize und nextfile ginge natürlich auch, ist aber nicht so sauber weil es trotzdem fehler geben kann..

mfg judos

/edit:
Hat bestens funktioniert! Vielen dank für die schnellen Antworten. Very Happy

mfg judos

Trust

BeitragDi, Apr 24, 2012 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles in eine Funktion gepackt:
Parameter an die Funktion: nameOrAndPath
0 = nur Exe-Namen zurückgeben (Standart)
1 = nur Exe-Pfad zurückgeben
2 = Beides zurückgeben



Die decls-Datei
BlitzBasic: [AUSKLAPPEN]
;_______________________________________________________________________________
;
;.lib "kernel32.dll"
;
;api_GetModuleFileName% (hModule%, lpFileName*, nSize%) : "GetModuleFileNameA"
;_______________________________________________________________________________


Die Funktion

BlitzBasic: [AUSKLAPPEN]
Function GetExeName$(nameOrAndPath = 0) ;0 = Exenamen zurückgeben, 1 = Pfad zurückgeben, 2 = Pfad und Exenamen zurückgeben
Local lpFileName = CreateBank(256)
Local strLen = api_GetModuleFileName(0, lpFileName, BankSize(lpFileName))
Local exeNameAndPath$ = ""
Local exePath$ = ""
Local exeName$ = ""
Local tmpStr$ = ""
Local tmpName$ = ""

; Pfad und Exenamen holen
If strLen > 0 Then
For i = 0 To strLen-1
exeNameAndPath$ = exeNameAndPath$ + Chr(PeekByte(lpFileName, i))
Next
EndIf
; Exenamen aus Pfad holen (Exename ist rückwärts, da von hinten eingelesen wird)
For j = Len(exeNameAndPath$) To 1 Step - 1
tmpStr$ = Mid$(exeNameAndPath$, j, 1)
If tmpStr$ <> "\"
tmpName$ = tmpName$ + tmpStr$
Else
Exit
EndIf
Next
; Exenamen umdrehen
tmpStr$ = ""
For k = Len(tmpName$) To 1 Step - 1
tmpStr$ = Mid$(tmpName$, k, 1)
exeName$ = exeName$ + tmpStr$
Next
; Exepfad holen
exePath$ = Left$(exeNameAndPath$, Len(exeNameAndPath$) - Len(exeName$))

; Rückgabe
Select nameOrAndPath
Case 0 Return exeName$
Case 1 Return exePath$
Case 2 Return exeNameAndPath$
Default Return exeName$
End Select

End Function



Ein Beispielcode:
BlitzBasic: [AUSKLAPPEN]
Print GetExeName$(0)
Print GetExeName$(1)
Print GetExeName$(2)
WaitKey()
End
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group