1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • Dienstplanung

    • Oscar
    • 29. September 2016 um 17:44
    Zitat von nwmbd

    Macht es Sinn für jeden Tag eine Datei anzulegen oder für jeden Mitarbeiter eine und die dann Einlesen?

    Weder noch!
    Ich würde lieber alle Daten in eine große Datei packen. Das ist wesentlich effektiver beim laden und speichern, als wenn Du 365 Einzeldateien pro Mitarbeiter einlesen musst.
    Soweit es der Arbeitsspeicher des verwendeten PCs zulässt, alle Daten in ein Array laden und das Listview nur zur Anzeige/Eingabe verwenden.
    Suchen und sortieren der Daten geht mit einem Array viel schneller, als wenn man das Listview sortieren lässt oder Daten über die Listview-Suche sucht.
    Das macht sich bei nur wenigen Einträgen im Listview nicht so bemerkbar, aber wenn dort viele Daten stehen, dann führt das zu einem blockierenden Fenster.

  • Dienstplanung

    • Oscar
    • 28. September 2016 um 20:12

    Es gibt zwar beim Listview den Style "$LVS_EDITLABELS", aber das klappt nicht bei den SubItems.
    Ich würde lieber mit einer zweiten GUI und einem Doppelklick arbeiten:

    AutoIt
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <MsgBoxConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    $hMainGui = GUICreate("Dienstplan", 1000, 450, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x0000FF)
    $idListview = GUICtrlCreateListView("Name|01.01.16|02.01.16|03.01.16|04.01.16|05.01.16|...|Stundenanzahl", 20, 10, 950, 300)
    $hListview = GUICtrlGetHandle($idListview)
    $button1 = GUICtrlCreateButton("Monatsübersicht Drucken", 100, 420, 150, 20)
    $button2 = GUICtrlCreateButton("Login für Änderungen", 300, 420, 150, 20)
    $item1 = GUICtrlCreateListViewItem("MA1|T", $idListview)
    $item2 = GUICtrlCreateListViewItem("MA2", $idListview)
    $item3 = GUICtrlCreateListViewItem("MA3", $idListview)
    $item4 = GUICtrlCreateListViewItem("MA4", $idListview)
    $item5 = GUICtrlCreateListViewItem("MA5", $idListview)
    $item6 = GUICtrlCreateListViewItem("MA6", $idListview)
    $item7 = GUICtrlCreateListViewItem("MA7", $idListview)
    $item8 = GUICtrlCreateListViewItem("Soll|4|5|6|....", $idListview)
    $hInputGui = GUICreate("", 100, 24, -1, -1, $WS_POPUPWINDOW, Default, $hMainGui)
    GUISetBkColor(0xFFFFFF)
    $idInput = GUICtrlCreateInput('', 0, 0, 100, 24)
    GUICtrlSetFont(-1, 12, 400, 0, 'Arial')
    $idCloseButton = GUICtrlCreateButton('close', 0, 50, 10, 10, $BS_DEFPUSHBUTTON)
    GUISetState(@SW_SHOW, $hMainGui)
    Global $iIndex, $iSubItem
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    While True
    	$msg = GUIGetMsg(1)
    	Switch $msg[1]
    		Case $hMainGui
    			Switch $msg[0]
    				Case $GUI_EVENT_CLOSE
    					Exit
    				Case $button1
    					GUICtrlSetData($item1, "||Nachttest")
    			EndSwitch
    		Case $hInputGui
    			Switch $msg[0]
    				Case $idCloseButton
    					_GUICtrlListView_SetItemText($hListview, $iIndex, GUICtrlRead($idInput), $iSubItem)
    					GUISetState(@SW_HIDE, $hInputGui)
    			EndSwitch
    	EndSwitch
    WEnd
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg, $wParam
    	Local $tNMHDR, $hWndFrom, $iIDFrom, $iCode, $tInfo, $aMainPos, $sItemText
    	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    	$iCode = DllStructGetData($tNMHDR, "Code")
    	Switch $hWndFrom
    		Case $hListview
    			Switch $iCode
    				Case $NM_CLICK
    					GUISetState(@SW_HIDE, $hInputGui)
    				Case $NM_DBLCLK
    					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    					$iIndex = DllStructGetData($tInfo, "Index")
    					$iSubItem = DllStructGetData($tInfo, "SubItem")
    					$sItemText = _GUICtrlListView_GetItemText($hListview, $iIndex, $iSubItem)
    					GUICtrlSetData($idInput, $sItemText)
    					$aMainPos = WinGetPos($hMainGui)
    					WinMove($hInputGui, '', $aMainPos[0] + $iSubItem * 64, 58 + $aMainPos[1] + $iIndex * 19)
    					GUISetState(@SW_SHOW, $hInputGui)
    					GUICtrlSetState($idInput, $GUI_FOCUS)
    					ConsoleWrite(StringFormat('Index: %i, SubItem: %i\n', $iIndex, $iSubItem))
    			EndSwitch
    	EndSwitch
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    Alles anzeigen
  • ControlSend sendet Text nur Lower-Case

    • Oscar
    • 28. September 2016 um 14:47

    Hast Du es mal mit ControlSetText versucht?

  • FileReadToArray mit Wordpad

    • Oscar
    • 27. September 2016 um 14:25

    Was erwartest Du eigentlich von uns? Wahrsagerei?
    Ohne das Datenformat zu kennen, kann man nicht sagen, was da verkehrt läuft.
    Du willst uns keine (Beispiel-)Daten zur Verfügung stellen und erwartest trotzdem eine Lösung?
    Oder ist das ein psychologischer Test?
    Wie wäre es mit dieser Lösung: Du fragst einfach das beauftragte IT-Unternehmen?

  • JavaFX in AutoIt? - Framework

    • Oscar
    • 26. September 2016 um 19:22

    Die untere (nicht OOP) Variante gefällt mir besser.
    IMHO fügt sich das besser in die übrigen AutoIt-Befehle ein. AutoIt ist nunmal von Haus aus nicht objektorientiert.

  • JavaFX in AutoIt? - Framework

    • Oscar
    • 26. September 2016 um 13:19

    Das könnte recht interessant werden. Vor allem, wenn das Resizing gut klappt (das ist mit AutoIt nämlich ziemlich aufwendig).
    Bleibt die Frage, wie groß das Ganze wird?
    Und ob dann Java zwingend installiert sein muss?

  • FileReadToArray mit Wordpad

    • Oscar
    • 25. September 2016 um 09:08

    Ohne die Datei kann man nur schwer sagen, um welches Format es sich handelt.
    WordPad kann ja auch Dateien im Word-Format (.doc und .docx) öffnen.
    Kannst Du nicht mal eine solche Datei online stellen? Sensible Daten kannst Du ja unkenntlich machen.

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 24. September 2016 um 20:43

    Ich bin überhaupt kein Fan von Lern-Videos (a la YouTube)! Ich könnte so nicht programmieren lernen.

    Ich habe AutoIt mit der Hilfe von AutoIt gelernt. Genauer mit den Beispiel-Scripten, die dort enthalten sind.
    Immer wenn ich nicht wusste, wie man einen Befehl benutzt, habe ich mich mit den Beispielen beschäftigt (Trial and Error).
    Ok, mir fiel das nicht schwer, weil ich vorher schon programmiert hatte (in Basic und Assembler).
    Aber ich denke, die AutoIt-Hilfe erklärt schon sehr viel. Man muss sich nur die Zeit nehmen und das wirklich lesen.

    Wenn Du beispielsweise mit Arrays nicht klar kommst: in der Hilfe unter "Variables" und dann unter "Arrays".
    Oder über Google-Suche "autoit arrays" = https://www.autoitscript.com/wiki/Arrays

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • Oscar
    • 24. September 2016 um 15:16
    Zitat von nwmbd

    Oscar hast du dir das alles selbst beigebracht oder hast du das irgendwo gelernt / studiert?

    Als ich gelernt habe, fing das gerade erst an, mit den "Heimcomputern".
    In meinem Bekanntenkreis war ich der Einzige, der sich einen Computer (1983 = Commodore VC20) gekauft hat. Kurz danach hatte sich dann mein Ausbilder auch einen Computer (Sinclair ZX81) gekauft.
    Und nein, ich habe nichts mit IT gelernt.
    Angefangen mit programmieren habe ich später auf einem "Commodore C64". Seit dem hatte ich diverse Computer (anfangs Commodore, Amiga 500, Amiga 4000, später dann Intel-PCs mit Windows 98 und höher).
    Mit AutoIt habe ich vor fast 10 Jahren angefangen und dank dieses Forums kenne ich mich mit AutoIt recht gut aus und habe schon etliche Programme geschrieben (nicht alle hier veröffentlicht).
    Auch wenn ich in letzter Zeit viel in C++ programmiere (wegen Arduino UNO/NANO/MEGA), schreibe ich doch immer wieder auch einiges in AutoIt.

  • Prüfung einer Datei

    • Oscar
    • 16. September 2016 um 16:43

    Wenn vorne immer unterschiedlicher Text mit unterschiedlicher Länge steht, dann kann man nicht so einfach den Text abschneiden.
    Man muss also mit StringInStr auf einen String innerhalb der ganzen Zeile testen.
    Vielleicht so:

    AutoIt
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
    	If $sPath = $sNotifyFile Then
    		Local $sLastLine = FileReadLine($sNotifyFile, -1)
    		Local $sMsg = ''
    		If StringInStr($sLastLine, 'Öffnung Tor 2') Then
    			$sMsg = 'TOR 2 UNBEDINGT WIEDER SCHLIESSEN!'
    		EndIf
    		If StringInStr($sLastLine, 'Öffnung Tor 3') Then
    			$sMsg = 'TOR 3 UNBEDINGT WIEDER SCHLIESSEN!'
    		EndIf
    		GUICtrlSetData($idLabel, $sMsg)
    		WinActivate($hGui)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    Alles anzeigen
  • Menü Problem

    • Oscar
    • 16. September 2016 um 16:35
    Zitat von nwmbd

    kann mir jemand das zum Verständnis erklären?

    Was möchtest Du erklärt bekommen?

  • Prüfung einer Datei

    • Oscar
    • 16. September 2016 um 16:23

    Das heißt, Du hast das Problem noch nicht gelöst?!

    Gut! Um dabei helfen zu können, muss ich wissen, was in dieser Zeile alles stehen wird oder stehen kann.
    Das heißt:
    - ist das Datum/Uhrzeit immer gleich lang (führende Nullen)?
    - Steht dort immer Hauptgebäude?
    - Wie viele Stellen hat die Anlagennummer? (Variabel oder mit führenden Nullen)
    - Oder anders, auf welche (immer gleiche) Textstelle kann man testen? (immer "Öffnung Tor X"?)

  • Prüfung einer Datei

    • Oscar
    • 16. September 2016 um 16:13
    Zitat von nwmbd

    Habe den Code nun so verändert, funktioniert 1a. Ist das auch richtig so?

    Schön, dass er funktioniert! Woher sollen wir wissen, ob das so richtig ist?
    Wie hast Du denn nun das Problem mit dem Datum/Anlagenummer gelöst?


    Zitat von nwmbd

    Habe das mit dem WINwait so teilweise hinbekommen, er öffnet das aber egal was ich mit x1 x2 y1 y2 mache immer auf dem 1. Bildschirm

    Dannn ist der Titel falsch!
    Was sagt denn "Au3Info"?
    Eventuell musst Du WinTitleMatchMode ändern.

  • Prüfung einer Datei

    • Oscar
    • 16. September 2016 um 05:26

    Stimmt! $sMsg muss natürlich vor Switch deklariert werden (Flüchtigkeitsfehler).

    Zu dem anderen Problem musst Du schon mal schreiben, wie genau so ein Eintrag aussieht.

  • Prüfung einer Datei

    • Oscar
    • 15. September 2016 um 20:07

    Man kann auch auf den Text in der Datei reagieren:

    AutoIt
    #include <APIShellExConstants.au3>
    #include <Date.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIShellEx.au3>
    
    
    
    
    Opt('GUIOnEventMode', 1)
    
    
    Global $sNotifyFile = 'C:\Test\ueberwachung.txt' ; <- ggf. anpassen
    
    
    Global $sNotifyPath = StringRegExpReplace($sNotifyFile, '(.+\\).+', '$1')
    
    
    OnAutoItExitRegister('OnAutoItExit')
    
    
    Global $hGui = GUICreate('Überwachung', 480, 160)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    Global $idLabel = GUICtrlCreateLabel('', 10, 10, 460, 100)
    GUICtrlSetFont(-1, 16, 400, 0, 'Tahoma', 5)
    Global $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hGui, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $sNotifyPath, 1)
    If @error Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
    GUISetState()
    
    
    WinWaitClose($hGui)
    Exit
    
    
    Func _CloseGui()
    	GUIDelete($hGui)
    EndFunc   ;==>_CloseGui
    
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
    	If $sPath = $sNotifyFile Then
    		Local $sLastLine = FileReadLine($sNotifyFile, -1)
    		Switch $sLastLine
    			Case 'Öffnung Tor 2'
    				Local $sMsg = 'TOR 2 UNBEDINGT WIEDER SCHLIESSEN!'
    			Case 'Öffnung Tor 3'
    				Local $sMsg = 'TOR 3 UNBEDINGT WIEDER SCHLIESSEN!'
    		EndSwitch
    		GUICtrlSetData($idLabel, $sMsg)
    		WinActivate($hGui)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    
    Func OnAutoItExit()
    	If $g_iID Then _WinAPI_ShellChangeNotifyDeregister($g_iID)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
  • Prüfung einer Datei

    • Oscar
    • 15. September 2016 um 18:21

    Ok, Du hast also keinen Zugriff auf das Überwachungsprogramm.
    Dann bleibt nur die Datei-Methode. Man sollte aber trotzdem nicht ständig auf die Datei zugreifen, sondern auf die Benachrichtigung durch Windows warten.
    Hier mal ein Beispiel:

    AutoIt
    #include <APIShellExConstants.au3>
    #include <Date.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WinAPIShellEx.au3>
    
    
    
    
    Opt('GUIOnEventMode', 1)
    
    
    Global $sNotifyFile = 'C:\Test\ueberwachung.txt' ; <- ggf. anpassen
    
    
    Global $sNotifyPath = StringRegExpReplace($sNotifyFile, '(.+\\).+', '$1')
    
    
    OnAutoItExitRegister('OnAutoItExit')
    
    
    Global $hGui = GUICreate('Überwachung', 480, 160)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    Global $idLabel = GUICtrlCreateLabel('', 10, 10, 460, 100)
    GUICtrlSetFont(-1, 16, 400, 0, 'Tahoma', 5)
    Global $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hGui, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $sNotifyPath, 1)
    If @error Then Exit MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
    GUISetState()
    
    
    WinWaitClose($hGui)
    Exit
    
    
    Func _CloseGui()
    	GUIDelete($hGui)
    EndFunc   ;==>_CloseGui
    
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    
    
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
    	If $sPath = $sNotifyFile Then
    		Local $sLastLine = FileReadLine($sNotifyFile, -1)
    		Local $sMsg = 'Achtung! Neuer Eintrag:\n' & _Now() & ' -> ' & $sLastLine
    		GUICtrlSetData($idLabel, StringFormat($sMsg))
    		WinActivate($hGui)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    
    Func OnAutoItExit()
    	If $g_iID Then _WinAPI_ShellChangeNotifyDeregister($g_iID)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
  • Prüfung einer Datei

    • Oscar
    • 15. September 2016 um 14:54

    Wir doktern hier wieder an "Lösungen" rum, ohne das eigentliche Problem zu kennen.
    Wer legt denn die Datei an und schreibt den Eintrag "Öffnung Tor 3" dort hinein?

    Wozu überhaupt so eine Datei auf die Festplatte schreiben?
    Wenn auf dem Rechner sowieso das AutoIt-Script läuft, warum dann nicht einfach per TCP direkt eine Nachricht an das Script schicken?

  • Lange Initialisierungszeit der ArrayList, wie vermeiden?

    • Oscar
    • 12. September 2016 um 17:52

    Bei mir:
    Initialization Time: 14.9684551262322
    Second Write Time: 0.0277941291777502

    und:
    Initialization Time: 1.26653458116295
    Second Write Time: 0.0213575939997449

  • Firefox psw login?

    • Oscar
    • 9. September 2016 um 15:37

    Pauschal kann man das nicht erklären.
    Man braucht die genaue Website, weil man analysieren muss, wie die Anmeldung per HTML gemacht wird.
    Meistens sind das HTML-Formulare. Diese kann man mit den _IE-Funktionen ausfüllen und abschicken.

    Wenn allerdings Captchas ins Spiel kommen oder die AGB des Seitenbetreibers ein automatisches ausfüllen verbieten, dann endet jeglicher Support genau hier!

    Edit: Ach! Firefox! Das hatte ich völlig überlesen. Dann natürlich nicht die _IE- sondern die _FF-Funktionen. :rolleyes:

  • Firefox psw login?

    • Oscar
    • 9. September 2016 um 15:05

    Im Prinzip ja, (es gibt da so ein paar Befehle die mit "_IE" anfangen) aber für eine genauere Antwort braucht es eine genauere Frage (welche Website?).

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™