Hallo,
du wechselst in Zeile 216 in den OnEvent-Modus, arbeitest aber im MessageLoop-Modus (GuiGetMsg()), das geht so nicht. Entweder OnEvent- oder MessageLoop-Modus.
Hallo,
du wechselst in Zeile 216 in den OnEvent-Modus, arbeitest aber im MessageLoop-Modus (GuiGetMsg()), das geht so nicht. Entweder OnEvent- oder MessageLoop-Modus.
Hallo,
so sollte es auch aus dem SysTray wieder aktiviert werden!
#include <GuiToolbar.au3>
$hTray = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]')
For $i = 0 To _GUICtrlToolbar_ButtonCount($hTray) - 1
If StringRegExp(_GUICtrlToolbar_GetButtonText($hTray, _GUICtrlToolbar_IndexToCommand ($hTray, $i)), "TeamSpeak 3") Then
_GUICtrlToolbar_ClickIndex($hTray, $i)
ExitLoop
EndIf
Next
WinActivate("TeamSpeak 3")
Alles anzeigen
Probiers mal so.
#include <array.au3>
$szConns = ""
$hConns = FileOpen("fc2_log.txt", 0)
; erstmal die benötigten Zeilen rausfiltern
while 1
$szLine = FileReadLine($hConns)
if @error Then ExitLoop
If StringRegExp($szLine, "(SessionManager\s+accepting|Client\s+joined)") Then $szConns &= $szLine & @CRLF
Wend
FileClose($hConns)
$aConns = StringRegExp($szConns, "(?s)SessionManager accepting new connection at ((?:\d{1,3}\.){3}\d{1,3})(?:(?!SessionManager accepting new connection).)+Client joined \((\w*?),",3)
_ArrayDisplay($aConns)
Alles anzeigen
Edit:
Probier mal diesen Pattern
#include <array.au3>
$szConns = FileRead("FC2_log.txt")
$aConns = StringRegExp($szConns, "(?s)SessionManager\s+accepting.*?((?:\d{1,3}\.){3}\d{1,3})(?:.(?!SessionManager\s+accepting))+?Client\s+joined\s+\((.*?),", 3)
_ArrayDisplay($aConns)
Der Teil (?:(?!SessionManager accepting new connection).)+ kann bei langen Texten sehr komplex werden, deshalb schmiert das Programm ab, ein (?:(?!SessionManager\s+accepting).??)+ sollte auch gehen.
Ich habe gesehen das es auch Namen gibt die z. B. einen Punkt beinhalten, dann funktioniert \w*? nicht.
Habe es gar nicht erst probiert zu korrigieren, hab gleich gesehen das die ternären Operatoren falsch angewandt wurden.
Hallo,
mit der aktuellen Version funktioniert das Programm nicht.
>"AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "temp.au3" /UserParams
+>15:16:40 Starting AutoIt3Wrapper v.15.503.1200.1 SciTE v.3.5.4.0 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:0407)
+> SciTEDir => AutoIt3\SciTE UserDir => AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => AppData\Local\AutoIt v3\SciTE
>Running AU3Check (3.3.12.0) from:AutoIt3 input:temp.au3
"temp.au3"(88,232) : error: Statement cannot be just an expression.
($dir = 4 And Mod($dir, $cpx) < $cpx / 2) ? GUICtrlSetData($Progress1, 100 / ($xBlocks * $yBlocks - $xBlocks - $yBlocks) * $kasten, "") : Null ;seltene Üpadates Bremsen die Labyrinth berechnung nicht so sehr ((update dauert ewig)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"temp.au3"(90,272) : error: Statement cannot be just an expression.
($cpx <= 0 Or $cpy <= 0 Or $cpx >= $xBlocks Or $cpy >= $yBlocks) ? _backstep() : ($maze[$cpx][$cpy - 0x1] * $maze[$cpx][$cpy + 0x1] * $maze[$cpx + 0x1][$cpy] * $maze[$cpx - 0x1][$cpy] = True ? _backstep() : _math());alle felder belegt(backstep)oder noch eins frei(math)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"temp.au3"(156,133) : error: Statement cannot be just an expression.
(BitAND($maze[$i1][$i2], 0x1) = 0) ? GDIPlus_GraphicsDrawLine($buffer, $wi2, $i2 * $wi + 10, $wi2 + $wi, $i2 * $wi + 10) : Null;N
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"temp.au3"(157,146) : error: Statement cannot be just an expression.
(BitAND($maze[$i1][$i2], 0x2) = 0) ? GDIPlus_GraphicsDrawLine($buffer, $wi2 + $wi, $i2 * $wi + 10 + $wi, $wi2 + $wi, $i2 * $wi + 10) : Null ;O
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"temp.au3"(158,146) : error: Statement cannot be just an expression.
(BitAND($maze[$i1][$i2], 0x4) = 0) ? GDIPlus_GraphicsDrawLine($buffer, $wi2 + $wi, $i2 * $wi + 10 + $wi, $wi2, $i2 * $wi + 10 + $wi) : Null ;S
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"temp.au3"(159,133) : error: Statement cannot be just an expression.
(BitAND($maze[$i1][$i2], 0x8) = 0) ? GDIPlus_GraphicsDrawLine($buffer, $wi2, $i2 * $wi + 10, $wi2, $i2 * $wi + 10 + $wi) : Null;W
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"temp.au3"(226,20) : warning: $ghGDIPDll: possibly used before declaration.
DllCall($ghGDIPDll,
~~~~~~~~~~~~~~~~~~^
"temp.au3"(226,20) : error: $ghGDIPDll: undeclared global variable.
DllCall($ghGDIPDll,
~~~~~~~~~~~~~~~~~~^
temp.au3 - 7 error(s), 1 warning(s)
!>15:16:40 AU3Check ended. Press F4 to jump to next error.rc:2
+>15:16:40 AutoIt3Wrapper Finished.
>Exit code: 2 Time: 0.7127
Alles anzeigen
Hallo,
du hast 2 Möglichkeiten, entweder du schreibst im Programm HandelsTool
Global $fileName = @ScriptDir & "\data\ini\StaedteHandelstool.ini"
Global $fileNameWare = @ScriptDir & "\data\ini\Waren.ini"
oder du rufst das Programm so auf
[autoit]$pid = Run($SCRIPTPATH & "Data\Tools\Handelstool Fensterversion\Handelstool.exe", $SCRIPTPATH & "Data\Tools\Handelstool Fensterversion\")
[/autoit]Hallo,
Entschuldige, du hast völlig recht. Tatsächlich waren natürlich die Zeiträume 06.03.2016 - 31.03.2016 = 26 Tage und 01.04.2016 - 15.04.2016 = 15 Tage als Beispiele angedacht gewesen. Kleiner Vertipper
Falls das jetzt wieder ein Vertipper war, bei mir wäre es 04.03.2016 - 31.03.2016 = 28 Tage, kannst du vielleicht diesen Code für dich anpassen.
#include <array.au3>
#include <Date.au3>
Const $cszMName[13] = ["", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" ]
Local $szStartDate = "2016/03/04"
Local $szEndeDate = "2016/04/15"
Local $szFromDate, $szToDate
Local $aMonate[1][2]
$aMonate[0][0] = _DateDiff("M",$szStartDate, $szEndeDate) + 1
For $i = 1 To $aMonate[0][0]
$szFromDate = ($i=1) ? $szStartDate : $szToDate
$szToDate = ($i = $aMonate[0][0]) ? _DateAdd("D", 1, $szEndeDate) : _DateAdd("M", 1, StringLeft($szFromDate,8) & "01")
$szJahr = StringLeft($szFromDate, 4)
$szMonat = StringMid($szFromDate,6,2)
_ArrayAdd($aMonate, $cszMName[$szMonat] & " " & $szJahr & "|" & _DateDiff("D",$szFromDate, $szToDate) & " Tage")
Next
_ArrayDisplay($aMonate)
Alles anzeigen
Bei dem anderen Problem versuch mal
[autoit]GUICtrlRead($Summe6, _GUICtrlEdit_SetText($LeistungNach6, $Summe6))
[/autoit]durch
[autoit]GUICtrlSetData($LeistungNach6, $Summe6)
[/autoit]zu ersetzen. Ansonsten bitte ein lauffähiges Beispiel-Programm posten das den Fehler erzeugt!
Hallo,
Über eingefügte Datepicker wird ein Dienstleistungszeitraum festgelegt, z.B. Beginn der Dienstleistung: 04.03.2016 - Ende der Dienstleistung: 15.04.2015.
Da die Berechnungen aber monatlich stattfinden, währen das für besagten Dienstleistungszeitraum 2 Teilzeiträume.
Daher 06.03.2015 - 28.03.2016 = 25 Tage und 01.04.2016 - 15.04.2016 = 15 Tage.
Wenn der Dienstleistungszeitraum vom 04.03.2016 - 15.04.2016 geht, warum wird dann im März vom 06.03.2016 - 28.03.2016 gerechnet und nicht von 04.03.2016 - 31.03.2016?
Hallo,
wenn du mal in die Hilfe geschaut hättest wäre dir bestimmt auch die Funktion ControlSetText aufgefallen.
Hallo,
auf welche Art wird den dein Programm gestartet und unter welchem Nutzer wird es gestartet?
Das hört sich fast so an als wenn bei dem Nutzer unter dem das Programm läuft kein Drucker zur Verfügung steht.
Ein kleiner Tipp zum Logging:
Wenn man das Datum in der Reihenfolge
"G:\Temp\_" & @YEAR & "_" & @MON & "_" & @MDAY & "_" & "Verarbeitung.txt"
[/autoit]zusammensetzt, dann sind die Logfiles immer schön chronologisch geordnet.
Hallo,
gerade mal 20 zeilen Code! So wie oben schon mal beschrieben!
#include <File.au3>
#include <FileConstants.au3>
$szInstallPath = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C814eu}_is1", "InstallLocation" )
$szInstallPath &= "\res"
$szBackupPath = @ScriptDir & "\Backup_" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
$szSource = @ScriptDir & "\res"
$aFL = _FileListToArrayRec($szSource, "*", $FLTAR_FILES, $FLTAR_RECUR)
If StringRight($szInstallPath, 1) <> "\" Then $szInstallPath &= "\"
If StringRight($szSource, 1) <> "\" Then $szSource &= "\"
If StringRight($szBackupPath, 1) <> "\" Then $szBackupPath &= "\"
For $iFL = 1 To $aFL[0]
; Wenn Datei im Zielordner existiert nach BackupPath kopieren
If FileExists($szInstallPath & $aFL[$iFL]) Then FileCopy($szInstallPath & $aFL[$iFL], $szBackupPath & $aFL[$iFL], $FC_CREATEPATH)
; Datei kopieren
FileCopy($szSource & $aFL[$iFL], $szInstallPath & $aFL[$iFL], $FC_OVERWRITE + $FC_CREATEPATH)
Next
Alles anzeigen
Oder legt, was mir recht unwahrscheinlich erscheint, AutoIt/Scite derartige Info's gar in der Registry ab?
Ja auch, unter HKEY_CURRENT_USER\Software\AutoIt v3
Hallo und willkommen im Forum!
Hallo und willkommen im Forum!
Du kannst z. B. einfach mit _FileListToArrayRec eine Liste von Quellordner erstellen.
Dann für jedes Element in der Liste mit FileExists prüfen ob die Datei im Zielordner existiert, wenn ja die Datei aus dem Zielordern sichern, zippen oder was auch immer, danach Datei mit FileCopy kopieren.
Beispiele findest du hier im Forum jede Menge, solltest du dennoch Probleme haben, kannst du deinen Quellcode hier posten.
Hallo,
die Funktion _SetFocus hat einen kleinen Fehler, sie bekommt nämlich nicht mit wenn zwischendurch mal mit der Tab-taste weitergesprungen wird. Ich habe mal in das Beispiel von @BugFix ein paar kleine Änderungen eingebaut. Zusätzlich habe ich auch dem aktuellen Button nicht nur den Focus gegeben, sondern ihn auch den Status DefButton gegeben. Jetzt sollte der Blaue Rahmen auch mit springen. Dadurch ist auch gleich gewährleistet das der aktuelle Button mit Enter aktiviert werden kann.
#include <array.au3>
$hGui = GUICreate('Test')
$Button_A = GUICtrlCreateButton('A', 10, 10, 30, 20)
$Button_B = GUICtrlCreateButton('B', 50, 10, 30, 20)
$Button_C = GUICtrlCreateButton('C', 90, 10, 30, 20)
$Button_D = GUICtrlCreateButton('D', 10, 50, 30, 20)
$Button_E = GUICtrlCreateButton('E', 50, 50, 30, 20)
$Button_F = GUICtrlCreateButton('F', 90, 50, 30, 20)
$Button_G = GUICtrlCreateButton('G', 10, 90, 30, 20)
$Button_H = GUICtrlCreateButton('H', 50, 90, 30, 20)
$Button_I = GUICtrlCreateButton('I', 90, 90, 30, 20)
$Dummy_Up = GUICtrlCreateDummy()
$Dummy_Down = GUICtrlCreateDummy()
$Dummy_Left = GUICtrlCreateDummy()
$Dummy_Right = GUICtrlCreateDummy()
GUICtrlSetState($Button_A, 768) ; Focus + Defbutton
;~ ControlFocus($hGui, '', $Button_A)
Global $aAccelerators[4][2] = [['{UP}',$Dummy_Up],['{DOWN}',$Dummy_Down],['{LEFT}',$Dummy_Left],['{RIGHT}',$Dummy_Right]]
GUISetAccelerators($aAccelerators, $hGui)
GUISetState()
While True
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $Dummy_Up
_SetFocus(0,-1)
Case $Dummy_Down
_SetFocus(0,1)
Case $Dummy_Left
_SetFocus(-1,0)
Case $Dummy_Right
_SetFocus(1,0)
Case $Button_A, $Button_B, $Button_C, $Button_D, $Button_E, $Button_F, $Button_G, $Button_H, $Button_I
ConsoleWrite('Clicked: ' & ControlGetText($hGui, '', $nMsg) & @CRLF)
EndSwitch
WEnd
Func _SetFocus($Spalte, $Zeile)
Local Static $aButton[3][3] = [[$Button_A,$Button_B,$Button_C],[$Button_D,$Button_E,$Button_F],[$Button_G,$Button_H,$Button_I]]
Local $iCurrentLine, $iCurrentRow
; Button mit Focus ermitteln, falls mal Tab gedrückt wurde
for $iLine = 0 To UBound($aButton, 1) - 1
for $iRow = 0 To UBound($aButton, 2) - 1
If ControlGetHandle($hGui, "", $aButton[$iLine][$iRow]) = ControlGetHandle($hGui, "", ControlGetFocus($hGui)) Then
$iCurrentLine = $iLine
$iCurrentRow = $iRow
ExitLoop 2
EndIf
Next
Next
$iCurrentLine += $Zeile
$iCurrentLine = $iCurrentLine > 2 ? 2 : ($iCurrentLine < 0 ? 0 : $iCurrentLine)
$iCurrentRow += $Spalte
$iCurrentRow = $iCurrentRow > 2 ? 2 : ($iCurrentRow < 0 ? 0 : $iCurrentRow)
;~ ControlFocus($hGui, '', $aButton[$iCurrentLine][$iCurrentRow])
GUICtrlSetState($aButton[$iCurrentLine][$iCurrentRow], 768) ; Focus + Defbutton
EndFunc
Alles anzeigen
Hallo,
das ist einfacher als es aussieht, aber wie das so oft ist, wenn man erst mal weiß wie es geht versteht man auch die Bedienungsanleitung!
In der Hilfe findest du es übrigens unter dem Begriff Ternary.
Es ist im Prinzip nicht mehr ein ein verkürzte If ... Then ... Else -Anweisung.
Vor dem Fragezeichen steht die Bedingung, hinter dem Fragezeichen das was zugewiesen werden soll wenn die Bedingung erfüllt ist und nach dem Doppelpunkt, dass was zugewiesen werden soll wenn die Bedingung nicht erfüllt ist.
[autoit]$iCurrentLine = $iCurrentLine > 2 ? 2 : ($iCurrentLine < 0 ? 0 : $iCurrentLine)
[/autoit]
heisst nichts anderes als
Hallo,
mit der Maus gehts aber auch!
$hTray = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]')
$aWGP = WinGetPos($hTray) ; Grösse und Position vom Fenster mit den Icons
$aMGP = MouseGetPos() ; aktuelle Mausposition merken
BlockInput(1) ; Tastatur und Maus für Benutzer sperren
; Maus an obere linke Ecke des Fenster mit den Icons setzen
MouseMove($aWGP[0], $aWGP[1], 1) ; könnte man auch weg lassen! ;)
; mit der Maus alle Icons im Fenster anfahren,
; von link nach rechts und von oben nach unten
For $i = 16 To $aWGP[3] Step 32
For $j = 16 To $aWGP[2] Step 32
MouseMove($aWGP[0] + $j, $aWGP[1] + $i, 1)
Next
Next
MouseMove($aMGP[0], $aMGP[1], 1) ; Maus wieder an gspeicherte Position setzen
BlockInput(0) ; Tastatur und Maus wieder freigeben
Alles anzeigen
Edit: Kommentare eingefügt
Hallo,
wie man es auch noch machen könnte.
Auf die Ampersands komplett verzichten, funktionieren in dem Fall ja eh nicht richtig, dafür das ganze über HotKeySet definieren. Das hat den Vorteil, dass man auch Tastenkombinationen aus mehreren Tasten erstellen kann. Hier mal ein Beispiel für die ersten drei Befehle mit Alt+<Taste>
;; Kombinationen für HotKeySet
;; + = Shift
;; ! = Alt
;; ^ = Ctrl
;; # = Win (nur freie Tasten können belegt werden)
;;
;; siehe auch Hilfe zum Send-Befehl
;;
;;
;; Alt-a = "!a"
;; Alt-Ctrl-a = "!^a"
;; Alt-Shift-a = "!+a" oder "!A"
;; Alt-Ctrl-Shift-a = "!^+a" oder "!^A"
HotKeySet("!a", "_taskschd")
HotKeySet("!b", "_uac")
HotKeySet("!c", "_CMD")
Alles anzeigen
Ist zwar etwa mehr Aufwand aber es sind dafür komplexere Kombinationen möglich. Der Nachteil ist das die Buchstaben dann nicht mehr hervorgehoben werden, dass kann man aber kompensieren wenn man die Kombination mit ins ToolTip-Fenster schreibt.