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. bigeasy76

Beiträge von bigeasy76

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 30. Juni 2018 um 16:30

    Reicht das nicht, wenn mit Beendung des Scripts mit der Func OnAutoItExit() die _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY') wieder aufgehoben wird? so wars ja auch ursprünglich im Beispiel.

    Edit: Wenn ichs ohne diese Schleife laufen lasse, erhalte ich folgende Ausgabe, das Script beendet dann:

    >Exit code: 0 Time: 2.65

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 30. Juni 2018 um 16:03

    Fehlermeldung gabs keine. Habs nun so und das funktioniert:

    C
    #include <WinAPIShellEx.au3>
    #include <MsgBoxConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPIConstants.au3>
    #include <FileConstants.au3>
    #include <WinAPISys.au3>
    #include <File.au3>
    
    
    
    Opt('TrayAutoPause', 0)
    Global Const $g_sPath = 'M:\RD Files'
    If Not FileExists($g_sPath) Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create folder.')
        Exit
     EndIf
    
    OnAutoItExitRegister('OnAutoItExit')
    
    While 1
       Sleep(200)
       Local $hWnd = GUICreate('')
       Local $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
       GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
       Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $g_sPath, 1)
       If @error Then
          MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
          Exit
       EndIf
     WEnd
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
        If $sPath Then
            TelEinfuegen()
    ;~     Else
    ;~         ConsoleWrite('Event: 0x' & Hex($lParam) & @CRLF)
        EndIf
     EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    Func OnAutoItExit()
        If $g_iID Then
            _WinAPI_ShellChangeNotifyDeregister($g_iID)
        EndIf
     EndFunc   ;==>OnAutoItExit
    
     Func TelEinfuegen()
       $file = $g_sPath & "\telefon.txt"
       $open = FileOpen($file)
       $nummer = FileRead($open)
    ;~    _FileWriteToLine($file, 1, "", True)
       FileClose($open)
    
       If WinActivate("[CLASS:personal8c000000]", "") Then
          MouseMove(304, 105)
          MouseClick("primary")
          Send($nummer)
          MouseMove(730, 570)
          MouseClick("primary")
       Else
          MsgBox($MB_OK, "Fehler!", "Fenster konnte nicht geöffnet werden.")
    
       EndIf
    
    EndFunc
    Alles anzeigen
  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 30. Juni 2018 um 15:16

    Vielen Dank, autoiter, habs nun langsam kapiert. Das mit dem Erstellen einer Datei mit der Nummer als Bezeichnung hab ich mir überlegt, das käme ja dann ins andere Script. Aber dort hab ich die Telefonnummer schon so formatiert (000/0000000), wie sie in die Eingabemaske reinmuss und Slashes sind vermutlich auch hier verboten in Dateinamen.

    Nochmals zum Script von Deinem Beitrag #7, hab da die Zeilen 19-26 versucht, in eine While-Schleife zu packen, damit das Verzeichnis dauernd überwacht wird. Bei mir beendet sich das Script sonst von selbst nach ca 2s. Aber mit dieser While-Schleife wir die Funktion etliche male aufgerufen, wenn das txt geändert wird. Wie krieg ich das hin, dass es nur einmal durchläuft? Das krieg ich irgendwie nicht hin, ohne dass die Überwachung des Verzeichnisses auch gestoppt wird.

    Ansonsten läuft nun alles tiptop, vielen Dank für die wiederum tolle Hilfe und Geduld mit einem Anfänger!

    C
    #include <MsgBoxConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPIConstants.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    
    
    
    Opt('TrayAutoPause', 0)
    Global Const $g_sPath = 'M:\RD Files'
    ;~ DirCreate($g_sPath)
    If Not FileExists($g_sPath) Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create folder.')
        Exit
     EndIf
    
    OnAutoItExitRegister('OnAutoItExit')
    
    While 1
       Sleep(500)
    
    Local $hWnd = GUICreate('')
    Local $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $g_sPath, 1)
    
    If @error Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
        Exit
     EndIf
     WEnd
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
        If $sPath Then
            TelEinfuegen()
    ;~     Else
    ;~         ConsoleWrite('Event: 0x' & Hex($lParam) & @CRLF)
        EndIf
     EndFunc   ;==>WM_SHELLCHANGENOTIFY
    Alles anzeigen

    Edit:

    Habs nun doch so zum Laufen gebracht, dass alles funktioniert mit dieser Schleife. In der Funktion, die die Nr in die Eingabemaske eingefügt hat, wurde die Nr. anschliessend wieder gelöscht im txt, vermutlich wurde durch diese Änderung alles in eine Endlosschleife versetzt.

    Aber nochmals vielen Dank für die Hilfe!!!

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 30. Juni 2018 um 11:22
    Zitat von autoiter

    In Beitrag 2 hatte ich es doch so vorgeschlagen: M:\\\\RD Files. Hatte das nicht geklappt.

    Hallo autoiter, sorry, das vergass ich zu erwähnen, habs dort auch mit 4, 3 und 2 Backslashes versucht, das ergab leider immer denselben Fehler

    Edit: Dein angepasstes Beispiel habe ich versucht, anzuwenden, aber das erstellt nur diese Dateien mit Zufallszahlen, ich versteh hier leider nicht, wie mir das beim Auslesen der Datei telefon.txt hilft, wenn diese Datei geändert wurde.

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 30. Juni 2018 um 09:40

    Guten Morgen die Herren

    autoiter: Die Ordnerübergabe sieht nun so aus:

    "'Win32_Directory.Name=""M:\RD Files""'"

    Bitnugger: Danke für den Tipp, hab mir das angesehen, habs nun mal mit folgendem aus der englischen Autoit-Hilfe probiert:

    C
    #include <APIShellExConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIShellEx.au3>
    #include <WinAPISysWin.au3>
    
    Opt('TrayAutoPause', 0)
    
    Global Const $g_sPath = 'M:\'
    
    DirCreate($g_sPath)
    If Not FileExists($g_sPath) Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create folder.')
        Exit
    EndIf
    
    OnAutoItExitRegister('OnAutoItExit')
    
    Local $hWnd = GUICreate('')
    Local $iMsg = _WinAPI_RegisterWindowMessage('SHELLCHANGENOTIFY')
    GUIRegisterMsg($iMsg, 'WM_SHELLCHANGENOTIFY')
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $g_sPath, 1)
    If @error Then
        MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Window does not registered.')
        Exit
    EndIf
    
    While 1
        Sleep(1000)
    WEnd
    
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
    
        Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
        If $sPath Then
            ConsoleWrite('Event: 0x' & Hex($lParam) & ' | Path: ' & $sPath & @CRLF)
        Else
            ConsoleWrite('Event: 0x' & Hex($lParam) & @CRLF)
        EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    
    Func OnAutoItExit()
        If $g_iID Then
            _WinAPI_ShellChangeNotifyDeregister($g_iID)
        EndIf
        DirRemove($g_sPath)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen

    Hier ist nun aber das Problem, dass kein Event angezeigt wird, wenn das andere Script die txt-Datei mit der Nummer befüllt, es wird nur jede Sekunde die Meldung Event: 0x00001000 | Path: M:\angezeigt. Leider sind meine Kenntnisse hier auch zu klein, um zu verstehen, wieso das so ist. Meine Vermutung war, dass bei

    Code
    Global $g_iID = _WinAPI_ShellChangeNotifyRegister($hWnd, $iMsg, $SHCNE_ALLEVENTS, BitOR($SHCNRF_INTERRUPTLEVEL, $SHCNRF_SHELLLEVEL, $SHCNRF_RECURSIVEINTERRUPT), $g_sPath, 1)

    auch noch der Parameter $SHCNRF_NEWDELIVER rein müsste, das hat aber nicht wirklich geklappt. Kann mir einer der Profis bitte einen Tipp geben?

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 29. Juni 2018 um 22:01

    Ahoi autoiter


    Danke für die Hilfe, jedoch kommt bei mir derselbe Fehler immernoch, auch wenn ich Deine Korrektur drin habe. Verzeichnis ist freigegeben und auch mit Explorer auf dem RD erreichbar. Woran könnte es wohl noch liegen?

    Das mit dem FileSystemMonitor muss ich zuerst noch genauer studieren, kapier das noch nicht ganz richtig, wie ich das in meinem Beispiel anwenden müsste und mir fiel auf, dass in meinem Include-Ordner FileSystemMonitor.au3 nicht enthalten ist, obwohl V3.3 installiert. Diese Datei müsste doch da sein, nicht?

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 29. Juni 2018 um 14:26

    Hallo zusammen

    ich bekomme bei einem Script, das ein Netzlaufwerk-Verzeichnis überwachen soll, dauernd eine Fehlermeldung, bei der ich nicht weiterkomme. Der betreffende Teil des Scripts ist aus einem Forum-Eintrag im englischen Forum, das für meine Kenntnisse leider zu schwierig ist.

    Die Fehlermeldung:

    $colMonitoredEvents = $objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " & "TargetInstance.GroupComponent= " & "'Win32_Directory.Name=""\\\tsclient\C\RD Files""'") $colMonitoredEvents = $objWMIService^ ERROR

    Die Fehlermeldung an sich bedeute, dass der Wert der Variable $colMonitoredEvents nicht gesetzt werden konnte, soviel ich bisher erfahren konnte. Aber warum das so sein soll, ist mir schleierhaft. Hier das Script:

    C
    #include <APIFilesConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIFiles.au3>
    #include <WinAPIProc.au3>
    
    Global $g_sPath = "\\tsclient\C\RD Files\telefon.txt"
    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:" & $strComputer & "rootcimv2")
    
    $colMonitoredEvents = $objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " _
    & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
    & "TargetInstance.GroupComponent= " _
    & "'Win32_Directory.Name=""\\tsclient\C\RD Files""'")
    
    While 1
    $objEventObject = $colMonitoredEvents.NextEvent()
    
       If $objEventObject.Path_.Class()="__InstanceModificationEvent" Then
       TelEinfuegen()
       EndIf
    WEnd
    Alles anzeigen

    Könnte mir bitte jemand sagen, was hier das Problem sein könnte? Das einzigste, was ich bei dieser Variable $colMonitoredEvents geändert habe, ist das zu überwachende Verzeichnis.

    Danke für jeden Tipp.

  • Parameter an Script auf Remotedesktop übergeben?

    • bigeasy76
    • 27. Juni 2018 um 15:21
    Zitat von autoiter

    Wenn du das Skript mit der Benutzeranmeldung im RD starten kannst, müsstest du gar nichts manuell machen.


    Wenn es nicht so zeitkritisch ist, kannst du das Skript einfach alle 10 Minuten die Datei mit FileRead lesen lassen. Wenn immer sofort eine Reaktion erfolgen soll, kannst du auf das Event reagieren, statt immer die Datei zu lesen. Beispiele gibt es hier im Forum (Verzeichnis überwachen) oder im engl. Forum (monitor file changes) bzw. _WinAPI_ReadDirectoryChanges.

    Ja, die Reaktion sollte möglichst schnell erfolgen, so dass ich den Datensatz des Kunden möglichst schon sehe, wenn ich den Anruf annehme.

    Aber ich werd das wie von Dir beschrieben mal versuchen, vielen Dank auf jeden Fall für die tolle Hilfe, das ist hier wirklich ein grossartiges Forum mit tollen Experten! :thumbup::thumbup::thumbup:

    Vielleicht kann ich den Chef auch endlich mal dazu bewegen, mir Win7 zu installieren, dann wären die Probleme gelöst und ich könnte den UC-Client auf dem RD installieren. Andererseits lernt man wieder was dazu, wenn man mehr Praxis und eine solch tolle Hilfe hat wie hier!

  • Parameter an Script auf Remotedesktop übergeben?

    • bigeasy76
    • 27. Juni 2018 um 12:43

    Hallo autoiter

    ich weiss nicht, ob man das das gleiche Netzwerk nennen kann, ich verbinde mittels VPN Verbindung ins Firmennetzwerk, dann mit Remotedesktop auf meine Remote-Maschine.

    Ja, der UC-Client kann die Rufnummer als Parameter ans Script übergeben. Wenn ich nun über ein Netzlaufwerk eine txt mit der Nummer befülle, wie kann ich es bewerkstelligen, dass das Script auf der Remotemaschine beginnt "zu arbeiten", sobald die Nummer im txt reingeschrieben wurde? Ich glaube, das müsste ich dann noch manuell starten, oder was meinst Du?

    Oder was mir gerade so einfällt, vielleicht könnte ich ein Script gleich auf dieses Netzlaufwerk packen und der UC-Client kann dieses dann evtl. aufrufen und die Nummer übergeben...?

  • Parameter an Script auf Remotedesktop übergeben?

    • bigeasy76
    • 27. Juni 2018 um 08:28

    Hallo zusammen

    ich habe eine grundsätzliche Frage, vielleicht hat jemand hier schon ein bisschen Erfahrung, leider fand ich beim googlen nicht viel hilfreiches.

    Das Problem ist folgendes: Auf meinem lokalen Client habe ich einen UC-Client zum telefonieren übers Firmennetzwerk installiert (da auf Remote-PC Win XP läuft und dieser UC-Client nicht für XP taugt, kann ich ihn nicht dort installieren). Die Idee wäre nun, dass bei einem Anruf bei aktiviertem Remotedesktop die Rufnummer vom lokalen Client an den Remote-PC übergeben wird und ein AutoIt-Script öffnet auf dem Remote-PC ein Fenster, um die Rufnummer einzugeben, damit der entsprechende Datensatz angezeigt wird, falls vorhanden.

    Auf dem lokalen PC kann der UC-Client bei einem Anruf autom. ein Script aufrufen, zu welchem die Telefonnummer als Parameter übergeben wird. Aber wie krieg ichs hin, dass die Rufnummer nun ans Script auf dem Remotedesktop übergeben wird?

    Die einzigste Idee, von der ich las: Auf dem Remotedesktop ein von beiden Seiten beschreibbares txt file machen, in das die Nr übergeben wird. Dann ein Remotescript über rdp starten, welches diese Nr dann verarbeitet. Kann ich mit AutoIt überhaupt ein file auf einem Remote-PC beschreiben?

    Hat hier jemand Ideen, ob das mit AutoIt überhaupt realisierbar ist? Oder gibts evtl. einen anderen Weg als oben beschrieben? Vielen Dank für Tipps zu diesem Problem!

  • Finde Fehler nicht...

    • bigeasy76
    • 27. Juni 2018 um 08:04

    Hi AutoMit

    sorry wegen der späten Antwort. Ich resp. die Firma nutzt lox24.eu, günstig und gute Möglichkeiten.

  • Finde Fehler nicht...

    • bigeasy76
    • 17. Juni 2018 um 15:42

    Ah ja, ich glaube, jetzt kapier ichs, ....

    Code
    $msg = GUIGetMsg(1)
       Switch $msg[1]
       Case $hGUI1
          Switch $msg[0]

    GUIGetMsg(1) liefert den Array, $msg[1] enthält dann den Handle des GUI's, also hier entweder $hGUI1 oder $hGUI2 und unten $msg[0] enthält dann die ID des Controls.

    Betreffend des Codes an sich hab ich schon erwartet, dass das aus Profi-Sicht Geschnipsel ist. Ist erst mein zweites Script und hab da immer mal wieder Funktionen hinzugefügt. Aber werd das versuchen, selber mal ein bisschen zu überarbeiten.

    Aber trotzdem vielen Dank für die Hilfe bei diesem Problem hier! :thumbup::thumbup:

  • Finde Fehler nicht...

    • bigeasy76
    • 17. Juni 2018 um 14:17

    Ich kapier das irgendwie nicht, dann müsste das so doch gehen:

    Code
    Case $idMUSTER[0] To $idMUSTER[$loop - 1]
             GUICtrlSetData($idTEXT, $text[$msg - $muster[0]])
  • Finde Fehler nicht...

    • bigeasy76
    • 17. Juni 2018 um 13:27
    Zitat von alpines

    Du solltest lieber prüfen welchen Case du gerade hast und diesen Index nehmen, also: $text[$msg - $muster[0]]

    Ich glaube, Du meinst das so, dass ich beim Case abfragen sollte, welcher genau das ist, aber das versuchte ich schon so und dann ohne For-Schleife:

    Code
    Case $idMUSTER[$i]
      GUICtrlSetData($idTEXT, $text[$i])

    und eine For-Schleife für jeden einzelnen Case funktionierte auch nicht, innerhalb von Switch seien keine For-Schleifen erlaubt. Wie kann ich denn das auf einfache weise rausfinden, welcher Wert des Arrays gerade übergeben wird? Eine Funktion gibts ja meines Wissens dafür nicht. Muss ich oberes Beispiel tatsächlich 5x wiederholen?

  • Finde Fehler nicht...

    • bigeasy76
    • 17. Juni 2018 um 11:41

    Hallo zusammen

    ich hab da ein Script zum Versenden von SMS über einen Webdienst, im Grunde funktioniert auch alles, nur wird nun bei Klick auf einen der 5 Buttons $idMUSTER[] stets der Text von Button 5 $idMUSTER[4] ins Textfeld eingefügt und ich finde einfach keine Erklärung dafür. In den Tooltips wird korrekt der jeweilige Text angezeigt, was ja heissen dürfte, die Buttons werden korrekt angezeigt. Auch im Teil des Scripts, der den Text aus der .txt ins Textfeld kopiert, sehe ich keinen Fehler.

    Könnte mir hier bitte jemand sagen, was hier das Problem sein könnte? Danke schonmal.


    C
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <ColorConstants.au3>
    #include <StaticConstants.au3>
    #include <File.au3>
    #include <FileConstants.au3>
    
    
    Global $loop = 5 ;~Anzahl Buttons definieren
    
    ;~ SMS-Vorlagen aus txt Datei in Array einlesen
    Global $FILE[$loop]
    Global $FileOpen[$loop]
    Global $text[$loop]
    Global $idMUSTER[$loop]
    Global $muster[$loop]
    
    For $i = 0 To $loop - 1
       $FILE[$i] = "muster" & $i & ".txt"
       $FileOpen[$i] = FileOpen($FILE[$i])
       $text[$i] = FileRead($FileOpen[$i])
       FileClose($FileOpen[$i])
    Next
    
    ;~ gui1 erstellen
    Global $hGUI1 = GUICreate("SMS Box", 600, 680)
    Global $idVORWAHL = GUICtrlCreateCombo("076", 10, 5, 50, 20)
       GUICtrlSetData(-1, "077|078|079")
    Global $idNR = GUICtrlCreateInput("", 60, 5, 60, 20, $ES_NUMBER)
       GUICtrlSetLimit(-1, 7)
    Global $idTEXT = GUICtrlCreateEdit("", 10, 60, 300, 200, $ES_MULTILINE)
       GUICtrlSetLimit(-1, 800)
    Global $idSENDEN = GUICtrlCreateButton("Senden", 30, 280, 85, 25)
    Global $idENDE = GUICtrlCreateButton("Schliessen", 130, 280, 85, 25)
    Global $idDEL = GUICtrlCreateButton("Löschen", 230, 280, 85, 25)
    Global $idLABEL1 = GUICtrlCreateLabel("<- Nr", 120, 8, 50, 20)
    Global $idCLIPBOARD = GUICtrlCreateButton("Nr. aus Clipboard einfügen", 150, 5, 145, 22)
       GUICtrlSetColor(-1, $COLOR_RED)
    Global $idLABEL6 = GUICtrlCreateLabel("Absender ->", 360, 8, 100, 20)
    Global $idABSENDER = GUICtrlCreateCombo("0442775658", 420, 5, 100, 20)
       GUICtrlSetData(-1, "0442775656")
    Global $idLABEL2 = GUICtrlCreateLabel("0", 163, 40, 30, 20)
       GUICtrlSetColor(-1, $COLOR_RED)
    Global $idLABEL3 = GUICtrlCreateLabel("Anz. Zeichen (min. 5/max. 800):", 10, 40, 152, 20)
    Global $idLABEL4 = GUICtrlCreateLabel("0", 290, 40, 30, 20)
       GUICtrlSetColor(-1, $COLOR_RED)
    Global $idLABEL5 = GUICtrlCreateLabel("Anz. SMS (max. 5):", 190, 40, 100, 20)
    Global $idLABEL6 = GUICtrlCreateLabel("SMS Vorlagen (Hover über Button für Text):", 330,65,220,20)
    GUICtrlCreateGraphic(310,60,290,1,$SS_BLACKRECT)
    
    For $i = 0 To $loop - 1
       $idMUSTER[$i] = GUICtrlCreateButton("Vorlage "& $i+1, 330, 90+($i)*30, 70, 20)
       GUICtrlSetTip(-1, $text[$i])
    Next
    
    For $i = 0 To $loop - 1
       GUICtrlCreateLabel("bearbeiten -->", 410, 93+($i)*30 , 70, 20)
    Next
    
    For $i = 0 To $loop - 1
       $muster[$i] = GUICtrlCreateButton("", 490, 90+($i)*30, 20, 20)
    Next
    
    Global $oIE = ObjCreate("Shell.Explorer.2")
    Global $GUIActiveX = GUICtrlCreateObj($oIE, 10, 330, 580, 285)
    
    ;~ gui2 erstellen
    Global $hGUI2 = GUICreate("Text bearbeiten:", 300, 250)
    Global $text_neu = GUICtrlCreateEdit("", 1, 1, 298, 198, $ES_MULTILINE)
    Global $speichern = GUICtrlCreateButton("Sichern und Schliessen", 50, 210, 200, 25)
    
    GUISetState(@SW_SHOW, $hGUI1)
    GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
    ControlFocus("", "", 10)
    
    
    ;~ Abfrage Nummer, Text, Absenden des SMS
    While 1
       $msg = GUIGetMsg(1)
       Switch $msg[1]
       Case $hGUI1
          Switch $msg[0]
    
          Case $GUI_EVENT_CLOSE, $idENDE
             Exit
    
          Case $idDEL
             GUICtrlSetData($idTEXT, "")
             GUICtrlSetData($idNR, "")
    
          Case $muster[0] To $muster[$loop - 1]
             For $i = 0 To $loop - 1
                GUISetState(@SW_SHOW, $hGUI2)
                GUICtrlSetData($text_neu, $text[$i])
                Global $idGUI = $i
             Next
    
          Case $idMUSTER[0] To $idMUSTER[$loop - 1]
             For $i = 0 To $loop - 1
                GUICtrlSetData($idTEXT, $text[$i])
             Next
    
    ;~       Nummer aus Zwischenablage auslesen, formatieren, eingeben
          Case $idCLIPBOARD
             Local $cbNR = ClipGet()
             If $cbNR = "" Then
                MsgBox($MB_OK, "Kein Inhalt", "Die Zwischenablage ist leer!")
             ElseIf StringIsDigit($cbNR) = 0 Then
                $cb = StringRegExpReplace($cbNR, '\D', '')
                If StringLen($cb) = 10 Then
                   $cbPREFIX = StringLeft($cb, 3)
                   $cbNUMBER = StringRight($cb, 7)
    
                   If StringRegExp($cbPREFIX, "07[6789]") = 0 Then
                      MsgBox($MB_OK, "Vorwahl ungültig", "Die Vorwahl " & $cbPREFIX & " ist ungültig!" & @LF & @LF & "Folgende Vorwahlen sind gültig:" & @LF & "076" & @LF & "077" & @LF & "078" & @LF & "079")
                   ElseIf StringLeft($cbNUMBER, 1) = "0" Then
                      MsgBox($MB_OK, "Nummer ungültig", "Die Telefonnummer beginnt mit 0:" & @LF & $cbPREFIX & "/" & $cbNUMBER)
                   Else
                      GUICtrlSetData($idVORWAHL, $cbPREFIX)
                      GUICtrlSetData($idNR, $cbNUMBER)
                   EndIf
                Else
                   MsgBox($MB_OK, "Nummer ungültig", "Die Nummer ist ungültig (Zu wenig/viel Zeichen)!")
                EndIf
             EndIf
    
    ;~       Nr und Textzeichenanzahl (>4) prüfen, Umlaute anpassen, URL zum Absenden aufrufen
          Case $idSENDEN
             If StringLen(GUICtrlRead($idNR)) < 7 Then
                MsgBox($MB_OK, "Nummer zu kurz", "Die eingegebene Telefonnummer enthält weniger als 7 Ziffern!")
             ElseIf StringLen(GUICtrlRead($idTEXT)) < 5 Then
                MsgBox($MB_OK, "Text zu kurz", "Der Text muss mindestens 5 Zeichen enthalten")
             Else
                $ABSENDER = GUICtrlRead($idABSENDER)
                $ABSENDER = "0041" & StringRight($ABSENDER, 9)
                $PREFIX = StringRight(GUICtrlRead($idVORWAHL), 2)
                $NR = "0041" & $PREFIX & GUICtrlRead($idNR)
                $TEXT = URLEncode(GUICtrlRead($idTEXT))
    
                If MsgBox($MB_OKCANCEL, "SMS Senden?", "Von: " & $ABSENDER & @LF & "An: " & GUICtrlRead($idVORWAHL) & GUICtrlRead($idNR) & @LF & @LF & "Text:" &@LF & GUICtrlRead($idTEXT)) = 1 Then
    ;~             If MsgBox($MB_OKCANCEL, "SMS Senden?", "An:    " & $NR & @LF & "mit folgendem Text: " & $TEXT) = 1 Then ; formatierte Nummer und Text
                   $oIE.navigate("http://www.lox24.eu/API/httpsms.php?konto=xxxx&password=xxxxx&service=xxxx&from=" & $ABSENDER & "&to=" & $NR & "&text=" & $TEXT)
                EndIf
             EndIf
          EndSwitch
    
       Case $hGUI2
          Switch $msg[0]
          Case $speichern
             $neuer_text = GUICtrlRead($text_neu)
             $datei = "muster" & $idGUI & ".txt"
             $open = FileOpen($datei, 2)
             FileSetPos($open, 0, 0)
             FileWrite($open, $neuer_text)
             FileClose($open)
             $text[$idGUI] = $neuer_text
             GUICtrlSetTip($idMUSTER[$idGUI], $neuer_text)
             GUISetState(@SW_HIDE, $hGUI2)
          EndSwitch
       EndSwitch
    WEnd
    
    ;~ Funktion für Angabe der Anzahl eingegebener Zeichen resp. Anzahl SMS
    Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $hWndFrom, $iIDFrom, $iCode, $sText, $iLen
        $hWndFrom = $lParam
        $iIDFrom = _WinAPI_LoWord($wParam)
        $iCode = _WinAPI_HiWord($wParam)
        Switch $iIDFrom
            Case $idTEXT
                Switch $iCode
                    Case $EN_CHANGE
                        $sText = GUICtrlRead($idTEXT)
                        $iLen = StringLen($sText)
                        GUICtrlSetData($idLABEL2, $iLen)
                        GUICtrlSetData($idLABEL4, Int(($iLen - 1) / 160) + 1)
                EndSwitch
            Case Else
        EndSwitch
        Return $GUI_RUNDEFMSG
     EndFunc
    
    Func URLEncode($sData)
        Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
        Local $nChar
        $sData=""
        For $i = 1 To $aData[0]
            ; ConsoleWrite($aData[$i] & @CRLF)
            $nChar = Asc($aData[$i])
            Switch $nChar
                Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
                    $sData &= $aData[$i]
                Case 32
                    $sData &= "+"
                Case Else
                    $sData &= "%" & Hex($nChar,2)
            EndSwitch
        Next
        Return $sData
     EndFunc
    Alles anzeigen
  • String aktualisieren klappt nicht

    • bigeasy76
    • 11. Juni 2018 um 21:17

    Dieser Scriptteil allein funktionierte bei mir auch, eingebunden im restlichen Script klappte es wieder nicht, aber hab das Problem nun endlich eruiert. Als ich in der ursprünglichen Antwort einen Klick auf einen Button erklären wollte, der im restlichen Teil des Scriptes geklickt wird, bin ich drauf gekommen. Dieser Button in einem Foxpro-Fenster fügt in einem Formular Teile des Clipboardes ein, andere Teile des Formulars werden über das Script bearbeitet. Und da Name eben aus Clipboard und nicht aus Script kommt und ich dummerweise vergass, den neuen String wieder ins Clipboard zu laden, haute das natürlich nicht hin.

    Diesen Bock hab also ich geschossen, darum sorry wegen des Aufwandes und trotzdem vielen Dank für die Hilfe! :Face:

  • String aktualisieren klappt nicht

    • bigeasy76
    • 11. Juni 2018 um 20:26

    Naja, der String ist jeweils sehr lange und wenn ich alles, was ich muss, wegschneide, resp. anonymisiere, bleibt nicht mehr viel davon übrig, der Name Groebel ist auch ein Muster mit Umlaut:

    Spoiler anzeigen

    Weitere Angaben

    Geschlecht männlich Höchste Bildungsstufe Sekundarstufe II - ISCED 3 Ausbildung Berufliche Grundbildung EFZ oder äquivalent Gesuchte Arbeitsregionen

    Dorneck, Thierstein

    Basel-Landschaft, Basel-Stadt

    Führerausweise B

    Personalien / Kontaktdaten des Kandidaten

    Name / Vorname GROEBEL HANS Staatsangehörigkeit CH Adresse Musterstrasse 14, 8000 Zürich Mobiltelefon +41 77 777 77 77 E-Mail hans.mustermann@muster.ch


    Und eben kommt stets der gleiche String wieder raus. Hier nochmals der Code:

    Code
    Local $insText = ClipGet()
       Global $Name = StringRegExpReplace($insText, '(?s).+Name / Vorname\v+(.+?)\v.*', '$1')
       Global $NameAlt = $Name
       Global $aReplaceChars[8][2] = [[7],['AE','Ä'],['OE','Ö'],['UE','Ü'],['ae','ä'],['oe','ö'],['ue','ü'],['ß','ss']]
    
       For $i = 1 To $aReplaceChars[0][0]
        $Name = StringReplace($Name, $aReplaceChars[$i][0], $aReplaceChars[$i][1], 0, 1)
     Next
       $insText = StringReplace($insText, $NameAlt, $Name, 0, 1)
  • String aktualisieren klappt nicht

    • bigeasy76
    • 11. Juni 2018 um 19:50

    Naja, auch wenn ich die if-Verzweigung weglasse funktioniert das Ganze nicht, hatte es ja auch schon so versucht:

    Code
    $insTextNeu = StringReplace($insText, $NameAlt, $Name, 0, 1)

    Und wie schon erwähnt kommt jeweils der gleiche String raus, wie reingeht

  • String aktualisieren klappt nicht

    • bigeasy76
    • 11. Juni 2018 um 19:21

    Naja, habs mir nochmal angesehen und das einzigste, was mir noch eingefallen wäre, dass ich die Variable am Anfang umbennen muss, das wars aber nicht. Aber wenn ich hier auch weitergekommen wäre, hätte ich mich auch nicht ans Forum gewandt ;)

  • String aktualisieren klappt nicht

    • bigeasy76
    • 11. Juni 2018 um 18:23

    Meinst Du das so, dass die letzte Zeile also heissen müsste:

    Code
    If $insText = StringReplace($insText, $NameAlt, $Name) Then MsgBox($MB_OK, "", "Konnte String aktualisieren")

    Da dies nicht klappt, scheine ich Dich falsch zu verstehen, oder?

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™