Moin,
ich würd noch ein Sleep einbauen, sonst frisst dein kleines Script einiges an CPU Ressourcen.
While 1
WinWaitActive("CRAZY MACHINES II","Bitte legen Sie die CRAZY MACHINES II - CD ein!")
Send("{SPACE}")
Sleep(50)
WEnd
Gruß
Prajoss
Moin,
ich würd noch ein Sleep einbauen, sonst frisst dein kleines Script einiges an CPU Ressourcen.
While 1
WinWaitActive("CRAZY MACHINES II","Bitte legen Sie die CRAZY MACHINES II - CD ein!")
Send("{SPACE}")
Sleep(50)
WEnd
Gruß
Prajoss
nein diese Parameter sind die, die das Programm selbst kennt (z.b. /silence /qn usw).
du musst aber keine Angeben, das ist nur Optional.
danke prajoss
zu dem rest, ich sehe das problem eher darin das immer wenn ich ne Win funktion aufrufe jedes mal ein fester Parameter eingetragen werden muss. Das heißt ich kann nicht dynamisch arbeiten aber kann natürlich acuh sein das ich was übersehen habe?
Evtl ist es doch besser die Programme extra zu öffnen und schließen und dann copy&paste
Ich dachte du wüsstest welche Parameter du an die Anwendung übergeben musst.
Ansonsten versteh ich dein Problem dann nicht ganz/richtig.
Gruß
Prajoss
Ich möchte jetzt keinen Streit vom Zaune brechen
Bei den getesteten Systemen wurde das Script lokal ausgeführt.
Wollte den Threadersteller nur vor dem "möglichen" Problem warnen.
Gruß
Prajoss
Das Problem tritt auf, wenn man keine Adminrechte hat.
Edit:
Gerade nochmal getestet.
Win 7 32 Bit, Benutzer hat keine Adminrechte, UAC ist aus.
Programm fängt an in ne Art Schleife zu gehen, man kann das Programm nichtmal effektiv im Taskmanager abschießen,
weil er andauernd den Fokus des Controls im taskmgr verliert. und im Tray ist noch kein Icon.
Es ist kein schönes Problem, wurde auch schon öfters im englischen Forum angesprochen.
Vllt ists ja auch behoben mit einer neuen Version von Autoit, aber das hab ich noch nicht mitbekommen.
Gruß
Prajoss
Achtung mit #RequireAdmin
Wenn du es auf nem Windows Vista/7 ausführt, auf dem die Benutzerkontensteuerung deaktiviert ist, wird dein
Script ganz böse aufs Gesicht fallen.
Der versucht nämlich diese dazu aufzufordern im Adminrechte zu geben, da die UAC aber nicht aktiv ist, wartet er.
Rate mal wie lange *g*
Gruß
Prajoss
Moin Tobitron,
jetzt versteh ich dein Problem nicht genau.
Du kannst doch bei Shellexute auch die Programmparameter übergeben.
ShellExecute ( "filename" [, "parameters" [, "workingdir" [, "verb" [, showflag]]]] )
Wenn du unterschiedliche Parameter zu den Programmen hast, dann lager die doch schon vorher in ein Array aus und mach das etwa so:
Dim $array[5][2]
[/autoit][autoit][/autoit][autoit]$array[0][0] = "Programmpfad1"
$array[0][1] = "Parameter für Programm 1"
$array[1][0] = "Programmpfad2"
$array[1][1] = "Parameter für Programm 2"
$array[2][0] = "Programmpfad3"
$array[2][1] = "Parameter für Programm 3"
$array[3][0] = "Programmpfad4"
$array[3][1] = "Parameter für Programm 4"
$array[4][0] = "Programmpfad5"
$array[4][1] = "Parameter für Programm 5"
$array[5][0] = "Programmpfad6"
$array[5][1] = "Parameter für Programm 6"
For $i = 0 To UBound($array) - 1
ShellExecute($array[$i][0], $array[$i][1])
;Sonstiges
Next
Genauso könntest du auch noch ein Drittes Feld hinzufügen, in dem der Prozessname steht, also:
[autoit]Dim $array[5][3]
[/autoit][autoit][/autoit][autoit]$array[0][0] = "Programmpfad1"
$array[0][1] = "Parameter für Programm 1"
$array[0][2] = "Prozessname1"
Wichtig bei Arrays ist immer, dass der Index bei 0 anfängt (das verwirrt manchmal^^)
Gruß
Prajoss
Moin,
schau dir einfach die _Date Funktionen an, z.b. _Date_Time_GetSystemTime (Hiermit erhält man die Systemzeit und das Systemdatum).
Mit den anderen _Date Funktionen kann man das Datum aufbröseln und weiß so, ob es Sa, So oder was auch immer ist.
Gruß
Prajoss
Moin,
also wenn dann so:
[autoit]
For $i = UBound($programs) - 1 to 0 Step -1
Ubound($array) gibt als Rückgabewert die Anzahl der insgesamten Elemente.
Beispiel:
[autoit]Dim $array[5]
[/autoit]erzeugt ein Array mit 5 Elementen. Diese sind:
[autoit]$array[0], $array[1], $array[2], $array[3], $array[4]
[/autoit](5 an der Zahl).
Wenn du jetzt nur Ubound($array) nimmst, dann würde man als Index die 5 haben.
Dieses Element existiert aber nicht und das Programm würde abstürzen.
Deswegen ist die richtige Anwendung
Ubound($array) - 1
[/autoit]Gruß
Prajoss
Hi,
statt dem Sleep würde ich das so machen:
ShellExecute("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
WinWaitActive("Firefox") ; musst sehen wie der Titel ist. Nimm das Tool "AutoIt Windows Info"
WinClose("Firefox")
oder falls du nach dem Prozess gehen willst:
ShellExecute("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
While ProcessExists("firefox.exe") = 0
Sleep(30)
WEnd
ProcessClose("firefox.exe")
Gruß
Prajoss
Edit: Vorschaufunktion ist ganz praktisch, muss man nicht die Fehler nach dem Post ausbessern
Moin,
das Probleme ist bei mir selbst aufgetreten vor ein paar Wochen und nach suchen und Hilfe ausm Forum
sieht mein Skript so aus:
Bild einlesen (leicht abgeändert):
$pic = FileOpenDialog("Bild auswählen", @ScriptDir & "\Bilder", "Bilder (*.jpg;*.bmp;*.png)", 1 + 2)
If FileExists($pic) Then
$h_pic = FileOpen($pic, 16)
$v_pic = FileRead($h_pic)
EndIf
_SQLite_Open($h_db)
_SQLite_Exec(-1, "Insert Into " & $tabelle & " values (" & _SQLite_Encode($v_pic) & ");")
_SQLite_Close()
Und um das Bild wieder zu laden:
_SQLite_Query(-1,"SELECT Bild FROM " & $tabelle & " WHERE name='" & $name & "';", $hQuery)
[/autoit] [autoit][/autoit] [autoit]_SQLite_FetchData($hQuery, $a_row, 1)
[/autoit] [autoit][/autoit] [autoit]$Bild_Daten = $a_row[0]
[/autoit] [autoit][/autoit] [autoit]_SQLite_QueryFinalize ($hQuery)
[/autoit] [autoit][/autoit] [autoit]_SQLite_Close()
[/autoit] [autoit][/autoit] [autoit]$Bild_pfad = _Erzeuge_Bild_Tmp($Bild_Daten)
[/autoit] [autoit][/autoit] [autoit]If FileExists($Bild_pfad) Then
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
Local $hImage = _GDIPlus_ImageLoadFromFile($Bild_pfad)
Local $iX = _GDIPlus_ImageGetWidth($hImage)
Local $iY = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
EndIf
$bild = GUICtrlCreatePic($Bild_pfad, 370, 70, $iX, $iY)
[/autoit]Hier die Funktion um Temporär das Bild auszulagern:
Func _Erzeuge_Bild_Tmp($sHex)
Local $sFile = @TempDir & "\sqldbtmp.jpg"
Local $hFileOut = FileOpen($sFile, 2)
FileWrite($hFileOut, $sHex)
FileClose($hFileOut)
Return $sFile
EndFunc
Gruß
Prajoss
Hi,
um sowas zu vermeiden nutze ich folgenden Befehl:
[autoit]DllCall("Psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
[/autoit]Diesen einfach am Ende der Schleife setzten und gut is
Gruß
Prajoss
Hi,
du solltest vllt trotzdem den Sleep von 1 auf 50 oder 100 stellen, sonst lastest du dein System aus.
Gruß
Prajoss
Diese Änderung gefiehl mir auch nicht beim Umstieg auf Win 7.
Du kannst hier mal reinsehen:
Systemsteuerung\Alle Systemsteuerungselemente\Standardprogramme
(Kannst den Link genau wie er da steht in der Windows Explorer Adressleiste eingeben).
Vllt wirst du fündig.
Gruß
Prajoss
Manchmal hab ich irgendwie nen Brain-Lag
Hab wohl versucht zu kompliziert zu denken
Danke
Servus Leute,
wieder ein kleines Problem welches mir Kopfschmerzen bereitet.
Ich habe mehrere Comboboxen in meinem Script, welche ein Event auslösen wenn man etwas daraus auswählt.
Manuell funktionert es auch sehr gut, nur benötige ich zusätzlich noch eine Funktion welche das Event auslöst.
Anbei ein angepasstes Beispielskript. Über die Taste ESC wird mit dem Befehl GUICtrlComboBox_SetCurSel ein
Eintrag ausgewählt, dummerweise triggert dieser nicht das Event! Gibt es da ne andere möglichkeit, evtl. über
GuiSendMsg?
Script:
#include <GUIComboBox.au3>
#include <GuiConstantsEx.au3>
Opt('MustDeclareVars', 1)
Opt('GUIOnEventMode', 1)
$Debug_CB = False ; Check ClassName being passed to ComboBox/ComboBoxEx functions, set to True and use a handle to another control to see it work
[/autoit] [autoit][/autoit] [autoit]Global $hCombo
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}", "event")
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]; Create GUI
GUICreate("ComboBox Set Cur Sel", 400, 296)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
$hCombo = GUICtrlCreateCombo("", 2, 2, 396, 296)
GUICtrlSetOnEvent(-1, "test")
GUISetState()
; Add files
_GUICtrlComboBox_BeginUpdate($hCombo)
_GUICtrlComboBox_AddDir($hCombo, @WindowsDir & "\*.exe")
_GUICtrlComboBox_EndUpdate($hCombo)
; Select Item
_GUICtrlComboBox_SetCurSel($hCombo, 2)
; Loop until user exits
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]Sleep(50)
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Main
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func test()
MsgBox(0, "...", GUICtrlRead($hCombo))
EndFunc
Func event()
_GUICtrlComboBox_SetCurSel($hCombo, 1)
EndFunc
Func _exit()
Exit
EndFunc
Gruß
Prajoss
Passt,
danke dir
Servus,
bin mir grad nicht sicher ob ich Zeit finde, aber ist eine Woche nicht zu wenig?
Gruß
Prajoss
Servus Leute,
Ich Habe hier ein kleines "Schönheitsproblem" mit einer GUI. Diese möchte ich dynamisch vergrößern/verkleinern.
Das klappt zwar auch, allerdings sieht das eher merkwürdig aus (einfach mal Skript starten und die Buttons nutzen)
#include <Array.au3>
#include <ArrayMore.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
Opt("GUIResizeMode",$GUI_DOCKALL)
Opt("GUIOnEventMode", 0)
main()
[/autoit] [autoit][/autoit] [autoit]Func main()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Local $column[1], $attrib[1], $result[1][2], $gui
Local $height = 50, $gheight = 140
GUISetState(@SW_HIDE, $gui)
[/autoit] [autoit][/autoit] [autoit]$child = GUICreate("Neue Tabelle", 380, 140, -1, -1, BitOr($GUI_SS_DEFAULT_GUI, $WS_CHILD), -1, $gui)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("Tabellenname:", 15, 15, 80, 20)
[/autoit] [autoit][/autoit] [autoit]$tabellenname = GUICtrlCreateInput("", 110, 15, 120, 20)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("Spaltennamen:", 15, 50, 80, 20)
[/autoit] [autoit][/autoit] [autoit]$column[0] = GUICtrlCreateInput("", 110, 50, 120, 20)
[/autoit] [autoit][/autoit] [autoit]$attrib[0] = GUICtrlCreateCombo("", 245, 50, 120, 20)
GUICtrlSetData(-1, "Text|Int|Real|Blub")
$plus = GUICtrlCreateButton("", 260, 10, 30, 30, $BS_ICON)
GUICtrlSetImage(-1, "shell32.dll", 5)
$minus = GUICtrlCreateButton("", 310, 10, 30, 30, $BS_ICON)
GUICtrlSetImage(-1, "shell32.dll", 32)
$anlegen = GUICtrlCreateButton("Anlegen", 15, 80, 80, 20)
[/autoit] [autoit][/autoit] [autoit]$abbrechen = GUICtrlCreateButton("Abbrechen", 15, 110, 80, 20)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $child)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]$msg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $abbrechen
GUIDelete($child)
GUISetState(@SW_SHOW, $gui)
Return 0
Case $msg = $plus
_ArrayAdd($column, "")
_ArrayAdd($attrib, "")
$column[UBound($column)-1] = GUICtrlCreateInput("", 110, $height + (UBound($column) - 1)*30, 120, 20)
$attrib[UBound($attrib)-1] = GUICtrlCreateCombo("", 245, $height + (UBound($attrib) - 1)*30, 120, 20)
GUICtrlSetData(-1, "Text|Int|Real|Blub")
WinMove("Neue Tabelle", "", Default, Default, 386, $gheight + (UBound($column) - 1)*30)
Case $msg = $minus
If UBound($column) > 1 Then
GUICtrlDelete($column[UBound($column) - 1])
GUICtrlDelete($attrib[UBound($attrib) - 1])
_ArrayDelete($column, UBound($column))
_ArrayDelete($attrib, UBound($attrib))
WinMove("Neue Tabelle", "", Default, Default, 386, $gheight + (UBound($column)*30))
EndIf
Case $msg = $anlegen
For $i = 0 To Ubound($column) -1
If GUICtrlRead($column[$i]) = "" Then ExitLoop
$result[$i][0] = StringReplace(GUICtrlRead($column[$i]), " ", "")
$result[$i][1] = GUICtrlRead($attrib[$i])
_Array2DAdd($result,"")
Next
$result[UBound($result,1)-1][0] = GUICtrlRead($tabellenname)
GUIDelete($child)
GUISetState(@SW_SHOW, $gui)
Return $result
EndSelect
[/autoit] [autoit][/autoit] [autoit]Sleep(30)
[/autoit] [autoit][/autoit] [autoit]DllCall("Psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit]Ich danke für die Hilfe.
Gruß
Prajoss
ps: weiß grad jemand aus dem Kopf wie man Ressourcen(Bild-Dateien) in Bit Code umwandelt um diese direkt im Script einzubinden?