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

Beiträge von BugFix

  • Wenn IPAdresse =

    • BugFix
    • 15. November 2013 um 12:49

    Kennst du LIKE aus SQL? - Das habe ich adäquat für AutoIt umgesetzt: Suche mit LIKE
    Mit den Platzhaltern für ein oder beliebig viele Zeichen kannst du das simpel umsetzen.

    [autoit]


    If _Search_LIKE(@IPAddress1, "172.25.10.%" Then ; IP ist in dieser Range

    [/autoit]
  • Kalender Creator

    • BugFix
    • 15. November 2013 um 12:34

    Ich habe gerade in Rosetta Code das Thema Kalender in AutoIt umgesetzt.
    Aufgabe war, einen Lineprinter zu simulieren mit vorgegebenen Druckspalten und dort einen Kalender auszugeben.

    Ich habe die Lösung jetzt mal noch erweitert und eine Terminalsimulation per GUI als Option integriert. Wer also mal schnell einen Jahreskalender ausdrucken will in variabler Anzahl Monate nebeneinander (1, 2, 3, 4, 6, 12 sind möglich) kann sich das einfach in die Konsole ausgeben lassen und dann in eine druckbare datei kopieren.
    Viel Spaß.

    CreateCalendar.au3
    [autoit]


    #Region - TimeStamp
    ; 2013-11-15 12:22:51
    #EndRegion - TimeStamp

    [/autoit] [autoit][/autoit] [autoit]

    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzahl Zeichen in jeder Zeile, Minimum ist 20 - ein Monat.
    Global $iPrintSize = 80

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzahl Monate, die nebeneinander gedruckt werden sollen. Mit "0" wird das automatisch errechnet.
    ; Die Zahl wird korrigiert, wenn damit kein rechteckiger Ausdruck möglich ist.
    ; Wenn der Druckbereich zu schmal ist für die gegebene Anzahl Monate, wird diese automatisch errechnet.
    Global $iSideBySide = 3

    [/autoit] [autoit][/autoit] [autoit]

    ; Anzahl Leerzeichen zwischen den Monaten.
    Global $iSpace = 4

    [/autoit] [autoit][/autoit] [autoit]

    ; Titel festlegen
    Global $sTitle = '[ MEIN KALENDER ]'

    [/autoit] [autoit][/autoit] [autoit]

    ; Ausgabe in Konsole und/oder Terminalsimulation (GUI)
    Global Const $_CONSOLE = 1
    Global Const $_TERMINAL = 2
    Global Const $_BOTH = BitOR($_CONSOLE, $_TERMINAL)

    [/autoit] [autoit][/autoit] [autoit]

    ; Array mit Zellen-Labeln für Terminalsimulation
    Global $aRawCol[1][2]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _CreateCalendar( 2013, $_BOTH )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateCalendar($_iYear, $_iOutput)
    Local $aMon[12] = [' Januar ', ' Februar ', ' März ', _
    ' April ', ' Mai ', ' Juni ', _
    ' Juli ', ' August ', ' September ', _
    ' Oktober ', ' November ', ' Dezember ']
    Local $sHead = 'Mo Di Mi Do Fr Sa So'
    Local $aDaysInMonth[12] = [31,28,31,30,31,30,31,31,30,31,30,31]
    If _DateIsLeapYear($_iYear) Then $aDaysInMonth[1] = 29

    [/autoit] [autoit][/autoit] [autoit]

    ; == Datum mit in Wochentagstabelle für das gesamte Jahr verknüpfen
    Local $aAllDaysInMonth[6][7][12] ; [ Zeilen ][ Wochentage ][ Monate ]
    Local $iDay = 1, $iShift
    For $i = 1 To 12
    $iShift = _DateToDayOfWeekISO($_iYear, $i, 1) -1
    For $j = 0 To 5
    For $k = $iShift To 6
    $aAllDaysInMonth[$j][$k][$i-1] = $iDay
    $iDay += 1
    If $iDay > $aDaysInMonth[$i-1] Then ExitLoop(2)
    Next
    $iShift = 0
    Next
    $iDay = 1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; == Prüfe Anzahl Monate nebeneinander, berechnen wenn erforderlich
    If $iSideBySide > 0 Then
    If $iPrintSize < ($iSideBySide *(20 +$iSpace) -$iSpace) Then $iSideBySide = 0
    EndIf
    Switch $iSideBySide
    Case 0
    $iSideBySide = Int($iPrintSize /(20 +$iSpace))
    If $iPrintSize < 20 Then Return _PrintLine($_iOutput, 'Escape: Size Error')
    If $iPrintSize < (20 +$iSpace) Then $iSideBySide = 1
    Case 5
    $iSideBySide = 4
    Case 7 To 11
    $iSideBySide = 6
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    ; == Ausgabe auch in simuliertes Terminal
    If BitAND($_iOutput, $_TERMINAL) Then
    Local $iLines = 12 /$iSideBySide *8 + 6
    ReDim $aRawCol[$iLines][$iPrintSize]
    GUICreate('Simulated Printer', $iPrintSize*8, $iLines*16) ; Größe jeder Zelle: 8 px * 16 px
    GUISetBkColor(0x00008E)
    GUISetFont(9, 400, Default, 'Courier New')

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $iLines -1
    For $j = 0 To $iPrintSize -1
    $aRawCol[$i][$j] = GUICtrlCreateLabel('', $j*8, $i*16, 8, 16, 2) ; $ES_RIGHT = 2
    GUICtrlSetColor(-1, 0xFFFF22)
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; == Leerzeichenstring erstellen
    Local $sSpace = ''
    For $i = 1 To $iSpace
    $sSpace &= ' '
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; == Header drucken
    _PrintLine($_iOutput, @LF)
    _PrintLine($_iOutput, $sTitle, @LF)
    _PrintLine($_iOutput, StringRegExpReplace($_iYear, '(\d)(\d)(\d)(\d)', '$1 $2 $3 $4'), @LF)

    [/autoit] [autoit][/autoit] [autoit]

    ; == Daten für jede Zeile zusammenstellen/drucken in Abhängigkeit zur Anzahl Monate nebeneinander
    Local $sLine, $iRight, $sTmp1, $sTmp2
    For $n = 0 To 12 /$iSideBySide -1
    $sTmp1 = ''
    $sTmp2 = ''
    For $z = 0 To $iSideBySide -1
    $sTmp1 &= $aMon[$iSideBySide *$n+$z] & $sSpace
    $sTmp2 &= $sHead & $sSpace
    Next
    _PrintLine($_iOutput, StringTrimRight($sTmp1, $iSpace))
    _PrintLine($_iOutput, StringTrimRight($sTmp2, $iSpace))
    For $j = 0 To 5
    $sLine = ''
    For $i = 1 To $iSideBySide
    For $k = 0 To 6
    $iRight = 3
    If $k = 0 Then $iRight = 2
    $sLine &= StringRight(' ' & $aAllDaysInMonth[$j][$k][$iSideBySide*$n+$i-1], $iRight)
    Next
    If $i < $iSideBySide Then $sLine &= $sSpace
    Next
    _PrintLine($_iOutput, $sLine)
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If BitAND($_iOutput, $_TERMINAL) Then
    Do
    Until GUIGetMsg() = -3
    EndIf
    EndFunc ;==>_CreateCalendar

    [/autoit] [autoit][/autoit] [autoit]

    Func _PrintLine($_iOutput, $_sLine, $_sLF='')
    Local Static $iLine = 0
    If BitAND($_iOutput, $_CONSOLE) Then
    Local $iLen = StringLen($_sLine)
    Local $sSpace = '', $sLeft = ''
    For $i = 1 To $iPrintSize-1
    $sSpace &= ' '
    Next
    If $iLen < $iPrintSize Then $sLeft = StringLeft($sSpace, Int(($iPrintSize-$iLen)/2))
    ConsoleWrite($sLeft & $_sLine & $_sLF & @LF)
    EndIf
    If BitAND($_iOutput, $_TERMINAL) Then
    Local $aLine = StringSplit($_sLine, ''), $iIndexStart = 0
    If $aLine[0] < $iPrintSize Then $iIndexStart = Int(($iPrintSize-$aLine[0])/2)
    For $i = 1 To $aLine[0]
    GUICtrlSetData($aRawCol[$iLine][$i+$iIndexStart], $aLine[$i])
    Next
    EndIf
    $iLine += 1
    If $_sLF <> '' Then $iLine += 1
    EndFunc ;==>_PrintLine

    [/autoit]
    Bsp. Konsolenausgabe
    Code
    [ MEIN KALENDER ]
    
    
                                        2 0 1 3
    
    
                 Januar                 Februar                   März        
          Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So
              1  2  3  4  5  6                 1  2  3                 1  2  3
           7  8  9 10 11 12 13     4  5  6  7  8  9 10     4  5  6  7  8  9 10
          14 15 16 17 18 19 20    11 12 13 14 15 16 17    11 12 13 14 15 16 17
          21 22 23 24 25 26 27    18 19 20 21 22 23 24    18 19 20 21 22 23 24
          28 29 30 31             25 26 27 28             25 26 27 28 29 30 31
    
                  April                   Mai                     Juni        
          Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So
           1  2  3  4  5  6  7           1  2  3  4  5                    1  2
           8  9 10 11 12 13 14     6  7  8  9 10 11 12     3  4  5  6  7  8  9
          15 16 17 18 19 20 21    13 14 15 16 17 18 19    10 11 12 13 14 15 16
          22 23 24 25 26 27 28    20 21 22 23 24 25 26    17 18 19 20 21 22 23
          29 30                   27 28 29 30 31          24 25 26 27 28 29 30
    
                  Juli                   August                 September     
          Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So
           1  2  3  4  5  6  7              1  2  3  4                       1
           8  9 10 11 12 13 14     5  6  7  8  9 10 11     2  3  4  5  6  7  8
          15 16 17 18 19 20 21    12 13 14 15 16 17 18     9 10 11 12 13 14 15
          22 23 24 25 26 27 28    19 20 21 22 23 24 25    16 17 18 19 20 21 22
          29 30 31                26 27 28 29 30 31       23 24 25 26 27 28 29
                                                          30                  
                 Oktober                November                Dezember      
          Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So    Mo Di Mi Do Fr Sa So
              1  2  3  4  5  6                 1  2  3                       1
           7  8  9 10 11 12 13     4  5  6  7  8  9 10     2  3  4  5  6  7  8
          14 15 16 17 18 19 20    11 12 13 14 15 16 17     9 10 11 12 13 14 15
          21 22 23 24 25 26 27    18 19 20 21 22 23 24    16 17 18 19 20 21 22
          28 29 30 31             25 26 27 28 29 30       23 24 25 26 27 28 29
                                                          30 31
    Alles anzeigen


    So sieht die Terminal Simulation aus:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    calendar_terminal.png 31,12 kB – 0 Downloads Create_Calendar.au3 4,95 kB – 376 Downloads
  • Nach dem compilen, Fehlermeldungen verallgemeinern oder entfernen?

    • BugFix
    • 8. November 2013 um 09:41
    Zitat von SgtIgram

    ich verstehe den sinn daran jemanden nicht zwingend wissen zu lassen das es sich um ein autoit programm geht und an welcher stelle, was passiert...


    ..und ich finde die Fragestellung selbst absurd. Es will mir einfach nicht in den Schädel, dass man sich so konsequent gegen Error-Handling sperrt. Eine Logdatei ist alles Mögliche - aber garantiert kein Error-Handling!
    Das, was hier beim kompilierten Skript abgefangen werden soll, tritt doch niemals auf, wenn ein ordentliches Error-Handling existiert. Verzeiht meine Sturheit, aber ich sehe hier nur kein wirkliches Problem.
    Ich komm mir gerade vor, wie ein Prediger: "Nimm nicht Weg A, dort fällst du in ein Loch" - "Ich weiß, dass da ein Loch ist, aber sag mir, wie ich am Besten in das Loch falle, ohne mir weh zu tun." :wacko:

  • Nach dem compilen, Fehlermeldungen verallgemeinern oder entfernen?

    • BugFix
    • 7. November 2013 um 19:43
    Zitat von attaxx

    kommen wir zurueck zu meiner Frage


    Das war eine Antwort auf deine Frage! Das Vermeiden und Abfangen von Fehlern ist die einzig akzeptable Lösung.
    Du willst doch nicht ernsthaft Fehlbedienungen ermöglichen und wartest jetzt auf die Eierlegende Wollmilchsau, die diese Fehler für dich abstellt.. :wacko:

  • FSK im Internet (Info)

    • BugFix
    • 7. November 2013 um 16:57

    Ich war ein paar Tage nicht on und weiß daher nicht, was genau hier gesagt und als anstößig empfunden wurde.
    Grundsätzlich bin ich gegen überzogene Reglementierung. Ob die Inhalte tasächlich irgendwelche FSK-Kriterien tangiert haben weiß ich nicht, hege aber meine Zweifel daran.
    Wenn in der SB tote Hose ist, stört es mich persönlich nicht wenn artfremde Themen bearbeitet werden. Jedoch sollte sofort bei Auftreten von AutoIt-relevanten Postings darauf gebührend Rücksicht genommen werden.
    Bei allen Themen macht der Ton die Musik. Und ein Gag wird nicht lustiger, wenn man diesen in 30 weiteren Varianten wiedergibt.
    Also bei allem Maß halten und allen ist gedient.
    Ich denke nicht, dass Jugendgefährdung in irgendeiner Weise hier im Raum steht - man kann seine Bewertung von Gelesenem auch mit der falschen Brille betrachten. Extremismus sollte in jeder Richtung unterbleiben.

  • Nach dem compilen, Fehlermeldungen verallgemeinern oder entfernen?

    • BugFix
    • 7. November 2013 um 16:39
    Zitat von attaxx

    aber z.b. dass dann Arrayfehlermeldungen dann nicht als Arrayfehlermeldung erscheinen sondern als z.B: Skript hat ein Fehler -> Crash


    Sorry - aber so etwas DARF in einem kompilierten Skript nicht auftreten. Dann hast du fehlerhaft programmiert.
    Bis zu 60 % macht das ordentliche Errorhandling in einem Programm aus. Du mußt jede noch so absurde Situation vorhersehen und abfangen. Crashen darf ein Skript niemals.
    Die einzig zulässigen Fehlermeldungen sind Infos an den User, wenn er Fehleingaben getätigt hat.

  • SSD - Hilfe bei Kaufentscheidung

    • BugFix
    • 3. November 2013 um 09:58

    Wenn deine Rechner(bzw. deine Hardwarekomponenten) in der Kompatibilitätsliste ist, kannst du auf Win7 ja ein Virtual XP nutzen. Mit HDD ist das relativ lahm beim Laden aber auf einer SSD gehts geschmeidig fix. Insofern habe ich bei mir auf Dualboot verzichtet und nutze XP bei Bedarf in der Virtual - Umgebung.

  • _IENavigate Error bei Lokaler Html

    • BugFix
    • 3. November 2013 um 09:44

    Vielleicht solltest du dein Embedded IE auch mal in eine GUI einbinden? Einfach nur das Objekt erstellen reicht nicht, von allein wird es sich in keine GUI einnisten. ;)
    Schau dir einfach mal das Hilfebsp. an.

  • doppelte Einträge finden, jedoch nur Text bis zu bestimmten Zeichen vergleichen

    • BugFix
    • 3. November 2013 um 09:35
    Zitat von sc4ry

    Kann ich per SQL mitgeben, dass er den a.title nur bis zu der Zeichenfolge " - " vergleichen soll?


    Ja klar, deine Vergleichsmethode ist eigentlich einer SQL-DB unwürdig (mit "="). Damit findet man ja wirklich nur einen sehr fixen Datenbestand. Hast du schonmal was von LIKE gehört? ;) Damit kannst du die Suche wesentlich flexibler gestalten. LIKE und IN sind meine persönlich am Häufigsten genutzten Suchmethoden.

  • Keine E-Mail Benachrichtigung 2

    • BugFix
    • 3. November 2013 um 09:25
    Zitat von Bluesmaster

    Falls letzteres kann ich nur empfehlen es als Standart-Einstellung zu handhaben, so funktionieren 90% aller Foren und wüsste nicht was dagegen spricht.


    Ich bin der Meinung, weniger ist mehr. Wer möchte kann das ja aktivieren. Aber wozu soll ich unnötigen Traffic generieren, wenn es nicht gewollt ist?
    Und ich suche das Forum ja nicht nur auf, wenn es eine Antwort auf ein bestimmtes Thema gegeben hat, dazu bin ich viel zu sehr Forist. ;)

    (übrigens heißt es Standard - einfach an Standardisierung denken ;))

  • Aufhänger bei _sendMessage

    • BugFix
    • 2. November 2013 um 19:28
    Zitat von Bluesmaster

    Frage beantwortet.


    Bitte setze deinen Startpost auf "gelöst".

  • Laustärke einzelner Audiogeräte

    • BugFix
    • 31. Oktober 2013 um 22:48

    Alle AutoIt-Lösungen sind hier leider ein Rumgemurkse.
    Verwende besser NirCmd.

  • Aufhänger bei _sendMessage

    • BugFix
    • 30. Oktober 2013 um 22:04

    Hi,

    ist noch einfacher als ich dachte:

    [autoit]


    #Include <Constants.au3>
    #Include <WinAPI.au3>

    [/autoit][autoit][/autoit][autoit]

    $WM_MEINE_MESSAGE = _WinAPI_RegisterWindowMessage("MEINE_MESSAGE")

    [/autoit][autoit][/autoit][autoit]

    $hGUI = GUICreate("Test")
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    GUIRegisterMsg($WM_MEINE_MESSAGE , '_WM_MEINE_MESSAGE')

    [/autoit][autoit][/autoit][autoit]

    _SendString($hGUI, $WM_MEINE_MESSAGE, 'Test-String')

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _SendString($hWnd, $iMsg, $sString)
    _SendMessage($hWnd, $iMsg, StringLen($sString), $sString, 0, "wparam", "str")
    ; == als "wParam" übergibst du die Stringlänge, "lParam" wird nicht verwendet sondern "str"
    ; == In der Messagefunktion wird der String als Pointer empfangen
    ; == Mit Hilfe der übergebenen Stringlänge wird der Pointer in eine Struktur entladen und ausgelesen
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _WM_MEINE_MESSAGE( $hWnd , $iMsg , $wParam , $lParam)
    Local $sLen = BitAND($wParam, 0xFFFF) ; Low Word
    Local $tMsg = DllStructCreate('char[' & $sLen & ']', $lParam)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite(DllStructGetData($tMsg, 1) & @LF)
    EndFunc

    [/autoit]

    Edit:
    Wenn du mit deiner eigenen Message unterschiedliche Varianten senden möchtest (also eventuell mal String, mal Struktur), kannst du dazu auch einfach "wparam" nutzen. Du setzt dann z.B. im Lo-Byte die Länge und im Hi-Byte "-1" als Trigger dass ein String übergeben wurde.
    Hier mal im Bsp. beide Versionen

    Spoiler anzeigen
    [autoit]

    #Include <Constants.au3>
    #Include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $tag_MY_SENDSTRUCT = "int size;char timestring[8];char datestring[10];" ; == eigene Struktur-Konstante

    [/autoit] [autoit][/autoit] [autoit]

    $WM_MEINE_MESSAGE = _WinAPI_RegisterWindowMessage("MEINE_MESSAGE")

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg($WM_MEINE_MESSAGE , '_WM_MEINE_MESSAGE')

    [/autoit] [autoit][/autoit] [autoit]

    ; == Text senden
    _SendMyMessage($hGUI, $WM_MEINE_MESSAGE, 'Test-String')

    [/autoit] [autoit][/autoit] [autoit]

    ; == Struktur senden
    $tSEND = DllStructCreate($tag_MY_SENDSTRUCT)
    $pSEND = DllStructGetPtr($tSEND)
    DllStructSetData($tSEND, 1, DllStructGetSize($tSEND))
    DllStructSetData($tSEND, 2, @HOUR & ':' & @MIN & ':' & @SEC)
    DllStructSetData($tSEND, 3, @YEAR & '/' & @MON & '/' & @MDAY)
    _SendMyMessage($hGUI, $WM_MEINE_MESSAGE, $pSEND, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Func _SendMyMessage($hWnd, $iMsg, $lParam, $wParamLo=-1, $wParamHi=0)
    Local $s_lParam = 'lparam'
    If $wParamLo = -1 Then ; == lParam ist String
    $wParamLo = StringLen($lParam)
    $wParamHi = -1
    $s_lParam = 'str'
    EndIf
    _SendMessage($hWnd, $iMsg, _WinAPI_MakeLong($wParamLo, $wParamHi), $lParam, 0, "wparam", $s_lParam)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WM_MEINE_MESSAGE( $hWnd , $iMsg , $wParam , $lParam)
    Local $iLo = BitAND($wParam, 0xFFFF)
    Local $iHi = BitShift($wParam, 16)
    If $iHi = -1 And $iLo > 0 Then ; == String
    Local $sLen = $iLo
    Local $tMsg = DllStructCreate('char[' & $sLen & ']', $lParam)
    ConsoleWrite(DllStructGetData($tMsg, 1) & @LF)
    Else
    Local $tRECEIVE = DllStructCreate($tag_MY_SENDSTRUCT, $lParam)
    ConsoleWrite('Size' & @TAB & DllStructGetData($tRECEIVE, 1) & @LF)
    ConsoleWrite('Time' & @TAB & DllStructGetData($tRECEIVE, 2) & @LF)
    ConsoleWrite('Date' & @TAB & DllStructGetData($tRECEIVE, 3) & @LF)
    EndIf
    EndFunc

    [/autoit]
  • Aufhänger bei _sendMessage

    • BugFix
    • 29. Oktober 2013 um 21:25
    Zitat von Bluesmaster

    Wie versende ich einen String als Window Message?


    Ich habs bisher nicht gebraucht, würde aber versuchen den String in eine Struktur zu packen (0-terminiert) und dann versenden. Dann kannst du den empfangenen Pointer sofort in eine identische Struktur entpacken und hast den Wert.

  • Textbreite ermitteln

    • BugFix
    • 29. Oktober 2013 um 21:17

    Na die Funktion steckt doch drinnen: btMeasureClick() nimmt die Berechnung vor, mit den Werten die in der GUI eingegeben wurden.
    Das su vereinzeln sollte doch kein Problem darstellen.

  • Aufhänger bei _sendMessage

    • BugFix
    • 29. Oktober 2013 um 21:11

    Nun, das kann natürlich nicht funktionieren, da du den Hook auf einem nicht existierenden Fensetr aufsetzt!

    [autoit]

    $autoItWin = WinGetHandle( AutoItWinGetTitle() )

    [/autoit]

    Das gibt es gar nicht zu diesem Zeitpunkt.Verwende einfach mal:

    [autoit]

    $autoItWin = WinGetHandle( WinGetTitle('[ACTIVE]') )

    [/autoit]

    , dann siehst du, dass es funktioniert. ;)

  • Aufhänger bei _sendMessage

    • BugFix
    • 29. Oktober 2013 um 19:08

    Also ich kann einen Crash nur reproduzieren, wenn die Mainloop ohne jede Unterbrechung läuft.
    Ich arbeite viel mit Message-Hooks und hatte bisher noch nie einen permanenten Fehler. AutoIt ist nicht optimal im Umgang mit Callbacks, aber trotzdem sind Crashs recht selten.
    Ich habe z.B. ein Kontextmenü-Ctrl darauf basierend erstellt und das habe ich noch nie gecrasht.

  • Textbreite ermitteln

    • BugFix
    • 29. Oktober 2013 um 18:31

    Guckst du: Textmeter

  • Aufhänger bei _sendMessage

    • BugFix
    • 29. Oktober 2013 um 18:23

    Funktioniert tadellos, wenn du deine Programmschleife mal aus der Dauerlast nimmst und Sleep oder GuiGetMsg einbaust. ;)

    Spoiler anzeigen
    [autoit]

    #Include <Constants.au3>
    #Include <WinAPI.au3>
    #Include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hDateGuiWrapper = GUICreate( "" )
    GUISetState() ; SOBALD DAS AUSKOMMENTIERT WIRD HÄNGT SICH DAS SKRIPT AUF OHNE FEHLERMELDUNG !!!!!

    [/autoit] [autoit][/autoit] [autoit]

    $hHook = DllCallbackRegister( '_WinProc' , 'ptr' , 'hwnd;uint;long;str' ) ; 1 - Callback vorbereiten:
    $pHook = DllCallbackGetPtr( $hHook )

    [/autoit] [autoit][/autoit] [autoit]

    $autoItWin = WinGetHandle( AutoItWinGetTitle() )
    $hProc = _WinAPI_SetWindowLong( $autoItWin , $GWL_WNDPROC, $pHook ) ; 2 - Window Proc austauschen

    [/autoit] [autoit][/autoit] [autoit]

    $WM_TEST = _WinAPI_RegisterWindowMessage( "testMessage" ) ; 3 - eigene Window-Message-Art erstellen:

    [/autoit] [autoit][/autoit] [autoit]

    _SendMessage( $autoItWin , $WM_TEST , 55 , "Test" , 0 , "wparam" , "str" ) ; 4 - Testnachricht schicken

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinProc( $hWnd , $iMsg , $wParam , $lParam )
    Local $Res = _WinAPI_CallWindowProc( $hProc, $hWnd, $iMsg, $wParam, $lParam )
    if $wParam == 55 Then
    ;~ Beep( 500, 200 )
    ConsoleWrite('BLA' & @LF)
    EndIf
    Return $Res
    EndFunc

    [/autoit]


    NB: "==" ist für sensitiven Vergleich bei Strings, für alle anderen Vergleiche reicht das "=".

  • SciTE - Hotkeys unlimited, Neue Funktionen (Run selected Code, Move selection left/right/up/down u.a.)

    • BugFix
    • 29. Oktober 2013 um 12:14
    Zitat

    Excellent! Völlig unterschätzter Thread imo.


    :rolleyes: Danke.
    Ich hoffe, du hast die im Startpost verlinkte AddOn-Variante (OwnHotKeys) verwendet. Die ist noch komfortabler und umfangreicher als die Variante aus diesem Thread hier. ;)

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™