Eigene exe mit Parameter starten.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Das Problem ist halt, das du mittels Commandshell vom Benutzerverzeichnis
dein Programm mit Parameter aufrufst. Damit ist also nicht das Verzeichnis,
dass mit GetCurrentDirectory() ausgegeben wird, das Programmverzeichnis,
sondern das aktuelle wovon du dein DOS-Befehl startest. Darum wird es dort
auch hin kopiert.
Wenn also vorher bekannt ist, wo deine Exe sich befindet, könntest du es
zuvor mit SetCurrentDirectory setzen.
Andernfalls könnte man den Pfad auch in einen weiteren Parameter mit
angeben, der dann in Openfile eingebracht wird.
Gruß
Falko
dein Programm mit Parameter aufrufst. Damit ist also nicht das Verzeichnis,
dass mit GetCurrentDirectory() ausgegeben wird, das Programmverzeichnis,
sondern das aktuelle wovon du dein DOS-Befehl startest. Darum wird es dort
auch hin kopiert.
Wenn also vorher bekannt ist, wo deine Exe sich befindet, könntest du es
zuvor mit SetCurrentDirectory setzen.
Andernfalls könnte man den Pfad auch in einen weiteren Parameter mit
angeben, der dann in Openfile eingebracht wird.
Gruß
Falko
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ich hab das Problem wohl noch nicht so ganz verstanden, scheint aber das
typische GetCurrentDirectory() problem zu sein
GetCurrentDirectory gibt das aktuelle Verzeichnis zurück, welches sonstwo
hinzeigen kann, wenn es nicht gesetzt wurde! (z.B. Verknüpfung: Ausführen in fehlt, oder shell usw.)
Hier mal Pseudocode:
wobei ich vermute, das die zweite Variante gewollt ist. Diese ist aber nicht
sonderlich sinnvoll, weil dafür müßte das Tools mit Adminrechten laufen,
was unter XP für die meisten zwar standard ist, aber unter Vista meist nicht.
typische GetCurrentDirectory() problem zu sein

GetCurrentDirectory gibt das aktuelle Verzeichnis zurück, welches sonstwo
hinzeigen kann, wenn es nicht gesetzt wurde! (z.B. Verknüpfung: Ausführen in fehlt, oder shell usw.)
Hier mal Pseudocode:
Code: Alles auswählen
; entweder dort speichern, wo die gedroppte datei ist:
Path.s = GetPathPart(name)
; oder im programmverzeichnis, was meist nicht erlaubt ist! aber hier nur als beispiel:
Path.s = GetPathPart(ProgramFilename())
; danach den Pfad fürs Programm setzen
SetCurrentDirectory(Path)
sonderlich sinnvoll, weil dafür müßte das Tools mit Adminrechten laufen,
was unter XP für die meisten zwar standard ist, aber unter Vista meist nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

@ts-soft, genau so ist es, wie in Punkt 2 beschrieben.
Also müsste ich z.b. in einer *.ini den momentanen Path der exe speicher und von dort auslesen damit die datei auch dort gespeichert wird.
)
Dann ist es etwas blöde
das soll so nicht sein.
Das besser wäre also hier ein FileRequest einzubauen wo ich
eine zu überprüfende Datei selber angebe, da das anscheinend nur passiert
wenn ich mir den path mit ProgramParameter() angeben lasse.
Gut, dann werd ich mal wieder etwas in der hilfe wühlen
Also müsste ich z.b. in einer *.ini den momentanen Path der exe speicher und von dort auslesen damit die datei auch dort gespeichert wird.
)
Dann ist es etwas blöde

Das besser wäre also hier ein FileRequest einzubauen wo ich
eine zu überprüfende Datei selber angebe, da das anscheinend nur passiert
wenn ich mir den path mit ProgramParameter() angeben lasse.
Gut, dann werd ich mal wieder etwas in der hilfe wühlen

I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Filerequester ist auch nicht schlecht. Dann nimmst du Runprogramm und führst die Datei mit dem Wunschparameter aus.
Da du weißt, wie du den Pfad mit Datei angibst könntest du das gleiche beim Parameter machen. Beispiel habe ich mal kurz zusammengestellt.
Der Aufruf in der CMD ist im Sourcetext vorgegeben, den du kopieren und einfügen kannst.
Die Ausgabe sieht dann so aus:
Falko
Da du weißt, wie du den Pfad mit Datei angibst könntest du das gleiche beim Parameter machen. Beispiel habe ich mal kurz zusammengestellt.
Der Aufruf in der CMD ist im Sourcetext vorgegeben, den du kopieren und einfügen kannst.
Code: Alles auswählen
;Parameter bzw. Path der Datei wird als String der Globalen Variable
;name.s übergeben
name.s = ProgramParameter()
;Bitte bei der Shell Eingabe des Parameters den kompletten Path mit Datei angeben
;Beispiel: E:\Basic\Projekte\Purebasic\md5\Test.exe E:\Basic\Projekte\Purebasic\md5\MyPara.txt
path.s=GetPathPart(name)
MessageRequester("Ausgabe",path)
;Konsole wird geöffnet damit ich eine visuelle anzeige habe ;)
OpenConsole()
;Titel/Name
ConsoleTitle("go_MD5 (c) Fabbio - D2O - Soddu")
;Gelbe schrift auf roten hintergrund
ConsoleColor(14,4)
;Globale Variable für die ausgabe von MD5FileFingerprint(name.s)
out.s
;Hier habe ich die variable debugt und bekomme den richten path angezeigt
Debug name
; Datei sollte erstellt werden, geht aber nicht :(
OpenFile(0,path+"MD5_Output_OneFile.txt")
WriteString(0,"Dateiname")
WriteString(0," ; ")
WriteStringN(0,"MD5")
PrintN("www.deuteriumoxid.com")
PrintN("Working, please wait") ; Consolen ausgabe, nur zu testzwecken
out = MD5FileFingerprint(name)
WriteString(0,name) ; Name der Datei
WriteString(0," ; ") ;Semikolon schreiben
WriteStringN(0,out) ;MD5 wert schreiben
CloseFile(0) ;Datei schliesen
CloseConsole();Console schliesen
GrußDateiname ; MD5
E:\Basic\Projekte\Purebasic\md5\MyPara.txt ; ceb25a90e02cb1e41ee0a52f2465c175
Falko
Juhu geschaft
Das mit den Requestern gefällt mir sehr gut.
So habe ich nun beide Versionen damit ausgestattet,
die, wo man nur eine Datei wählen kann und eine zeite
wo man einen ganzen Ordner auswählt.
Einige sachen sind mir noch nicht ganz schlüssig, aus der hilfe/forum Kopiert
und nur für mich angepasst, aber auch nicht ganz blind kopiert und mir die Infos dazu auch angeschaut (noch nicht alles verstanden,
aber angeschaut
)
Hier nochmals Danke für Eure Mühe und Hilfe
Anbei noch beide Lösungen von mir:

Das mit den Requestern gefällt mir sehr gut.
So habe ich nun beide Versionen damit ausgestattet,
die, wo man nur eine Datei wählen kann und eine zeite
wo man einen ganzen Ordner auswählt.
Einige sachen sind mir noch nicht ganz schlüssig, aus der hilfe/forum Kopiert
und nur für mich angepasst, aber auch nicht ganz blind kopiert und mir die Infos dazu auch angeschaut (noch nicht alles verstanden,
aber angeschaut

Hier nochmals Danke für Eure Mühe und Hilfe

Anbei noch beide Lösungen von mir:
Code: Alles auswählen
StandardFile$ = GetCurrentDirectory()
Global name.s = OpenFileRequester("Datei Öffnen",StandardFile$,"Alle Dateien (*.*)|*.*",0)
;Konsole wird geöffnet damit ich eine visuelle anzeige habe ;)
OpenConsole()
;Titel/Name
ConsoleTitle("go_MD5 (c) Fabbio - D2O - Soddu")
;Gelbe schrift auf roten hintergrund
ConsoleColor(14,4)
;Globale Variable für die ausgabe von MD5FileFingerprint(name.s)
Global out.s
;Aktueller Path übergeben
Global path.s = GetCurrentDirectory()
PrintN(path+"MD5_Output_OneFile.txt")
;Createfile, da sicher gestellt sein soll das die datei neu ohne inhalt ist
CreateFile(0,path+"MD5_Output_OneFile.txt")
;Erste Zeile schreiben
WriteString(0,"Dateiname")
WriteString(0," ; ")
WriteStringN(0,"MD5")
;Consolen ausgabe
PrintN("www.deuteriumoxid.com")
PrintN("Danke an die Deutsche PureBasic Comunity")
PrintN("http://www.purebasic.fr/german/index.php")
PrintN("Working, please wait")
;MD5 wert übergeben
out = MD5FileFingerprint(name)
;Kompletter Datei path auf den Dateinamen kürzen
name = GetFilePart(name)
WriteString(0,name) ; Name der Datei
WriteString(0," ; ") ;Semikolon schreiben
WriteStringN(0,out) ;MD5 wert schreiben
CloseFile(0) ;Datei schliesen
CloseConsole();Console schliesen
Code: Alles auswählen
StandardFile$ = GetCurrentDirectory()
Global path.s = PathRequester("Ordner Öffnen", StandardFile$)
OpenConsole()
;Titel/Name
ConsoleTitle("go_MD5 (c) Fabbio - D2O - Soddu")
;Gelbe schrift auf roten hintergrund
ConsoleColor(14,4)
Global out.s
ExamineDirectory(0, path, "*.*") ; Ordner darüber öffnen
CreateFile(0,"MD5_Output_AllFile.txt")
WriteString(0,"Dateiname")
WriteString(0," ; ")
WriteStringN(0,"MD5")
PrintN("www.deuteriumoxid.com")
While NextDirectoryEntry(0) ; solange was im Ordner vorhanden ist
PrintN("Working, please wait") ; Consolen ausgabe, nur zu testzwecken
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
name.s = DirectoryEntryName(0) ; Name der vorhandenen Datei
;out.s = MD5FileFingerprint(path + "\" + name.s)
out.s = MD5FileFingerprint(name.s)
;out.s = MD5FileFingerprint(name.s) ;MD5 von der Datei erstellen<<< bekomme aber hier keine ausgabe
Debug out.s
WriteString(0,name.s)
WriteString(0," ; ")
WriteStringN(0,out.s)
EndIf
Wend
CloseFile(0)
CloseConsole()
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
o_OFabio hat geschrieben:Juhu geschaft![]()
Hab jetzt nur den 2ten snippet getestet:
1. öffnet System32 bei mir

2. abbrechen im Pathrequester wird ignoriert, er würde also bei mir in
system32 eine Datei erstellen, wenn er die Rechte hätte, hat er bei mir nicht

Grob geänderter Code:
Code: Alles auswählen
StandardFile$ = GetPathPart(ProgramFilename())
Global path.s = PathRequester("Ordner Öffnen", StandardFile$)
If path
OpenConsole()
;Titel/Name
ConsoleTitle("go_MD5 (c) Fabbio - D2O - Soddu")
;Gelbe schrift auf roten hintergrund
ConsoleColor(14,4)
Global out.s
ExamineDirectory(0, path, "*.*") ; Ordner darüber öffnen
CreateFile(0,"MD5_Output_AllFile.txt")
WriteString(0,"Dateiname")
WriteString(0," ; ")
WriteStringN(0,"MD5")
PrintN("www.deuteriumoxid.com")
While NextDirectoryEntry(0) ; solange was im Ordner vorhanden ist
PrintN("Working, please wait") ; Consolen ausgabe, nur zu testzwecken
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
name.s = DirectoryEntryName(0) ; Name der vorhandenen Datei
;out.s = MD5FileFingerprint(path + "" + name.s)
out.s = MD5FileFingerprint(name.s)
;out.s = MD5FileFingerprint(name.s) ;MD5 von der Datei erstellen<<< bekomme aber hier keine ausgabe
Debug out.s
WriteString(0,name.s)
WriteString(0," ; ")
WriteStringN(0,out.s)
EndIf
Wend
CloseFile(0)
CloseConsole()
EndIf

Nehme als Ausgangspfad, den der eigenen exe, in der IDE wird das
wahrscheinlich Temp sein.
Das If ist wichtig nach dem Requester, ob ich überhaupt etwas gewählt habe!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Moin moin,
Danke.
Nur ist mir jetzt was aufgefallen, das mit dem Ordner auswählen
funktioniert ansich ja.
Aber nur wenn ich den Ordner auswähle in dem die exe selber drin ist werde alle Dateien korrekt erkannt und ein MD5 wert erstellt und abgespeichert.
Nehme ich den Ordner über der Exe, werden die Dateinamen auch erkannt und abgespeichert aber kein MD5 wert, ausser es handelt sich um eine exe Datei
Das schaft mich wieder Total
Aber bitte beachten das von der "MD5_Output_AllFile.txt" kein MD5
wert erstellt werden kann, die Datei ist ja noch nicht abgeschlossen.
Hier mal die ausgaben.
Gleicher Ordner
Edit://
Ich hab den fehler gefunden.
Anstatt
Hier noch der gesammte code.
Danke.
Nur ist mir jetzt was aufgefallen, das mit dem Ordner auswählen
funktioniert ansich ja.
Aber nur wenn ich den Ordner auswähle in dem die exe selber drin ist werde alle Dateien korrekt erkannt und ein MD5 wert erstellt und abgespeichert.
Nehme ich den Ordner über der Exe, werden die Dateinamen auch erkannt und abgespeichert aber kein MD5 wert, ausser es handelt sich um eine exe Datei

Das schaft mich wieder Total

Aber bitte beachten das von der "MD5_Output_AllFile.txt" kein MD5
wert erstellt werden kann, die Datei ist ja noch nicht abgeschlossen.
Hier mal die ausgaben.
Gleicher Ordner
Ordner darüberDateiname ; MD5
Einführung in PureBasic_020508.pdf ; 066a75bf7fbc6ca8622546dc2b9585d1
go_md5_AllFile.exe ; c6b47f590c0e037d174102b0cab6c022
go_md5_OneFile.exe ; d83359b14f32f95fc32cf6de74ca0d27
go_md5_StillAllFile.exe ; adf8812e46256c76906235bac223a3c7
MD5_Output_AllFile.txt ;
MD5_Output_OneFile.txt ; 5d67c1196152c06f9114e58e5b8edaea
MD5_Output_stillAllFile.txt ; ab64f1e9e203d15978e49c1a0b476a56
Dateiname ; MD5
Einführung in PureBasic_020508.pdf ;
go_md5_AllFile.pb ;
go_md5_AllFile.v.0.2.pb ;
go_md5_AllFile.v.0.3.pb ;
go_md5_OneFile .v0.2.pb ;
go_md5_OneFile.pb ;
go_md5_StillAllFile.exe ; adf8812e46256c76906235bac223a3c7
go_md5_StillAllFile.pb ;
Make_MD5.pb ;
Make_MD5_v2.pb ;
Make_MD5_v3.pb ;
Make_MD5_v4.pb ;
Make_MD5_v5.pb ;
Edit://
Ich hab den fehler gefunden.
Anstatt
muss esout.s = MD5FileFingerprint(name.s)
heisen.out.s = MD5FileFingerprint(path + "\" + name.s)
Hier noch der gesammte code.
Code: Alles auswählen
StandardFile$ = GetPathPart(ProgramFilename())
Global path.s = PathRequester("Ordner Öffnen", StandardFile$)
If path
OpenConsole()
;Titel/Name
ConsoleTitle("go_MD5 (c) Fabbio - D2O - Soddu")
;Gelbe schrift auf roten hintergrund
ConsoleColor(14,4)
Global out.s
ExamineDirectory(0, path, "*.*") ; Ordner öffnen
CreateFile(0,"MD5_Output_AllFile.txt")
WriteString(0,"Dateiname")
WriteString(0," ; ")
WriteStringN(0,"MD5")
PrintN("www.deuteriumoxid.com")
While NextDirectoryEntry(0) ; solange was im Ordner vorhanden ist
PrintN("Working, please wait") ; Consolen ausgabe, nur zu testzwecken
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
name.s = DirectoryEntryName(0) ; Name der vorhandenen Datei
out.s = MD5FileFingerprint(path + "\" + name.s) ;:<<<<<<<<<<<<so muss es sein
;out.s = MD5FileFingerprint(name.s) ;<<<<<<<<<<<<<<<<<<<<<<<nicht so
WriteString(0,name.s)
WriteString(0," ; ")
WriteStringN(0,out.s)
EndIf
Wend
CloseFile(0)
CloseConsole()
FinishDirectory(0)
EndIf
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;