Nein, Problem wird hier die Dateiendung (lnk) sein. Was gibt er denn bei Run aus? Versuch die Verknüpfung mal mit der rundll32.exe (PrinterDialog usw.) zu öffnen, wenn das möglich ist.
Beiträge von teh_hahn
-
-
Array $ports_A wird voher nicht initalisiert / es wird nicht vergrößert!
-
Ja, dann läuft doch alles. Dann liegt es nur am ShellExecute. Versuch mal:
[autoit]ShellExecute($s_path & "\" & $as_files[$i], "", "", "open")
[/autoit]oder mit Run!
EDIT: Jetzt sag nicht, da sind Leerzeichen in deinem Pfad!
-
Hi,
sorry das ich schon wieder meckern muss, aber:
1. Bitte Spoiler-AutoIt Tags benutzen!
2. Bitte Code posten, der zumindest durch den Compiler läuft!Hier mal ein funktionierendes Beispiel:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>main()
[/autoit] [autoit][/autoit] [autoit]Func main()
[/autoit] [autoit][/autoit] [autoit]
Local $h_quitbt = 0, $h_stylebt = 0GUICreate("TestGUI", 100, 100)
[/autoit] [autoit][/autoit] [autoit]$h_quitbt = GUICtrlCreateButton("Quit", 10, 10, 55, 25)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor(-1, 0xF4F4F0)
GUICtrlSetColor(-1, 0x000080)
$h_stylebt = GUICtrlCreateButton("Style", 10, 50, 55, 25)GUISetBkColor(0x000080)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()While 1
[/autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $h_quitbt
Exit
Case $h_stylebt
GUISetStyle($WS_POPUPWINDOW)
EndSwitch
WEnd
EndFunc ;==>main -
Hi,
mit FilePattern halt die Endung: ("*.lnk")Nim mal folgendes Skript und passe in der Zeile 79 den Pfad einmal fix an. Es funktioniert bei mir zu 100% mit Verknüpfungen:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit]
#include <Array.au3>
#include <File.au3>
#include <GUIConstants.au3>
main()
Func OnAutoItStart()
Opt("GUICoordMode", 2)
Opt("MustDeclareVars", 1)
EndFunc ;==>OnAutoItStart
Func main()
Local $ah_ogbts[2], $as_files = 0
Local $h_zensbt = 0, $h_filemenu = 0, $h_exitmitem = 0, $h_msg = 0
Local $s_path = "", $s_ogtext = ""
Local $j = 1, $i_tmpog = 0, $i_og = 0
GUICreate("Stockwerk", 320, 240)
GUISetCoord(10, -20, 100, 20)
For $i = 1 To 6
ReDim $ah_ogbts[$j + 1]
$ah_ogbts[$j] = GUICtrlCreateButton("Obergeschoss " & $i, -1, 10)
$j += 1
Next
$ah_ogbts[0] = $j - 1
$h_zensbt = GUICtrlCreateButton("&Zens", -1, 10)
GUICtrlSetState(-1, $GUI_DISABLE)
$h_filemenu = GUICtrlCreateMenu("&File")
$h_exitmitem = GUICtrlCreateMenuItem("E&xit", $h_filemenu)
GUISetState()
While 1
$h_msg = GUIGetMsg()
Switch $h_msg
Case $GUI_EVENT_CLOSE, $h_exitmitem
Exit
Case $h_zensbt
GUISetState(@SW_DISABLE)
SplashTextOn("NOTICE", "Please wait...", 120, 60)
$as_files = _FileListToArray($s_path, ("*.lnk"), 1)
If @error = 1 Then
MsgBox(16 + 262144, "ERROR", $s_path & " not found or invalid!")
Exit (1)
ElseIf @error = 4 Then
MsgBox(16 + 262144, "ERROR", "No file(s) found in " & $s_path & "!")
Exit (2)
EndIf
SplashOff()
GUISetState(@SW_ENABLE)
For $i = 1 To $as_files[0]
ShellExecute($s_path & "\" & $as_files[$i])
Next
Switch $i_og
Case 1
$s_ogtext = "ers"
Case 2
$s_ogtext = "zwei"
Case 3
$s_ogtext = "drit"
Case 4
$s_ogtext = "vier"
Case 5
$s_ogtext = "fünf"
Case 6
$s_ogtext = "sechs"
EndSwitch
MsgBox(64, "Zens Drucker", "Die Drucker des " & $s_ogtext & "ten Stockes an der Zens wurden eingerichtet.")
Exit
EndSwitch
$i_tmpog = _ArraySearch($ah_ogbts, $h_msg)
If $i_tmpog <> -1 Then
$i_og = $i_tmpog
$s_path = "\\Delphi\NETLOGON"
For $i = 1 To $ah_ogbts[0]
GUICtrlSetState($ah_ogbts[$i], $GUI_DISABLE)
Next
GUICtrlSetState($h_zensbt, $GUI_ENABLE)
GUICtrlCreatePic(@ScriptDir & "\system\Zens.bmp", 120, 10, 200, 240) ;~ To-Do: An aktuelle GUI-Begebenheiten anpassen!
EndIf
WEnd
EndFunc ;==>main
Func OnAutoItExit()
GUIDelete()
EndFunc ;==>OnAutoItExit
Deine ErrorMeldung: (Meldung: parameter inkorrekt oder so) kommt in meinem Skript überhaupt nicht vor!
Teste bitte einmal anhand meines Skriptes und baue das dann um. Bei mir funzt es wirklich.PS: Halte dich nicht für verrückt!
-
Zudem sind es keine GUI-Probleme, sondern Logik-Probleme!
Schau, wenn Du überhaupt nicht mehr weiter kommst, unter der Foren-Suche nach (Taschenrechner gibt es wie Sand am Meer!). -
Hi,
also meine Version funktioniert 100%. Bitte überprüfe noch einmal folgendes:
1. Ist ein Pfad z.B. wirklich: \\Zens\Zens\Group\Public\Printers\1Obergeschoss\Zens? Versuch den Pfad mal (ohne Verbindungen zum Host Zens zu haben) genau so bei Start-Ausführen einzutippen. Kommt dann eine Verbindung zustande?
2. Brauchst Du wirklich keine Anmeldung an den Host?
3. Ist das FilePattern korrekt.Wie gesagt, bei mir funktioniert es einwandfrei! (Auch mit ShellExecute!)
-
lol, wie bitte?! Was ist das denn für ein Testverfahren? Oder hab ich Dich nur falsch verstanden? Über eins müssen wir uns im Klaren sein: Du kannst nicht das Skript anstarten und jedesmal nachdem es durchgelaufen ist, schauen wie lange es gedauert hat. Da wird meine Version immer langsamer sein, da sie aus einer INI-Datei liest! Du musst vielmehr einen Timer vor dem Vergleichen starten und ihn danach wieder stoppen, also:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
main()Func main()
[/autoit] [autoit][/autoit] [autoit]
Local $ai_ports[2]
Local $j = 1, $n_timer = 0
Local $s_tmpini = "", $s_fileline = ""
Local $h_file = -1For $i = 1 To 15
[/autoit] [autoit][/autoit] [autoit]
$s_tmpini = IniRead(@ScriptDir & "\port.ini", "Ports", "Port" & $i, "")
If $s_tmpini <> "" Then
ReDim $ai_ports[$j + 1]
$ai_ports[$j] = $s_tmpini
$j += 1
EndIf
Next
$ai_ports[0] = $j - 1$h_file = FileOpen(@ScriptDir & "\scan.txt", 0)
[/autoit] [autoit][/autoit] [autoit]$n_timer = TimerInit()
[/autoit] [autoit][/autoit] [autoit]
While 1
$s_fileline = FileReadLine($h_file)
If @error Then
FileClose($h_file)
FileDelete(@ScriptDir & "\default.txt") ;~ Kann dies hier hin?
ExitLoop
EndIfFor $i = 1 To $ai_ports[0]
[/autoit]
If StringInStr($s_fileline, $ai_ports[$i]) Then FileWriteLine($ai_ports[$i] & ".txt", $s_fileline & @CRLF)
Next
WEnd
MsgBox(64, "TimerDebug", Round((TimerDiff($n_timer) / 1000), 4) & " Sekunden!")
EndFunc ;==>main
Mir scheint, als wolltest Du, dass das Skript immer läuft. Dazu müsste es aber natürlich leicht modifiziert werden...
Also, mach mal mehrere Durchläufe mit v1 und danach mit v2 (beides mit Timern!). Achte dabei darauf, dass die zu vergleichende Datei identisch ist und die Anzahl der Ports ebenfalls.
Da dürften in Bezug auf das Vergleichen kaum Unterschiede zu verspüren sein!g8
-
Hi,
naja, das Auslesen aus der INI-Datei dauert eben und nimmt Zeit in Anspruch. Wie liest Du denn die Kb/s aus? Achso, Du solltest den Default-Wert beim IniRead auf "" setzten und noch dagegen prüfen:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
main()Func main()
[/autoit] [autoit][/autoit] [autoit]
Local $ai_ports[2]
Local $j = 1
Local $s_tmpini = "", $s_fileline = ""
Local $h_file = -1For $i = 1 To 15
[/autoit] [autoit][/autoit] [autoit]
$s_tmpini = IniRead(@ScriptDir & "\port.ini", "Ports", "Port" & $i, "")
If $s_tmpini <> "" Then
ReDim $ai_ports[$j + 1]
$ai_ports[$j] = $s_tmpini
$j += 1
EndIf
Next
$ai_ports[0] = $j - 1$h_file = FileOpen(@ScriptDir & "\scan.txt", 0)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$s_fileline = FileReadLine($h_file)
If @error Then
FileClose($h_file)
ExitLoop
EndIfFor $i = 1 To $ai_ports[0]
[/autoit] [autoit][/autoit] [autoit]
If StringInStr($s_fileline, $ai_ports[$i]) Then FileWriteLine($ai_ports[$i] & ".txt", $s_fileline & @CRLF)
NextFileDelete(@ScriptDir & "\default.txt")
[/autoit]
WEnd
EndFunc ;==>mainAlso viel eleganter geht es eigentlich nicht mehr!
-
Hi,
versuch dies:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]main()
[/autoit] [autoit][/autoit] [autoit]Func main()
[/autoit] [autoit][/autoit] [autoit]
Local $ai_ports[2]
Local $j = 1
Local $s_fileline = ""
Local $h_file = -1For $i = 1 To 15
[/autoit] [autoit][/autoit] [autoit]
ReDim $ai_ports[$j + 1]
$ai_ports[$j] = IniRead(@ScriptDir & "\port.ini", "Ports", "Port" & $i, "default")
$j += 1
Next
$ai_ports[0] = $j - 1$h_file = FileOpen(@ScriptDir & "\scan.txt", 0)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$s_fileline = FileReadLine($h_file)
If @error Then
FileClose($h_file)
ExitLoop
EndIfFor $i = 1 To $ai_ports[0]
[/autoit] [autoit][/autoit] [autoit]
If StringInStr($s_fileline, $ai_ports[$i]) Then FileWriteLine($ai_ports[$i] & ".txt", $s_fileline & @CRLF)
NextFileDelete(@ScriptDir & "\default.txt")
[/autoit]
WEnd
EndFunc ;==>main -
Mhh, die UDF _ClipPutFile sagt:
ZitatTo Retrive a list of Files stored in the Clipboard use ClipGet().
Also müsste es gehen, ansonsten DLL-Calls! -
Ja, das stimmt schon. Dann halt "unnötig". Was mich am OnEvent einfach nervt, ist dass Funktionen, die durch ein Control aufgerufen werden, keine Parameter im Funktionskopf enthalten dürfen (es sei denn man bastelt sich eine Hilfsfunktion, Variablen bleiben aber immer Global).
Ich gebe Dir aber Recht, das bei komplexen Skripten der OnEvent-Modus effizienter ist (speziell bei "Threads", die selbst in der main-While laufen müssen...)!EDIT: Das da oben sollte man natürlich auch in Funktionen kapseln. Hatte ich aber eben kein Bock zu und auf Globals steh ich wie gesagt überhaupt nicht...
-
Jo, ansonsten Send("!{PRINTSCREEN}") und dann ClipGet() und das Ganze als Grafik in einer Popup-GUI einbauen!
-
Hi,
mann, mann mann. Hab mich eben mal ran gesetzt und schnell folgendes gebastelt:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
#Include <Array.au3>
#include <File.au3>
#include <GUIConstants.au3>main()
[/autoit] [autoit][/autoit] [autoit]Func OnAutoItStart()
[/autoit] [autoit][/autoit] [autoit]
Opt("GUICoordMode", 2)
Opt("MustDeclareVars", 1)
EndFunc ;==>OnAutoItStartFunc main()
[/autoit] [autoit][/autoit] [autoit]
Local $ah_ogbts[2], $as_files = 0
Local $h_zensbt = 0, $h_filemenu = 0, $h_exitmitem = 0, $h_msg = 0
Local $s_path = "", $s_ogtext = ""
Local $j = 1, $i_tmpog = 0, $i_og = 0GUICreate("Stockwerk", 320, 240)
[/autoit] [autoit][/autoit] [autoit]
GUISetCoord(10, -20, 100, 20)
For $i = 1 To 6
ReDim $ah_ogbts[$j + 1]
$ah_ogbts[$j] = GUICtrlCreateButton("Obergeschoss " & $i, -1, 10)
$j += 1
Next
$ah_ogbts[0] = $j - 1$h_zensbt = GUICtrlCreateButton("&Zens", -1, 10)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState(-1, $GUI_DISABLE)
$h_filemenu = GUICtrlCreateMenu("&File")
$h_exitmitem = GUICtrlCreateMenuItem("E&xit", $h_filemenu)
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
$h_msg = GUIGetMsg()
Switch $h_msg
Case $GUI_EVENT_CLOSE, $h_exitmitem
Exit
Case $h_zensbt
GUISetState(@SW_DISABLE)
SplashTextOn("NOTICE", "Please wait...", 120, 60)
$as_files = _FileListToArray($s_path, ("*.exe"), 1) ;~ To-Do: Pattern an Extension anpassen!
If @error = 1 Then
MsgBox(16 + 262144, "ERROR", $s_path & " not found or invalid!")
Exit (1)
ElseIf @error = 4 Then
MsgBox(16 + 262144, "ERROR", "No file(s) found in " & $s_path & "!")
Exit (2)
EndIf
SplashOff()
GUISetState(@SW_ENABLE)For $i = 1 To $as_files[0]
[/autoit] [autoit][/autoit] [autoit]
ShellExecute($s_path & "\" & $as_files[$i])
NextSwitch $i_og
[/autoit] [autoit][/autoit] [autoit]
Case 1
$s_ogtext = "ers"
Case 2
$s_ogtext = "zwei"
Case 3
$s_ogtext = "drit"
Case 4
$s_ogtext = "vier"
Case 5
$s_ogtext = "fünf"
Case 6
$s_ogtext = "sechs"
EndSwitchMsgBox(64, "Zens Drucker", "Die Drucker des " & $s_ogtext & "ten Stockes an der Zens wurden eingerichtet.")
[/autoit] [autoit][/autoit] [autoit]
Exit
EndSwitch$i_tmpog = _ArraySearch($ah_ogbts, $h_msg)
[/autoit] [autoit][/autoit] [autoit]
If $i_tmpog <> -1 Then
$i_og = $i_tmpog
$s_path = "\\Zens\Zens\Group\Public\Printers\" & $i_og & "Obergeschoss\Zens"
For $i = 1 To $ah_ogbts[0]
GUICtrlSetState($ah_ogbts[$i], $GUI_DISABLE)
Next
GUICtrlSetState($h_zensbt, $GUI_ENABLE)
GUICtrlCreatePic(@ScriptDir & "\system\Zens.bmp", 120, 10, 200, 240) ;~ To-Do: An aktuelle GUI-Begebenheiten anpassen!
EndIf
WEnd
EndFunc ;==>mainFunc OnAutoItExit()
[/autoit]
GUIDelete()
EndFunc ;==>OnAutoItExitCHANGES:
1. GUI Message-Loop Modus (OnEvent ist völlig unangebracht bei den paar Controls!)
2. Obergeschoss-Buttons werden in einer Schleife generiert.
3. Es ist nur eine GUI notwendig. Sobald ein Obergeschoss ausgewählt wurde, wird der Zend-Button auf enabled gesetzt und die Obergeschoss-Buttons auf disabled.
usw...Worauf ich bei Deinem Quellcode gar nicht klar komme ist folgendes:
$Zens wird dreimal definiert, es befinden sich drei Zens-Funktionen in deinem Skript! WTF?!? Sind wird hier OO und überladen Funktionen oder was? DAS WIRD NIEMALS FUNKTIONIEREN!!!
Schau Dir mal den String des Pfades an! Sicher das der stimmt? Jetzt hast Du zumindest mal eine Fehlermeldung als Rückgabe...Ich halte das Skript aber immer noch für relativ gehaltlos...
-
Gut. Zwei Möglichkeiten:
1. Kompletten Source-Code posten.
2. Weiter probieren...Falls 1. Schau ich heute nachmittag mal drüber!
-
Glaube ich nicht. Ausserdem wäre es nicht Autoit, sondern nur eine UDF. mach mal _ArrayDisplay zum debuggen und überprüf den Pfad erneut. Im Beispiel funktioniert es auch, könnte natürlich sein, dass er sich am UNC-Pfad verschluckt. Mapst du den Pfad vorher auch?
-
Hi,
Nettes Tool, hatte auch schon mal so was geschrieben (bloß ohne GUI). Ist bloß für den Anwendungszweck etwas überflüssig. Ich verweise dabei auf das Programm CryptLoad (siehe google...)! -
Hi,
[autoit]
das bedeutet, dass die Zeile:$Array = _FileListToArray ("\\zzzzzzz\zzzzzz\Group\Public\Printers\" & $n & "Obergeschoss\" & $ort,(""),1)
[/autoit]kein Array zurück gegeben hat, d.h. in dem Verzeichnis befinden sich keine Dateien. Danach einmal mit
[autoit]IsArray($Array)
[/autoit]prüfen und danach die For-Schleife...
-
Hi,
ja, der Index0 enthält die erste Datei. Du suchst aber sowohl nach Dateien als auch nach Ordnern (*.). Ausserdem solltest Du Dir noch den dritten Parameter der Funktion anschauen!
Hilfe hilft!!!Spoiler anzeigen
[autoit]#Include <File.au3>
[/autoit]
#Include <Array.au3>
$FileList=_FileListToArray(@DesktopDir)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
_ArrayDisplay($FileList,"$FileList") -
Hi,
hier mal das fertige Skript mit pees Überprüfung:
Spoiler anzeigen
[autoit]#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
main()
Func OnAutoItStart()
Opt("MustDeclareVars", 1)
EndFunc ;==>OnAutoItStart
Func main()
Local $h_bruttoinp = -1, $h_mwstinp = -1, $h_ausgabelbl = -1, $h_rechnenbt = -1, $h_closebt = -1
Local $n_brutto = "", $n_mwst = ""
GUICreate("BNR v 1.0", 172, 263, 193, 117)
$h_bruttoinp = GUICtrlCreateInput("", 16, 48, 137, 21)
$h_mwstinp = GUICtrlCreateInput("19", 16, 112, 137, 21, $ES_NUMBER)
$h_ausgabelbl = GUICtrlCreateLabel("", 16, 176, 136, 17)
$h_rechnenbt = GUICtrlCreateButton("&Rechnen", 8, 208, 65, 25, 0)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$h_closebt = GUICtrlCreateButton("&Beenden", 88, 208, 65, 25, 0)
GUICtrlCreateLabel("Brutto-Betrag :", 16, 24, 72, 17)
GUICtrlCreateLabel("Mwst-Satz :", 16, 88, 59, 17)
GUICtrlCreateLabel("Netto-Betrag :", 16, 152, 70, 17)
GUICtrlCreateLabel("Brutto - Netto - Rechner", 24, 240, 119, 18)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlSetColor(-1, 0x808080)
GUISetState()
While 1
Switch GUIGetMsg()
Case $h_rechnenbt
$n_brutto = GUICtrlRead($h_bruttoinp)
$n_mwst = GUICtrlRead($h_mwstinp)
If Not _IsGermanCurrency($n_brutto) Then
MsgBox(64, $n_brutto, "Nur Zahlen und statt Punkt das Komma verwenden!" & @CR & "Bitte überprüfen Sie Ihre Eingaben!")
ElseIf $n_mwst <> 7 And $n_mwst <> 16 And $n_mwst <> 0 And $n_mwst <> 19 Then
MsgBox(64, $n_mwst, "Die MwSt kann nur 0, 7, 16, oder 19 Prozent betragen," & @CR & "Bitte überprüfen Sie Ihre Eingaben!")
Else
GUICtrlSetData($h_ausgabelbl, StringReplace(Round(StringReplace($n_brutto, ",", ".") / (100 + $n_mwst) * $n_mwst, 2), ".", ","))
EndIf
Case $GUI_EVENT_CLOSE, $h_closebt
Exit
EndSwitch
WEnd
EndFunc ;==>main;~ by peethebee
[/autoit]
Func _IsGermanCurrency(Const $S_TEXT)
Return (StringRegExp($S_TEXT, "^\d+(,\d{1,2})?$", 0))
EndFunc ;==>_IsGermanCurrencyZur Erklärung:
1. Es muss eine Kommazahl oder eine Zahl ohne Nachkommastellen eingegeben werden.
2. Das Komma wird ersetzt durch einen Punkt, die Berechnung wird durchgeführt und beim Ergebnis wird der Punkt wieder durch das Komma ersetzt. (Macht meiner Meinung nach am meisten Sinn.