Seite 1 von 2

Eigene exe mit Parameter starten.

Verfasst: 28.09.2008 10:18
von Fabio
Hallo,
wusste nicht das mir sowas so schwerfallen würde :(

Sufu und die Hilfe benutzt und trotzdem nicht schlau geworden.

Folgendes, ich habe mir hier ein kleines, sehr kleines Tool geschrieben um
schnell MD5 Wert von Dateien im ganzen Ordner zu erhalten.
Das geht gut :)

Nun möchte ich aber auch schlicht und einfach einen MD5 werte erhalten, in dem ich eine datei auf das Tool mit drag and Drop draufziehe.
Und hier hänge ich, ich finde diese Funktion nicht :(

Meine suche ging in richtund "= ComandCom$()" aber das scheint hier falsch zu sein.

Ich hoffe Ihr könnt mir hier helfen .

Re: Eigene exe mit Parameter starten.

Verfasst: 28.09.2008 10:26
von Kiffi
ProgramParameter() ist Dein Freund :-)

Grüße ... Kiffi

Verfasst: 28.09.2008 11:57
von KeyKon
Du kannst das ganze natürlich auch über Drag'n'Drop regeln...

Hier eine Mischform die ich immer verwende, hier geht beides...
Mehrere Dateien sind immer durch Chr(10) getrennt...

Code: Alles auswählen

  For i = 0 To CountProgramParameters()-1
    Files$ + Chr(10) + ProgramParameter()
  Next

  If OpenWindow(0, 200, 200, 400, 400, "Drag & Drop", #PB_Window_SystemMenu)
    CreateGadgetList(WindowID(0))
    TextGadget(0,10,10,380,200,"Irgendwo aufs Fenster ziehen..."+Files$,#PB_Text_Border)
    
    EnableWindowDrop(0,#PB_Drop_Files,#PB_Drag_Copy)
    
    Repeat
      Event = WaitWindowEvent()
      
      Files$ = Chr(10) + EventDropFiles()
      
      If Event = #PB_Event_WindowDrop  
        SetGadgetText(0,"Irgendwo aufs Fenster ziehen..."+Files$)
      EndIf      
      
    Until Event = #PB_Event_CloseWindow
  EndIf

Verfasst: 28.09.2008 12:06
von Fabio
Danke Kiffi das wars, nur gehts nicht wie ich möchte :(
Es wird keine TXT erzeugt.

Hier mal der Code so wie ich ihn verstehe:

Code: Alles auswählen



;Parameter bzw. Path der Datei wird als String der Globalen Variable 
;name.s übergeben
Global name.s = ProgramParameter()

;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

;Hier habe ich die variable debugt und bekomme den richten path angezeigt
Debug name.s



; Datei sollte erstellt werden, geht aber nicht :( 
OpenFile(0,"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.s = MD5FileFingerprint(name.s) 
      
    
      
      WriteString(0,name.s) ; Name der Datei
      WriteString(0," ; ")  ;Semikolon schreiben
      WriteStringN(0,out.s) ;MD5 wert schreiben
   

 



CloseFile(0)  ;Datei schliesen
CloseConsole();Console schliesen


   

Verfasst: 28.09.2008 13:53
von Fabio
Oops,
@KeyKon,
Das kommt davon wenn man anfäng eine Antwort zu schreiben und dabei seinen PC kurz verlässt.

Danke auch Dir für den Tipp/Code.
Nur, ich habe PB zwar schon seit ca. 2001, glaube V.2.8???
aber nie wirklich was damit gemacht :(
Daher soll erstmal alles was mit Fenster,Gadget,Events....
zu tun hat, sich hinten anstellen.
Das wird sonst zuviel für mich ;)

Für mich ist es so wie für einen Totalen neu Anfänger in sachen PB :)

Edit://

So langsam werd ich warm;) mit PB
aber ich bekomms immer noch nicht zum laufen.

Ich habe mir auch mal ein Debug von Openfile..
ausgeben lassen und bekomme "1950" zurück.
Also kann mal davon ausgehen das die Datei erstellt werden kann/soll/ist.
Aber es wird nichts erzeugt.

Nun habe ich schlicht und einfach das "Global name.s = ProgramParameter()" auskommentiert.
Nun wird mir die ausgabe Datei erstellt mit dem Semikolon
nur eben und Dateiname und MD5 wert das das ja leer ist.


Also komm ich mal zum entschluss dass das Problem an
ProgramParameter() liegt.

Muss ich hier speziell was beachten?

Verfasst: 28.09.2008 14:48
von Fabio
Hmm, da werd ich schon garnicht mehr schlau daraus :?

ProgramParameter() gibt doch eh schon den genauen Path der Datei an,
und
Openfile() sollte doch nur im Aktuellen verzeichnis, wenn keine Path angabe gemacht wird, eine Datei erstellen.

Wieso solte ich dann nochmals den Aktuellen Path angeben, bzw. wo?

Falko, Du hast mich jetzt Total verwirrt :lol:

Verfasst: 28.09.2008 14:51
von Falko
@Fabio

Vielleicht solltest du dein Programm zur Exe kompilieren und es dann mittels Parameter aufrufen. Ich kann mir nicht vorstellen, das ProgramParameter() mit dem Debugger geprüft werden kann.

[Edit] Das vorhin war wohl voll daneben :lol: . Hatte das mit dem Path überlesen [/Edit]

Verfasst: 28.09.2008 15:06
von Fabio
Das mit dem Debug habe ich so gemacht.

Code: Alles auswählen

Global name.s = ProgramParameter()

Debug name.s
und in der IDE unter Compiler Optionen habe ich den Path zur Datei angegen.
So das beim laufenlassen unter der IDE die Datei geöffnet wird.
Wenn ich die *.exe benutze, passiert nichts, bzw. die *.txt wird nicht erstellt.

So, habe den Code etwas ergänzt, damit ich sehe was Passiert.

Mir wird der Dateipath angegeben,
der Hash wert,
und das eine Datei erzeugt wird, ausgabe ist ungleich 0

und Trotzdem passiert nichts,
die datei.txt wird nicht erstellt.

;Parameter bzw. Path der Datei wird als String der Globalen Variable
;name.s übergeben
Global name.s = ProgramParameter()

Debug name.s
;name.s = DirectoryEntryName()

;Konsole wird geöffnet damit ich eine visuelle anzeige habe ;)
OpenConsole()

PrintN(name.s)
Input()

;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

;Hier habe ich die variable debugt und bekomme den richten path angezeigt






PrintN("www.deuteriumoxid.com")



PrintN("Working, please wait") ; Consolen ausgabe, nur zu testzwecken




Path$ = GetCurrentDirectory()
out.s = MD5FileFingerprint(name.s)
Debug out.s

PrintN(out.s)
Input()



; Datei sollte erstellt werden, geht aber nicht :(

ok = OpenFile(1,"MD5OutputOneFile.txt")
Debug ok

test.s = StrU(ok,#Word)
PrintN(test.s)
Input()
WriteString(1,"Dateiname")
WriteString(1," ; ")
WriteStringN(1,"MD5")

WriteString(1,name.s) ; Name der Datei
WriteString(1," ; ") ;Semikolon schreiben
WriteStringN(1,out.s) ;MD5 wert schreiben






CloseFile(1) ;Datei schliesen
CloseConsole();Console schliesen

Verfasst: 28.09.2008 15:24
von Falko
Diese .s dürfen nur einmal pro Variable deklariert werden. Danach ist die Variable ja überall im Source bekannt. Da du ja MD5FileFingerprint() benutzt, übergibst du dem Parameter den Filenamen, wenn ich richtig verstehe. Habe den Source etwas umgestellt und das geht bei mir.


Test.exe aus diesem Source erstellt. Irgendeine Testfile wie z.B. MYPara.txt erstellt und diese in der CMD dann so aufgerufen:

Test "MyPara.txt"

Danach bekomme ich dann eine MD5_Output_OneFile.txt erzeugt, die so aussieht:
Dateiname ; MD5
MyPara.txt ; ceb25a90e02cb1e41ee0a52f2465c175
So sieht dann der Source aus:

Code: Alles auswählen

;Parameter bzw. Path der Datei wird als String der Globalen Variable
;name.s übergeben
name.s = ProgramParameter()

;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,"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 
Global habe ich weggelassen, da ich ja keine Procedures benutze.

Gruß
Falko

Verfasst: 28.09.2008 16:55
von Fabio
Hi Falko, Danke.
Das mit dem .s wusste ich nicht das das weg muss.
Es war/ist für mich nur eine Hife damit ich gleich sehe was für ein Type die Variable ist.

Lustig lustig, die Datei wird immer noch nicht erstellt, bzw.
nicht dort wo die exe und die zu prüfenden Dateien sind.

Das ist mir auch erst aufgefallen als ich das ganze nicht mit Drag and Drop gemacht habe,
sondern über "CMD".

Exe und zu prüfende Datei befinden sich hier:
E:\Basic\Projekte\PureBasic\MD5
und die Ausgabe.txt wird hier erstellt:
C:\Dokumente und Einstellungen\Fabbio

Ich bekomme also es nicht gebacken die Datei im Exe verzeichnis zu erstellen.
So, nun habe ich mal nachgeschaut und es gibt den befehl
GetCurrentDirectory()
Der sollte mir den Aktuellen Path zurückgeben,
was aber nicht passiert, denn bei
path.s = GetCurrentDirectory()

PrintN(path+"MD5_Output_OneFile.txt")
bekomme ich wieder
C:\Dokumente und Einstellungen\Fabbio\MD5_Output_OneFile.txt
angegeben und dort wird die *.txt erstellt :(