Zielverzeichnis / Pfad Problem

  • Ich habe eine Funktion in ein Tool eingebaut das es erlaubt eine beliebige Datei zu suchen und die dann zu öffnen.
    Leider funktioniert es nicht ganz wie ich es möchte

    Hier ein Beispiel:


    Ist jetzt nicht der ganze Code, aber dient nur zur Erklärung.

    Also wenn ich nun zum Beispiel Paint.exe suche, und dann die den Button anklicke der die Funktion open_file1 () ausführt, startet Paint nicht.
    In Input 1 steht dann nur : C:\Dokumente und Einstellungen\PC\Desktop

    wenn ich dann von Hand Input 1 "Paint.exe" eingebe, also : C:\Dokumente und Einstellungen\PC\Desktop\Paint.exe

    erst dann öffnet er das Programm.

    Nun meine frage, wie schaffe ich es das er das Programm das ich ausgesucht habe automatisch in Input1 dazuschreibt.


    // EDIT , AUF DEN LETZTEN POST ACHTEN

    5 Mal editiert, zuletzt von LANCeR (26. März 2010 um 19:33)

  • Also ich habe mir jetzt die 2 Sachen angeschaut, werde aber nicht schlauer dadurch.

    Func path_of_file1 ()
    $aFile = _WinAPI_GetOpenFileName("")
    GUICtrlSetData ($Input1,$aFile[1] & _____)
    EndF

    Der Code ist schon richtig, ich muss einfach nur im rot markierten Feld eingeben das er den FILENAME dazuschreiben soll, aber ich weis nicht wie.

  • Schau doch in die Hilfe.

    Zitat

    Rückgabewert
    Erfolg: Array mit dem folgenden Format:

    • [0] - Enthält die Anzahl der Strings
    • [1] - Enthält den gewählten Pfad
    • [2] - Enthält die gewählte Datei
    • [n] - Enthält die gewählte Datei

    Fehler: Array mit einem Element, gesetzt auf 0

    Also:

    [autoit]

    Func path_of_file1()
    $aFile = _WinAPI_GetOpenFileName("")
    GUICtrlSetData ($Input1,$aFile[1] & "\" & $aFile[2])
    EndFunc

    [/autoit]

    Aber wieso nimmst du den WinAPI und nicht den normalen FileOpenDialog ( "title", "init dir", "filter" [, options [, "default name" [, hwnd]]] )?

  • Also das erste von mir gibt zurück, ob die datei existiert (normaleinstellung => @scriptdir)
    die zweite gibt den kompletten dateipfad zurück
    Also ich hätte es so gemacht =>

    Datei suchen in MyDocuments
    [autoit]

    $a = InputBox("Test", "Zu suchende Datei")
    $b = FileFindFirstFile(@MyDocumentsDir & $a)
    If not $b = 1 Then
    MsgBox(64, "Error", "Datei existiert nicht!")
    Exit
    EndIf
    $c = FileGetLongName(@MyDocumentsDir & "\" & $a)
    If not FileExists($c) Then
    MsgBox(64, $c, "Datei konnte nicht gefunden werden!") ; Falls sich irgentetwas geändert hat
    Exit
    EndIf
    Run($c)

    [/autoit]
  • Erstmal Danke. Funktioniert Super.

    Zitat

    Aber wieso nimmst du den WinAPI und nicht den normalen FileOpenDialog ( "title", "init dir", "filter" [, options [, "default name" [, hwnd]]] )?

    Ich habe noch nicht den Durchblick in AutoIt, habe erst vor kurzem Angefangen mit AutoIt rumzuspielen.

    Deshalb weis ich oft nicht was ich wie bewerkstelligen kann :) aber Übung macht den Meister.

  • Und dann guckst du schon in WinAPI? Fang doch vorne an, das reicht meistens schon.

    black_skorpi
    ich würde aber

    [autoit]

    If $b = -1 Then

    [/autoit]


    schreiben.
    Und außerdem will er die Datei per FileOpenDialog suchen, und nicht den Dateinamen eingeben und dann hoffen, dass es den gibt.

  • sry ^^ übersehen xD mom mach ich schnell ;)
    Edit1:

    Datei via OpenDialog suchen
    [autoit]

    $a = FileOpenDialog("Auszuführende Datei Wählen", @MyDocumentsDir, "Ausführungsdateien (*.exe)")
    $b = FileFindFirstFile(@MyDocumentsDir & $a)
    If not $b = 1 Then
    MsgBox(64, "Error", "Datei existiert nicht!")
    Exit
    EndIf
    $c = FileGetLongName($a) ; Wird nicht mehr gebraucht, nur zur sicherheit ;)
    If not FileExists($c) Then
    MsgBox(64, $c, "Datei konnte nicht gefunden werden!") ; Falls sich irgentetwas geändert hat
    Exit
    EndIf
    Run($c)

    [/autoit]


    man sieht, das das auch ganz einfach gehen kann ;)

  • Ich habe wieder ein kleineres Problem, ich möchte nun den PFAD der in Input 1 steht in eine ini.datei schreiben, aber iwie schreibt er bei mir nur zahlen rein, die control Id um genau zu sein.

    Ich hoffe ihr könnt mir sagen wie ich das machen soll.

    Code
    Func path_of_fil1 ()
    $aFile = _WinAPI_GetOpenFileName("")
    $filewrite = GUICtrlSetData ($Input1,$aFile[1] & "\" & $aFile[2])
    sleep (500)
    IniWrite(@ScriptDir & "\data.ini", "filepath1", "filepath1", "" & $Input1)
    EndFunc
  • Oh man, ich ärger mich immer so -.- das die lösung meist so leicht ist und ich einfach nicht drauf komme.

    Danke dir und sry für meine dummen fragen.

    Zitat

    Und wozu ist der Leerstring da davor?

    Muss ich noch wegmachen, habe ich vergessen.