Auf die schnelle sehe ich nur, dass FileOpen und _FileCountLines falsch verwendet sind. _FileCountLines verlangt immer den Pfad und nicht das AutoIt-interne Handle.
Beiträge von funkey
-
-
Davon gibt es tausende Funktionen. Einige mit bat-Datei einige ohne, deine hat jetzt einen Loop mit drinnen und kann mehrere Dateien löschen.
Die kann man dann ja auch direkt mit FileDelete löschen und man hat eine Rückmeldung, ob es funktioniert hat.@TempDir hat keinen abschließenden Backslash, also wird die temporäre Datei falsch angelegt.
Das Array-Include braucht man auch nicht, man kann ja einfach bei 1 anfangen zu zählen, oder bei StringSplit noch einen Parameter hinzufügen.
Und sehe ich das richtig, das wenn die Datei gesperrt ist (sich nicht löschen lässt), dass dann die Batch-Datei hängt.Zu meiner Verteidigung: Getestet habe ich nichts.

-
Herzlich Willkommen hier im Forum!
Bei deinen Vorkenntnissen wirst du schnell gute Erfolge mit AutoIt erzielen, und auch bald anderen damit und bei anderen Dingen helfen können.
Auf gute Zusammenarbeit. -
Ich habe die Fage so verstanden, dass ich sagen muss das es nicht sooo einfach funktioniert.
Hier mein Lösungsvorschlag
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>Global $hGui = GUICreate("ComboBox with checkboxes", 300, 300)
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg(0x111, "_WM_COMMAND")Global $hCombo = GUICtrlCreateCombo("Choose option", 10, 10, 100, 0, 0x3)
[/autoit] [autoit][/autoit] [autoit]Global $hMenu = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
[/autoit] [autoit][/autoit] [autoit]
Global $nOpt1 = GUICtrlCreateMenuItem("Option1", $hMenu, -1, 1)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $nOpt2 = GUICtrlCreateMenuItem("Option2", $hMenu, -1, 1)
Global $nOpt3 = GUICtrlCreateMenuItem("Option3", $hMenu, -1, 1)
GUICtrlCreateMenuItem("", $hMenu)
Global $nOpt4 = GUICtrlCreateMenuItem("Option4", $hMenu, -1, 0)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $nOpt5 = GUICtrlCreateMenuItem("Option5", $hMenu, -1, 0)
Global $nOpt6 = GUICtrlCreateMenuItem("Option6", $hMenu, -1, 0)GUISetState()
[/autoit] [autoit][/autoit] [autoit]Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]Local $msg
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Do
$msg = GUIGetMsg()
Switch $msg
Case $nOpt4 To $nOpt6
If BitAND(GUICtrlRead($msg), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($msg, $GUI_UNCHECKED)
Else
GUICtrlSetState($msg, $GUI_CHECKED)
EndIf
EndSwitch
Until $msg = -3Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID = $hCombo And $nNotifyCode = 7 Then
GUICtrlSendMsg($hCombo, 335, 1, 0)
ShowMenu($hGui, $hCombo, $hMenu)
GUICtrlSendMsg($hCombo, 335, 1, 0)
EndIf
Return "GUI_RUNDEFMSG"
EndFunc ;==>MY_WM_COMMAND; Show a menu in a given GUI window which belongs to a given GUI ctrl
[/autoit] [autoit][/autoit] [autoit]
Func ShowMenu($hWnd, $CtrlID, $nContextID)
Local $arPos, $x, $y
Local $hMenu = GUICtrlGetHandle($nContextID)
$arPos = ControlGetPos($hWnd, "", $CtrlID)
$x = $arPos[0]
$y = $arPos[1] + $arPos[3]
ClientToScreen($hWnd, $x, $y)
TrackPopupMenu($hWnd, $hMenu, $x, $y)
EndFunc ;==>ShowMenu; Convert the client (GUI) coordinates to screen (desktop) coordinates
[/autoit] [autoit][/autoit] [autoit]
Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
Local $stPoint = DllStructCreate("int;int")
DllStructSetData($stPoint, 1, $x)
DllStructSetData($stPoint, 2, $y)DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))
[/autoit] [autoit][/autoit] [autoit]
$x = DllStructGetData($stPoint, 1)
$y = DllStructGetData($stPoint, 2)
; release Struct not really needed as it is a local
$stPoint = 0
EndFunc ;==>ClientToScreen; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd)
[/autoit]
Func TrackPopupMenu($hWnd, $hMenu, $x, $y)
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc ;==>TrackPopupMenu -
Diese Variabllen werden ByRef übergeben. Deswegen werden sie nicht initialisiert, sie werden aber für die meisten Funktionen benötigt.
-
Hab gerade beim Basteln mit C was nettes herausgefunden.
Positionierung ist etwas schwierig, aber das braucht man ja auch nicht oft.Spoiler anzeigen
[autoit]#Region _GuiCtrlSetFont.au3
[/autoit] [autoit][/autoit] [autoit]
;Copyrights to funkey !!#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]OnAutoItExitRegister("_FontCleanUp")
[/autoit] [autoit][/autoit] [autoit]
Global $ahFontEx[1] = [0]Func _GuiCtrlSetFont($controlID, $size, $weight = 400, $attribute = 0, $rotation = 0, $fontname= "", $quality = 2)
[/autoit] [autoit][/autoit] [autoit]
Local $fdwItalic = BitAND($attribute, 1)
Local $fdwUnderline = BitAND($attribute, 2)
Local $fdwStrikeOut = BitAND($attribute, 4)
ReDim $ahFontEx[UBound($ahFontEx) + 1]
$ahFontEx[0] += 1
$ahFontEx[$ahFontEx[0]] = _WinAPI_CreateFont($size, 0, $rotation * 10, $rotation, $weight, _
$fdwItalic, $fdwUnderline, $fdwStrikeOut, -1, 0, 0, $quality, 0, $fontname)
GUICtrlSendMsg($controlID, 48, $ahFontEx[$ahFontEx[0]], 1)
EndFuncFunc _FontCleanUp()
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $ahFontEx[0]
_WinAPI_DeleteObject($ahFontEx[$i])
Next
EndFunc
#EndRegionGlobal $hGui1 = GuiCreate("AutoIt Main-GUI", 300, 340, 100, 100, -1, 0);
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]For $i = 0 To 350 Step 30
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Das ist ein Text", 50, 0, 300, 220, 0x201)
_GuiCtrlSetFont(-1, 15, 1000, 1, $i)
GUICtrlSetBkColor(-1, -2)
NextGUICtrlCreateLabel("Das ist ein vertikaler Text", 10, 30,200, 200, 0x001)
[/autoit] [autoit][/autoit] [autoit]
_GuiCtrlSetFont(-1, 15, 400, 1, -90)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel("Das auch!!", 130, 50, 200, 200, 0x202)
_GuiCtrlSetFont(-1, 15, 400, 1, 90)
GUICtrlSetBkColor(-1, -2)GuiCtrlCreateButton("Button mit schrägem Text", 10, 220, 275, 60, 0x0800);
[/autoit] [autoit][/autoit] [autoit]
_GuiCtrlSetFont(-1, 20, 1000, 1,
GuiCtrlCreateCombo("Hallo", 10, 290, 275, 80, 0x3, -1);
[/autoit] [autoit][/autoit] [autoit]
_GuiCtrlSetFont(-1, 15, 1000, 1, -3)
GUICtrlSetData(-1, "Eintrag2|Eintrag3")GuiSetState(@SW_SHOW, $hGui1);
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit]
Until GUIGetMsg() = -3 -
Ich habe die Demo nicht mehr weiterentwickelt, sondern nur die UDF. Deswegen kommt es zu Fehlern.
-
Die Ini-Funktionen sind ganz leicht und auch aus dem alten AutoIt-Quelltext herauszulesen. Die API-Funktionen dazu heißen GetPrivateProfileString und WritePrivateProfileString. Auch die meisten anderen Funktionen sind kein Problem.
Das Problem ist wirklich der Parser selbst, wie z.B. macht man den Unterschied zw. Messege-Mode und OnEvent-Mode oder in AutoIt können in jeder Funktion globale Variablen erstellt werden und nicht nur außerhalb von Funktionen, usw..
-
Von C# halte ich ja nicht soviel
.
Ich habe schon ein paar Funktionen für mich in C (ohne ++) übersetzt und programmiere einfache Sachen einfach damit.Spoiler anzeigen
Code
Alles anzeigenint ControlClick(LPCSTR Title, LPCSTR strClassNN); int ControlClickText(LPCSTR Title, LPCSTR strClass, LPCSTR strText);int ControlSetText(LPCSTR Title, LPCSTR strClassNN, LPCSTR newText); int ControlGetText(LPCSTR Title, LPCSTR strClassNN, char* sText); int Run(LPSTR szRun); int GuiCreateClass(LPCSTR ClassName, WNDPROC WndProc); HWND GuiCreate(LPCSTR Title, int iW, int iH, int iX, int iY); int GuiSetState(int flag, HWND hwnd); HWND GuiCtrlCreateButton(LPCSTR text, int left, int top, int width, int height, int style, int exstyle); HWND GuiCtrlCreateList(LPCSTR text, int left, int top, int width, int height, int style, int exstyle); int WinWait(LPCSTR Title, int TimeOut); int WinWaitActive(LPCSTR Title, int TimeOut); int WinWaitNotActive(LPCSTR Title, int TimeOut); int WinWaitClose(LPCSTR Title, int TimeOut); BOOL WinExists(LPCSTR Title); BOOL WinActive(LPCSTR Title); BOOL WinActivate(LPCSTR Title); BOOL WinClose(LPCSTR Title); BOOL WinSetTitle(LPCSTR Title, LPCSTR NewTitle); BOOL WinSetOnTop(LPCSTR Title, int OnOff); void IniRead(const char* FileName, const char* Section, const char* Key, const char* Default, char* Result); void IniWrite(const char* FileName, const char* Section, const char* Key, const char* Value); void IniDelete(const char* FileName, const char* Section, const char* Key); void MouseMove(int x, int y); int MouseClick(int x, int y, LPCSTR Button); void ConsoleWrite(char* sText); HWND WinGetHandle(LPCSTR WinTitle); HWND ControlGetHandle(HWND hwnd,LPCSTR ClassNameNN);TheShadowAE hat auch schon einige Funktionen mit C++ erstellt.
Funktionssammlung, Autoit ähnlich [ISMS] -
Wie sieht es damit aus?
Spoiler anzeigen
[autoit]$TextDeutsch = "Ist es das, was du willst?"
[/autoit] [autoit][/autoit] [autoit]
$TextEnglish = _GoogleTranslate($TextDeutsch)
_GoogleSpeakEnglish($TextEnglish)Func _GoogleSpeakEnglish($sText)
[/autoit] [autoit][/autoit] [autoit]
InetGet("http://translate.google.com/translate_tts?q=" & $sText, @TempDir & "\tempspeech.mp3", 1)
SoundPlay(@TempDir & "\tempspeech.mp3", 1)
FileDelete(@TempDir & "\tempspeech.mp3")
EndFuncFunc _GoogleTranslate($sText, $sFrom = "de", $sTo = "en")
[/autoit] [autoit][/autoit] [autoit]
Local Const $FileName = "Translation.jsn"
Local Const $Pattern = '"translatedText":"([^"]+)"'
Local $GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s%%7C%s"
Local $File$GoogleURL = StringFormat($GoogleURL, $sText, $sFrom, $sTo)
[/autoit] [autoit][/autoit] [autoit]If Not InetGet($GoogleURL, $FileName, 1) Then Return SetError(1, 0, 0)
[/autoit] [autoit][/autoit] [autoit]$File = FileOpen($FileName, 4)
[/autoit] [autoit][/autoit] [autoit]
FileGetSize($FileName)
$Translation = FileRead($File, FileGetSize($FileName))
FileClose($File)
FileDelete($FileName)$Translation = BinaryToString($Translation, 4)
[/autoit] [autoit][/autoit] [autoit]If StringRegExp($Translation , $Pattern) Then
[/autoit] [autoit][/autoit] [autoit]
$Translation = StringRegExp($Translation , $Pattern, 1)
$Translation = $Translation[0]Return $Translation
[/autoit]
EndIf
EndFunc -
Das geht nicht mit ControlClick, dazu benötigst du die IE.au3.
Schau dir mal das an:
_IEAction($oLink, "click")
_IELinkClickByText -
Ich glaube das zielt auf "GUISetFont()" hin.
-
-
Entweder nachher ersetzen:
[autoit]Local $IP_1 = "127,0,0,1"
[/autoit]
Local $IP_2 = StringReplace($IP_1, ",", ".")
ConsoleWrite($IP_2 & @CRLF)oder vorübergehend einen HotKey setzen.
[autoit]HotKeySet("{NUMPADDOT}", "_SendPunkt")
[/autoit][autoit][/autoit][autoit]
HotKeySet("{ESC}", "_Exit")While 1
[/autoit][autoit][/autoit][autoit]
Sleep(20000)
WEndFunc _SendPunkt()
[/autoit][autoit][/autoit][autoit]
Send(".")
EndFuncFunc _Exit()
[/autoit]
Exit
EndFunc -
Du suchst "ShellExecute()"
-
Eukalyptus hatte da mal was gemacht:
[ offen ] Programm.exe in einem AutoIt fenster ausführen -
Windows hat doch schon eine Tastaturmaus dabei. Da kann man mit Strg beschleunigen, mit Shift verlangsamen und die Beschleunigung einstellen.
Aber ansonsten nett genacht.
-
-
Die restlichen Monate musst du noch selber machen.
Spoiler anzeigen
[autoit]#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]Local $Start = "Wed Aug 17 16:05:37 2011"
[/autoit] [autoit][/autoit] [autoit]
Local $Stop = "Wed Aug 17 16:07:12 2011"Local $x = "Dauer: " & _DateDiff( 's',_YourTimeStamp($Start), _YourTimeStamp($Stop)) & " [sec]"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($x & @CRLF)Func _YourTimeStamp($sTimeStamp)
[/autoit]
Local $aTimeStamp = StringSplit($sTimeStamp, " :", 2)
Local $sMon = ""
Switch $aTimeStamp[1]
Case "Jan"
$sMon = "01"
Case "Aug"
$sMon = "08"
EndSwitch
Return StringFormat("%s/%s/%s %s:%s:%s", $aTimeStamp[6], $sMon, $aTimeStamp[2], $aTimeStamp[2], $aTimeStamp[4], $aTimeStamp[5])
EndFunc -
Herzlich willkommen hier im Forum.
Nun zur Kritik!
Zitat von Bomb-Angenehm zu lesen?
-Effektiv gescriptet?
-Erreicht das Script sein Ziel?Eigentlich finde ich es überhaupt nicht angenehm zu lesen, die Formatierung ist schrecklich und Schreibfehler im Tooltip.
Es gibt auch keine Deklarationen.
Ich glaube das kann man auch effektiver und richtiger scripten, eigentlich funktioniert es nicht mal lange.
Wofür soll das Execute überhaupt gut sein?
Und was soll überhaupt das Ziel des Skriptes sein?Aber das wird schon noch werden, da habe ich keine Sorgen.
