Ah Ok wusste ich noch garnicht das es das als Parameter gibt ^^.
Habs ja wie oben geschrieben jetzt anders gelöst.
Aber Trotzdem Danke.
Gut zu wissen mit dem Parameter zum Runden.
Beiträge von Molaynox
-
-
Hi ich hab ein kleines Problem:
Ich arbeite im Moment an einem Taschenrechner mit sehr sehr vielen Funktionen (bis jetzt 1800 Zeilen Quellcode).
Jetzt wollte ich noch diverse Zeitrechnungen hinzufügen (die mithilfe der BigNum.au3 rechnen).
Dabei gibt es aber Probleme bei den Millisekunden. (Alle Einheiten werden immer erst in Minuten umgerechnet und dann in die Angegebene Einheit in die umgerechnet werden soll)Spoiler anzeigen
[autoit]#include <Math.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>
#include <String.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
#include <TabConstants.au3>
#include <ComboConstants.au3>
#include <IE.au3>
#include <INet.au3>
#include <File.au3>
#include <BigNum.au3>Global $hZeitGUI, $hZeitIn, $hZeitInput, $hZeitOut, $hZeitOutput, $hZUmrechnerBtn
[/autoit] [autoit][/autoit] [autoit]_ZeitGUI()
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
WEndFunc _ZeitGUI()
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)
$bZeit = 1
$hZeitGUI = GUICreate("Zeitrechner", 400, 200, -1, -1)
GUISetOnEvent(-3, "_EndZeit", $hZeitGUI)
$hTabZeit = GUICtrlCreateTab(0, 0, 400, 200)
GUICtrlCreateTabItem("Zeitumrechnung")
GUICtrlCreateLabel("=>", 185, 21, 28, 23)
GUICtrlSetFont(-1, 20)
$hZeitIn = GUICtrlCreateCombo("Millisekunden", 5, 25, 160, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Sekunden|Minuten|Stunden|Tage|Wochen|Jahre")
$hZeitOut = GUICtrlCreateCombo("Millisekunden", 233, 25, 160, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Sekunden|Minuten|Stunden|Tage|Wochen|Jahre")
$hZeitInput = GUICtrlCreateInput("", 5, 55, 160, 20)
$hZeitOutput = GUICtrlCreateInput("", 233, 55, 160, 20, $ES_READONLY)
$hZUmrechnerBtn = GUICtrlCreateButton("Umrechnen", 150, 85, 100, 25)
GUICtrlSetOnEvent(-1, "_ZeitBerechnung")
GUICtrlCreateTabItem("Datumsdifferenz Berechnung")
GUISetState()
EndFuncFunc _ZeitBerechnung()
[/autoit] [autoit][/autoit] [autoit]
Switch @GUI_CtrlId
Case $hZUmrechnerBtn
$iZInput = GUICtrlRead($hZeitInput)
Switch GUICtrlRead($hZeitIn)
Case "Millisekunden"
$iZMin = _BigNum_Div(_BigNum_Div($iZInput, 1000), 60)
Case "Sekunden"
$iZMin = _BigNum_Div($iZInput, 60)
Case "Minuten"
$iZMin = $iZInput
Case "Stunden"
$iZMin = _BigNum_Mul($iZInput, 60)
Case "Tage"
$iZMin = _BigNum_Mul(_BigNum_Mul($iZInput, 24), 60)
Case "Wochen"
$iZMin = _BigNum_Mul(_BigNum_Mul(_BigNum_Mul($iZInput, 7), 24), 60)
Case "Jahre"
$iZMin = _BigNum_Mul(_BigNum_Mul(_BigNum_Mul(_BigNum_Mul($iZInput, 52), 7), 24), 60)
EndSwitch
ConsoleWrite("@@DEBUG $iZMin = " & $iZMin & @CRLF)
Switch GUICtrlRead($hZeitOut)
Case "Millisekunden"
$iZResult = _BigNum_Mul(_BigNum_Mul($iZMin, 60), 1000)
Case "Sekunden"
$iZResult = _BigNum_Mul($iZMin, 60)
Case "Minuten"
$iZResult = $iZMin
Case "Stunden"
$iZResult = _BigNum_Div($iZMin, 60)
Case "Tage"
$iZResult = _BigNum_Div(_BigNum_Div($iZMin, 60), 24)
Case "Wochen"
$iZResult = _BigNum_Div(_BigNum_Div(_BigNum_Div($iZMin, 60), 24), 7)
Case "Jahre"
$iZResult = _BigNum_Div(_BigNum_Div(_BigNum_Div(_BigNum_Div($iZMin, 60), 24), 7), 52)
EndSwitch
GUICtrlSetData($hZeitOutput, $iZResult)
EndSwitch
EndFuncFunc _EndZeit()
[/autoit]
$bZeit = 0
GUIDelete($hZeitGUI)
Exit
EndFunc
Wenn ich mit dem Zeiten Umrechner 1 Millisekunde umrechne in Millisekunden müsste ja eigentlich soviel herauskommen wie man davor eingegeben hat. Es kommen aber nur 96% des zuvor angegebenen Werts heraus. Ich hab das jetzt so um die 10 mal selbst nachgerechnet und eigentlich müsste es funktionieren. Tut es aber nicht.
Hat vllt. jemand ne Lösung dafür?PS: Ja viele von den Includes sind unnötig die werden aber im Moment vom Hauptskript benötigt. (Dieser Skriptteil soll wenn er funktioniert dann in die HauptGUI integriert werden.)
Edit: Kann es sein das die Fehler durch Fehler in der BigNum.au3 entstehen.
Wenn man z.B. 1000 Ms in Minuten und wieder in Ms umrechnet:
1000 / 1000 / 60 = 1/60 = 0,01666666666 (periodisch)
Doch da gibt die BigNum.au3 0.16 aus wodurch diese Fehler entstehen.Edit2: Problem ist gelöst indem ich alles erstmal in Ms umrechne statt in Min.
-
Ab 500+ Zeilen ist der GUIOnEventMode aber sehr viel übersichtlicher als die Variante mit GUIGetMsg()
-
Evtl. ConsoleWrite
Man muss ja nicht nach jedem Befehl was loggen, sondern könnte ja in unterschiedliche Bereiche einteilen wo dann geloggt wird das irgendwas gemacht wurde. (Und wenn man es auch bei einem kompiliertem Skript noch lesen können soll dann zusätzlich als CUI kompilieren.) -
Spoiler anzeigen
[autoit]#include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiEdit.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>$Form1 = GUICreate("BadEdit", 1267, 951, 2, 0)
[/autoit] [autoit][/autoit] [autoit]
$MenuItem4 = GUICtrlCreateMenu("Datei")
$MenuItem5 = GUICtrlCreateMenuItem("Neue Datei", $MenuItem4)
$MenuItem6 = GUICtrlCreateMenuItem("Öffnen", $MenuItem4)
$MenuItem65 = GUICtrlCreateMenuItem("Speichern", $MenuItem4)
$MenuItem14 = GUICtrlCreateMenuItem("Drucken", $MenuItem4)
$MenuItem7 = GUICtrlCreateMenu("Bearbeiten")
$MenuItem1 = GUICtrlCreateMenuItem("Einfügen", $MenuItem7)
$MenuItem10 = GUICtrlCreateMenuItem("Kopieren", $MenuItem7)
$MenuItem11 = GUICtrlCreateMenuItem("Wort suchen", $MenuItem7)
$MenuItem55 = GUICtrlCreateMenu("Hilfsprogramme")
$MenuItem82 = GUICtrlCreateMenuItem("Dateien vergleichen", $MenuItem55)
$MenuItem3 = GUICtrlCreateMenu("Einstellungen")
$MenuItem8 = GUICtrlCreateMenuItem("Schrift", $MenuItem3)
$MenuItem12 = GUICtrlCreateMenuItem("GUI", $MenuItem3)
$MenuItem12 = GUICtrlCreateMenuItem("Modus", $MenuItem3)
$MenuItem9 = GUICtrlCreateMenu("Ansicht")
$MenuItem2 = GUICtrlCreateMenuItem("Zoom", $MenuItem9)
$MenuItem15 = GUICtrlCreateMenu("Hilfe")
$Edit1 = GUICtrlCreateEdit("", 0, 0, 1257, 921)
$StrgA = GUICtrlCreateDummy()
Dim $AccelKeys[1][2] = [["^a", $StrgA]] ; Accelerator für Strg + a
GUISetAccelerators($AccelKeys)
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $MenuItem5
GUICtrlSetData(-1, "")
Case $MenuItem6
$Suche = FileOpenDialog("Dateisuche", "C:\", "(*.txt)")
$Lesen = FileRead($Suche)
GUICtrlSetData($Edit1, $Lesen)
Case $MenuItem65
$Suche = FileSaveDialog("Speichern", "C:\", "(*.txt)")
FileWrite($Suche & ".txt", GUICtrlRead($Edit1))
Case $MenuItem14
$Schreiben = FileWrite("Zwischenlagerung.txt", GUICtrlRead($Edit1))
_FilePrint("Zwischenlagerung.txt")
Case $MenuItem1
ControlSend("BadEdit", "", $Edit1, "^v")
Case $MenuItem10
ControlSend("BadEdit", "", $Edit1, "^a") ; Das ist die Problemzeile
Case $StrgA
_GUICtrlEdit_SetSel($Edit1, 0, -1) ; markiert kompletten Text
;ClipPut(GUICtrlRead($Edit1)) ;falls Text auch kopiert werden soll
Case $MenuItem11
$Form2 = GUICreate("Form1", 237, 87, 192, 124)
$Input1 = GUICtrlCreateInput("", 88, 16, 121, 21)
$Suchwort = GUICtrlCreateLabel("Suchwort", 8, 16, 66, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$suchen = GUICtrlCreateButton("suchen", 120, 48, 59, 25, $WS_GROUP)
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $suchen
$DasSuchwort = GUICtrlRead($Input1)
$Pos = StringInStr(GUICtrlRead($Edit1), $DasSuchwort, 0, 1, 1, 3000)
If $Pos Then
_GUICtrlEdit_SetSel($Edit1, $Pos - 1, $Pos + StringLen($DasSuchwort))
Else
MsgBox(32, "Keine Treffer", "Der Suchbegriff: " & $DasSuchwort & " wurde nicht gefunden.")
EndIf
GUIDelete($Form2)
ExitLoop
EndSwitch
WEnd
EndSwitch
WEnd -
Man könnte erstmal mit IsArray prüfen ob _StringBetween etwas gefunden hat, und wenn dies der Fall ist mit UBound die Anzahl der Werte die _StringBetween zurückgegeben hat abfragen. Dann halt noch in einer For-Schleife Für jeden Wert einzeln prüfen (Mit If Abfragen) ob er etwas enthält, also prüfen ob der Wert nicht "" ist.
-
-3 ist der Wert von $GUI_EVENT_CLOSE.
Um Funktionen aufzurufen, wenn z.B. ein Button gedrückt wurde könnte man auch sehr gut den GUIOnEventMode benutzen, der bei größeren Scripts auch übersichtlicher ist.Edit: Zuspät :pinch: Mit der IPod Touch Tastatur kann man echt nicht schnell schreiben
-
Super. Genau das habe ich grad gebraucht. Danke
-
Weitere Möglichkeit:
- WebTcp.au3Beispiel
[autoit]#include <WebTcp.au3>
[/autoit] [autoit][/autoit] [autoit]TCPStartup()
[/autoit] [autoit][/autoit] [autoit]
_AutoItObject_Startup()
Global $oWebTcp = _WebTCP_Create(False, True)
$oWebTcp.Useragent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"; Zu einer Seite Navigieren
[/autoit] [autoit][/autoit] [autoit]
$oWebTcp.Navigate("http://www.autoit.de"); Cookie setzen
[/autoit] [autoit][/autoit] [autoit]
$oWebTcp.Cookies.Set("Key", "Value"); Cookies als String in Variable speichern
[/autoit] [autoit][/autoit] [autoit]
$sCookies = $oWebTcp.Cookies.toString; Cookie auslesen
[/autoit] [autoit][/autoit] [autoit]
$sCookie = $oWebTcp.Cookies.Get("Key"); Cookie löschen
[/autoit] [autoit][/autoit] [autoit]
$oWebTcp.Cookies.Remove("Key"); Quellcode auslesen
[/autoit] [autoit][/autoit] [autoit]
$sQuellcode = $oWebTcp.Body_AutoItObject_Shutdown()
[/autoit]
TCPShutdown()Die nötigen Includes sind im Anhang.
-
Ziel ist es den Quellcode des Links zu bekommen. Falls die Frage aufkommen sollte "Benutz doch die FF.au3 dafür?": man brauch dazu leider das Addon, was mit Sicherheit niemand installiert hat...
Quellcode eines Links könnte man auch mit InetRead() abrufen.Beispiel
[autoit]$sSource = BinaryToString(InetRead("http://www.autoit.de/"))
[/autoit] -
Ok Danke.
Hab's jetzt vom Ablauf her so wie progandy gemacht. -
Hi,
Ich hab mir ein Script programmiert um bestimmte Sachen über WLAN zu automatisieren.So weit bin ich bis jetzt:
Spoiler anzeigen
[autoit]#include <ScreenCapture.au3>
[/autoit] [autoit][/autoit] [autoit]Global $IP = "192.168.137.1", $ConnectedSocket = -1
[/autoit] [autoit][/autoit] [autoit]; Startet den TCP Service
[/autoit] [autoit][/autoit] [autoit]
TCPStartup(); Erstellt einen lauschenden Port
[/autoit] [autoit][/autoit] [autoit]
$MainSocket = TCPListen($IP, 80)If $MainSocket = -1 Then
[/autoit] [autoit][/autoit] [autoit]
MsgBox(16, "Connection Error", "Could not connect to local socket")
Exit
EndIfWhile True
[/autoit] [autoit][/autoit] [autoit]
If $ConnectedSocket = -1 Then
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
EndIf
$sRecv = TCPRecv($ConnectedSocket, 2048)
If $sRecv <> "" Then
$sCommand = StringRegExp($sRecv, "GET (.*?) HTTP", 1)
If IsArray($sCommand) Then
Switch $sCommand[0]
Case "/ShowScreen"
$sTCPSend = _SendScreenPicture()
Case "/"
$sTCPSend = _GenerateInfo()
EndSwitch
TCPSend($ConnectedSocket, $sTCPSend)
Dim $sCommand
EndIf
EndIf
TCPCloseSocket($ConnectedSocket)
$ConnectedSocket = -1
WEndTCPShutdown()
[/autoit] [autoit][/autoit] [autoit]Func _GenerateInfo()
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("/Info" & @CRLF)
$sHTML = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"' & @CRLF & '"http://www.w3.org/TR/html4/loose.dtd">' & @CRLF & _
'<html><head><title>TCP Fernsteuerungs-System</title></head><body><h1>Willkommen auf der Hauptseite des TCP Fernsteurungs-Systems</h1>' & _
"<p>Computername: " & @ComputerName & "</p><p>Angemeldeter User: " & @UserName & "</p><br /><h3>Fenster</h3>"
$aWindows = WinList()
$sHTML &= '<table border="1"><tr><th>Fenstername</th><th>Status</th></tr>'
For $i = 1 To $aWindows[0][0]
If $aWindows[$i][0] = "" Or $aWindows[$i][0] = "D3D9Window" Or $aWindows[$i][0] = "Dummy" Or $aWindows[$i][0] = "MSCTFIME UI" Or _
$aWindows[$i][0] = "Default IME" Then
ContinueLoop
EndIf
$sHTML &= '<tr><td>' & $aWindows[$i][0] & '</td><td>' & WinGetState($aWindows[$i][0]) & '</td></tr>'
Next
$sHTML &= "</table><h3>Prozesse</h3><ul>"
$aProzesse = ProcessList()
For $i = 1 To $aProzesse[0][0]
$sHTML &= '<li>' & $aProzesse[$i][0] & '</li>'
Next
$sHTML &= '</ul></body></html>'
Dim $aProzesse, $aWindows
Return $sHTML
EndFunc ;==>_GenerateInfoFunc _SendScreenPicture()
[/autoit]
ConsoleWrite("/ShowScreen" & @CRLF)
$hBmp = _ScreenCapture_Capture("")
_ScreenCapture_SaveImage(@TempDir & "\NetImage.jpg", $hBmp)
$sData = FileRead(@TempDir & "\NetImage.jpg")
$sHeader = "HTTP/1.1 200 OK" & @CRLF & _
"Content-Type: image/jpeg" & @CRLF & _
"Content-Length: " & StringLen($sData) & @CRLF & _
"Connection: close" & @CRLF & @CRLF & $sData
FileDelete(@TempDir & "\NetImage.jpg")
Return $sHeader
EndFunc ;==>_SendScreenPictureNur kommt häufig ein Fehler das die Netzwerkverbindung zurückgesetzt wurde. Wie kann ich das Problem lösen.
(Verbinde mit IPod Touch zu der IP-Adresse meines Laptops) -
GDI+Tutorial: Gdi+ Tutorial [Part 5]
-
Man kann auch den Status abfragen mit
[autoit]$oWmp.playState
[/autoit]
http://msdn.microsoft.com/en-us/library/…v=VS.85%29.aspxUnd hier kann man sich die ganzen Parameter des WMP Objekts anschauen: http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
-
Was bestimmt auch interresant wäre, wenn es keine Key-List gibt, sondern der eingegebene Code einem bestimmten Schema entsprechen muss, so könnte man zb die Software offline registieren und es könnten nicht alle Codes "gehackt" werden!
Hatte ich schonmal hier gepostest. Der Lizenzkey musste dabei einen StringRegExp entsprechen, den man ja entsprechend verändern köntte so das ein Schema entsteht wie der Lizenzkey aufgebaut sein muss. -
Wenn man nicht weiß das ein Programm, welches damit geschützt wird, in AutoIt programmiert ist, wird man auch nicht wissen das man es mit einem AutoIt Decompiler decompilen kann.
-
Oder sie könnten verschlüsselt werden.
-
Ah Ok. Dann werde ich wohl einfach die Namen der Funktionen ändern die dann per Execute() ausgeführt werden. Danke.
-
Hi,
Ich habe ein eigenartiges Problem mit StringReplace
z.B. Hier:Spoiler anzeigen
[autoit]#include <String.au3>
[/autoit] [autoit][/autoit] [autoit]$sString1 = "ASinh(9)"
[/autoit] [autoit][/autoit] [autoit]
$sString1 = StringReplace($sString1, "ASinh(", "_ASinh(")
MsgBox(0, "", $sString1)$sString2 = "ASinh(9)"
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, "", _Replace($sString2))Func _Replace($sString)
[/autoit]
Local $sReplace
$sReplace = StringReplace($sString, "Sinh(", "_Sinh(")
$sReplace = StringReplace($sReplace, "ASinh(", "_ASinh(")
$sReplace = StringReplace($sReplace, "Cosh(", "_Cosh(")
$sReplace = StringReplace($sReplace, "ACosh(", "_ACosh(")
$sReplace = StringReplace($sReplace, "Tanh(", "_Tanh(")
$sReplace = StringReplace($sReplace, "ATanh(", "_ATanh(")
$sReplace = StringReplace($sReplace, "²", "^2")
$sReplace = StringReplace($sReplace, "³", "^3")
$sReplace = StringReplace($sReplace, ",", ".")
If StringInStr($sReplace, "Ran(") Then
$sRandomMax = _StringBetween($sReplace, "Ran(", ")")
If IsArray($sRandomMax) Then
For $i = 0 To UBound($sRandomMax) - 1
$sReplace = StringReplace($sReplace, "Ran(" & $sRandomMax[$i] & ")", "Random(0, " & $sRandomMax[$i] & ", 1)", 1)
Next
Else
Return SetError(1, 0, 0)
EndIf
EndIf
If StringInStr($sReplace, "ggT(") Then
$sReplace = StringReplace($sReplace, "ggT(", "_Euclid_Algorithm(")
$sReplace = StringReplace($sReplace, ";", ",")
EndIf
Return $sReplace
EndFunc ;==>_ReplaceIn der 1. MsgBox wird es richtig augegeben _Asinh(9) in der 2. MsgBox steht dann aber A_Sinh. Wie kann man das lösen oder wo liegt mein Fehler?
-
Leider funktioniert FF.au3 absolut gar nicht bei mir selbst bei _FFStart() bekomme ich den Error hier :
Zitat
__FFStartProcess ==> General Error: Error reading registry entry for FireFox.
HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox\*CurrentVersion*\Main\PathToExe
Error from RegRead: 1
_FFConnect: Delay: 2msin der Autoit Console ausgegeben =/
[autoit]
Hast du ein 64-Bit Betriebssystem? Wenn ja das hier oben in SciTE einfügen und nochmal versuchen mit _FFStart Firefox zu starten.#AutoIt3Wrapper_UseX64=n
[/autoit]