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

Beiträge von Scritch

  • Datei - letzten Zugriff "loggen"

    • Scritch
    • 29. August 2011 um 13:36

    Danke :)
    Was ist denn SRE?

  • Datei - letzten Zugriff "loggen"

    • Scritch
    • 29. August 2011 um 09:37

    Habe mein Problem nun gefunden. Die Funktion gibt auch dann einen Fehler zurück, wenn die Datei schreibgeschützt ist, oder gerade im Zugriff ist. Vll. könnte das ja in die Hilfe mal mit aufgenommen werden ;)

  • Datei - letzten Zugriff "loggen"

    • Scritch
    • 25. August 2011 um 10:43
    Zitat von DevFly

    Auszug aus der Funktionsreferenz zu _Date_Time_GetFileTime
    Bemerkungen
    Nicht alle Dateisysteme können die Daten für 'Erstellung' und 'letzten Zugriff' speichern und die Dateisysteme
    speichern diese Information auch nicht immer in der selben Art und Weise.
    Als Beispiel, in FAT-Dateisystemen hat die 'Erstellungszeit' eine Auflösung von 10 Millisekunden,
    'letzte Änderung' eine Auflösung von 2 Sekunden und 'letzter Zugriff' hat eine Auflösung von 1 Tag (im Grunde also nur das Datum).
    Daher gibt die GetFileTime Funktion möglicherweise nicht die selben Zeiten zurück, wie diese durch SetFileTime erstellt wurden.
    NTFS verzögert das Erstellen des Zeitstempels für 'letzter Zugriff' bis zu einer Stunde nach dem letzten Zugriff.

    Alles anzeigen

    Das war auch erst mein Gedanke, als ich das in der Hilfe gelesen hatte. Stuzig wurde ich dennoch, da das Skript ja teilweise funktioniert. Manche Dateien, die im selben Ordner liegen wie andere, werden fehlerhaft ausgewertet. Und das kann doch nicht sein, dass das Zugriffsdatum für die eine Datei gespeichert wird und für die nächste dann nicht... Das sieht nach reiner Willkühr aus!

    Zitat von James1337

    AutoIt läuft aber ausschließlich auf Windows.

    Dessen bin ich mir bewusst. Habe es ja auch nicht versucht unter Linux laufen zu lassen, sondern unter Windows auf eine Samba-Freigabe ;)

    Zitat von Cheater Dieter

    Wine ermöglicht es, Windows-Programme unter anderen Betriebssystemen laufen lassen. Mit Wine kannst Du diese Programme genauso installieren und laufen lassen, wie unter Windows.

    Ist uns leider nicht möglich, Wine einzusetzen!

    Zitat von James1337

    Stimmt, aber für Linux würde ich dann doch eher auf C umsteigen.

    Ich möchte für diese eine Auswertung ungern eine komplette Programmiersprache lernen :)

    Zitat von James1337

    Und diese könnte man dann automatisch jede Woche/jeden Tag mit AutoIt auslesen und verarbeiten.

    Das wäre das Optimum! Ich habe, wie von chip empfohlen, mal die log.smbd rausgesucht, wo letzte zugriffe drinnenstehen. Allerdings steht da nur folgendes drin:
    [2011/04/26 11:06:35, 0] lib/util_sock.c:get_peer_addr(1224)
    getpeername failed. Error was Der Socket ist nicht verbunden

    Und das gleiche, nur mit anderem Datum, steht über ein paar Tausend Zeilen!

  • Datei - letzten Zugriff "loggen"

    • Scritch
    • 24. August 2011 um 09:39

    Ich habe jetzt eine Alternative gefunden. und zwar die Zugriffszeiten für die nächsten 3 monate zu loggen und wenn ein neuer Zugriff erfolgt ist, diesen zu protkollieren. Die Auswertung wird täglich gemacht. Allerdings stehe ich vor einem Problem mit _Date_Time_GetFileTime. Mein Skript funktioniert teilweise, aber manchmal kommt es vor, dass irgendwie Datenmüll (/2011) in die Auswertungsdatei geschrieben wird. Also, es wird dann, meist wenn man mehrere Dateien auswertet, anstatt des Datums, "/2011" in die Spalte des Datums geschrieben. Das liegt daran, dass bei mir im Skript in dem Array von _Date_Time_GetFileTime nichts steht. Warum ist mir ein Rätsel, da eigentlich was darin stehen sollte.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <array.au3>
    #Include <Date.au3>

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

    $datumheute = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC
    ;~ MsgBox(1, "lala", $datum)

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

    $aDateien = _GetFilesFolder_Rekursiv('.', -1, 0)
    global $aAuswertung
    Global $auswertung = @ScriptDir & "\auswertung.csv"
    if not FileExists($auswertung) Then ;Existiert die Auswertungsdatei noch nicht, dann...
    _filecreate($auswertung) ;Wird sie erstellt...
    dim $aAuswertung[ubound($aDateien)][2] ;Dann wird das Array der Größe des $aDateienarrays angepasst...
    for $c = 1 to ubound($aDateien) - 1 ;und anschliessend die Inhalte von einem Array ins andere übertragen
    $aAuswertung[$c][0] = $aDateien[$c]
    Next
    Else
    _FileReadToArray($auswertung, $aAuswertung) ;muss ein csv2array sein ;Existiert die Datei bereits, wird diese in ein Array aufgenommen. Danach wird weiter unten aufs letzte Zugriffsdatum geprüft, und das Array
    EndIf ;bzw. die Datei mit den neuesten Zugrioffszeiten aktualisiert. Wurde immer nicht auf die Datei in den letzten 16Std. zugegriffen, bleibt
    ;das Datum des letzten Zugriffs bestehen
    fileopen($auswertung, 2)

    for $a = 1 to ubound($aAuswertung) - 1 ;Datei für Datei wird durchgegangen, wann der letzte Zugriffszeitpunkt war

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

    $hFile = _WinAPI_CreateFile($aAuswertung[$a][0], 2)
    $aTime = _Date_Time_GetFileTime($hFile);hier liegt der fehler mit der /2011...
    _WinAPI_CloseHandle($hFile)
    $datumletzterzugriff = _Date_Time_FileTimeToStr($aTime[1]) ;In der Variablen steht, wann das letzte Mal auf die Datei zugegriffen wurde
    if @error Then
    _ArrayDisplay($aTime)
    MsgBox(1, "lala", "lala")
    EndIf
    $letzteUhrzeit = StringRight($datumletzterzugriff, 8) ;Da das letzte Zugriffsdatum + Uhrzeit falsch formatiert von der Funktion zurückgegeben wird, muss das vorher extrahiert werden
    $letzteDatum = @YEAR & "/" & stringleft($datumletzterzugriff, 5)
    $letzterzugriff = $letzteDatum & " " & $letzteuhrzeit

    $dif = _DateDiff("h", $letzteDatum & " " & $letzteuhrzeit, $datumheute)
    if $dif < 2 Then ;Wenn dif = 16 wäre, wäre letzter Zugriff wieder letzte nacht gewesen
    $aAuswertung[$a][1] = $letzterzugriff ;Wurd innerhalb der letzten 16 Stunden auf die Datei zugegriffen, wird das Datum + Uhrzeit ins Array eingetragen
    EndIf
    Next
    for $b = 1 to ubound($aAuswertung) - 1
    FileWrite($auswertung, $aAuswertung[$b][0] & ";" & $aAuswertung[$b][1] & @CRLF) ;Schreibt Array in Datei
    Next
    fileclose($auswertung)

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

    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]
  • Datei - letzten Zugriff "loggen"

    • Scritch
    • 22. August 2011 um 15:22

    Hallo,
    wir haben hier einige Linuxserver mit Userdaten stehen, die über Samba auf den einzelnen Maschinen den nutzern zur Verfügung gestellt werden. Da sich viel Müll angesammelt hat, möchten wir nun lange nicht mehr aufgerufenen Dateien, löschen. Zuerst dachte ich ja an folgendes, jedenfals nach dem Prinzip:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>

    ; Liest die Dateizeit
    $hFile = _WinAPI_CreateFile(@ScriptDir & "\Neu AutoIt v3 Script.au3", 2)
    If $hFile = 0 Then _WinAPI_ShowError("Die Datei konnte nicht geöffnet werden")
    $aTime = _Date_Time_GetFileTime($hFile)
    _WinAPI_CloseHandle($hFile)
    MsgBox(1, "lala", _Date_Time_FileTimeToStr($aTime[1]))

    [/autoit]


    Nun haben wir aber bei uns das Problem, dass sämtliche Dateien auf dem Server in irgendeiner Art und Weise von dem System "angefasst" werden, und letzter Zugriffszeitpunkt vorheriger Tag war. Kommt evt. durch eine tägiche Datensicherung. Nun frage ich mich ob es eine Möglichkeit gibt, den Aufruf einer Datei irgendwie zu protokollieren. So könnte man dann in 3 Monaten das Protokoll auswerten, und Dateien die darin nicht vorkommen, löschen. Ich bin mir gerade nicht sicher, ob AutoIt dafür überhaupt geeignet ist, wäre aber schön wenns irgendwie ginge ;)

  • Wie findet ihr den PC ?

    • Scritch
    • 29. Juli 2011 um 10:39

    Naja, ich denke mit dem System wirst du nicht über 300 Watt kommen. 95Watt CPU, 127Watt GraKa, ~15Watt HDD, Mainboard ~25Watt und das bei einer angenommen Effizienz von 75% beim Netzteil.

  • Wie findet ihr den PC ?

    • Scritch
    • 29. Juli 2011 um 09:37

    Jein. Du brauchst keine dedizierte Soundkarte. Die sind heutzutage auf dem Mainboard und reichen für Normalanwender i. d. R.
    Dass eine Grafikkarte zu einem Board nicht kompatibel ist, habe ich noch nicht gehört. Klar, wenn du ein AGP-Board hast und eine PCIe-Karte,
    passts nicht. Aber bei neuen Komponeten ist das sicher nicht der Fall!

  • Simulierter Mausklick

    • Scritch
    • 26. Juli 2011 um 10:23

    Dass der Mausklick sofort ausgeführt wird ändert nichts an der Sache, dass die Maus zur gewünschten Position geführt wird. Das soll sie nicht. Der Klcik soll an der gewünschten Stelle gemacht werden, ohne dass der Zeiger sich überhaupt vom Fleck bewegt!

    Edit: Ich denke Controlclick() war das, was ich gesucht habe :) Dnke!

  • Simulierter Mausklick

    • Scritch
    • 26. Juli 2011 um 09:12

    Ja, kann ich. Die Maus fährt dann aber zu diesen Koordinaten ;)

  • Simulierter Mausklick

    • Scritch
    • 26. Juli 2011 um 08:26

    Hallo,
    ist es möglich einen Maustastendruck an eine bestimmte Koordinate auf dem Bildschirm zu simulieren, ohne dabei mousemove, oder mouseclick zu verwenden? Hintergrund ist, dass ich mir für manche Programme Shortcuttasten zuweisen möchte. Zum Beispiel in der Menüleiste einen Button anklicken um alle Nachrichten als gelesen zu markieren. Aber wenn dann immer erst eine Mousemove durchgeführt wird, kann ichs gleich selber machen!

  • Zeitlicher Countdown

    • Scritch
    • 22. Juli 2011 um 08:56

    So wäre eine Möglichkeit.

    [autoit]

    $ini = IniReadSection(@scriptdir & "\test.ini", "Zeit")

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

    for $i = 0 to $ini[1][1]
    sleep(1000)
    ToolTip($i)
    Next
    ;Hier gehts nach 10000 Sekunden weiter

    [/autoit]

    Wenn du

    Code
    [Zeit]
    Zeit=10000


    drinstehen hast, in deiner .ini. Nachdem er die 10000 durchgezählt hat, gehts weiter im Skript.

  • Das Verhältnis verhält sich verhältnismäßig nicht so wie es soll

    • Scritch
    • 21. Juli 2011 um 16:22

    Misterspeed hat mich überzeugt :)
    Werde jetzt die Methode nehmen, weil die in meine Anwendung auch einfacher zu implementieren ist. Das mit dem Mini- und Maximum ist auch eine nette Idee. Hatte ich gar nicht in Erwägung gezogen.

  • Dynamisches Label

    • Scritch
    • 21. Juli 2011 um 16:09

    Das Problem ist, dass ich durch eine Inputbox die Beschriftung erst später dem Label zuweisen werde! Desweiteren kann ich vorher nicht genau sagen, wie lang der längste Text ist. Und pauschal sagen, dass das Label 200Pixel breit ist, möchte ich auch nicht, da es sonst zu Überlappungen von Controls in der GUI kommt.

  • Dynamisches Label

    • Scritch
    • 21. Juli 2011 um 15:58

    Ist es möglich, ein Label dynamisch in der Größe zu verändern? Also, die Labelgröße soll halt anhand der Anzahl der Buchstaben die in diesem stehen, verändert werden. Dabei soll das Label bei meinetwegen 4 Buchstaben nicht immer 25 Pixel breit sein. Wenn z. B. "AAAA" drin steht muss es breiter sein, als wenn "IIII" drin steht! Wie ist das zu realisieren? Könnte vorweg ja eine Tabelle anlegen wo die Breite je Buchstabe hinterlegt wird und das dann dynamisch berechnen. Erscheint mir aber doch kompliziert.

  • Das Verhältnis verhält sich verhältnismäßig nicht so wie es soll

    • Scritch
    • 21. Juli 2011 um 15:26
    Zitat von misterspeed

    Man könnte es aber auch so realisieren:

    1. Du speicherst dir die Originalgröße also z.B. 30x40
    2. Verhältnis Höhe zu Breite 4:3, also 1.33
    3. Du richtest einen globalen Multiplier Zähler ein, Anfangs ist dieser auf 0, bei jeder Mausradbewegung wird er um 1 erhöht oder verringert.
    4. Du entscheides über die minimalen Vergrößerungsschritt. Wir nehmen hier 1 Pixel, angenehmer sind vielleicht 5 oder 10 Pixel, jenachdem wie schnell die Mausradgeschwindigkeit ist.
    5. Wird das Mausrad nun um 3 Schritte gedreht, also der multiplier steht auf 3, dann wird zur ursprünglichen Breite 30, 3x die Schrittweite addiert und die Höhe anhand des Verhältnisses berechnet. Zur Höhe werden dann 1,33x3xSchrittweite addiert, das Ergebnis rundest du dann noch auf Ganzzahlen.


    Das hat zwar zur Folge, dass das Verhältnis nicht immer eingehalten wird, jedoch beziehst du dich immer auf den Original Zustand des Controls und nicht auf die neuen aktuellen und bereits verfälschten Werte, was es von mal zu mal natürlich schlimmer machen würde. Deine Maximale Abweichung vom gewünschten Verhältnis beträgt also immer höchtens 1 Pixel.


    Um nochmal zu der Idee zurück zu kommen: Ich denke die hat noch mehr Schwächen, als nur den einen Pixel Unterschied und das sich ändernde Verhältnis. Wenn man jetzt vll. Controls hat, die ein komisches Seitenverhältnis haben, Bsp. 301 Breite, 61 Höhe. Du hast jetzt sagen wir, eine Schrittweite von 3 Pixeln. Dann ist dein Control zwar 3 Pixel breiter, aber nur 0,6 Pixel höher. und du veränderst die Größe des Controls ja auch nicht nur einmal. Mache das 10, 15 Mal, dann haben wir wieder den Salat wie am Anfang!

  • Das Verhältnis verhält sich verhältnismäßig nicht so wie es soll

    • Scritch
    • 21. Juli 2011 um 14:41

    Ich hatte in meinem alten Skript das Verhältnis ja immer neu berechnet. Ich habe also immer das Verhältnis der verfälschten Zahlen genommen und das hat das ja noch schlimmer gemacht. Ich verstehe zwar die problematik, aber ich frage mich trotzdem was Großvater in seinem Skript anders gemacht hat, als ich. Ich rechne, wie er, mit dem Verhältnis vom Anfang, da ich dieses ja in das Array geschrieben habe.
    Wenn alle Stränge reißen, dann werde ich deine Möglichkeit probieren, Misterspeed

  • Das Verhältnis verhält sich verhältnismäßig nicht so wie es soll

    • Scritch
    • 21. Juli 2011 um 09:34

    Danke euch vieren. Die Möglichkeit von Großvater schien mir sich doch aber am einfachsten umsetzen zu lassen. Das Verhältnis im Array speichern und dann nicht immer neu zu berechnen. Bei dir funktioniert das acuh, Großvater. Ich habs mit meinem Lösungsweg versucht, der eigentlich nichts anderes macht als deiner, aber da klappts nun wieder nicht. Die Controls werden wieder schmaler.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include "MouseOnEvent.au3"
    #Include <Misc.au3>
    #include <Array.au3>

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

    global $zaehler
    dim $aVerhaeltnis[100]

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 468, 343, 192, 114)
    $Group1 = GUICtrlCreateGroup("Ändern", 72, 120, 105, 185)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $plus = GUICtrlCreateButton("+", 336, 96, 27, 25, $WS_GROUP)
    $minus = GUICtrlCreateButton("-", 368, 96, 50, 50, $WS_GROUP)
    $label1 = GUICtrlCreateLabel("Verhältnis größer", 1, 1, 60, 40)
    $label2 = GUICtrlCreateLabel("Verhältnis kleiner", 1, 40, 60, 40)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $vUser32Dll = DllOpen("user32.dll")

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    _ArrayDisplay($aVerhaeltnis)
    Exit
    case $GUI_EVENT_SECONDARYDOWN
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "scrollunten")
    _MouseSetOnEvent($MOUSE_WHEELSCROLLup_EVENT, "scrolloben")
    Case $GUI_EVENT_SECONDARYUP
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT)
    _MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT)
    EndSwitch
    WEnd

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

    Func scrollunten()
    $mausinfo = GUIGetCursorInfo($Form1)
    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $bereitsberechnet = _ArraySearch($aVerhaeltnis, $mausinfo[4])
    if not $aVerhaeltnis[$mausinfo[4]] > -1 Then
    $aVerhaeltnis[$mausinfo[4]] = $controlinfo[2] / $controlinfo[3]
    EndIf
    $neuebreite = $controlinfo[2] * 0.9
    $neuehoehe = $neuebreite / $aVerhaeltnis[$mausinfo[4]]
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
    endFunc

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

    func scrolloben()
    $mausinfo = GUIGetCursorInfo($Form1)
    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $bereitsberechnet = _ArraySearch($aVerhaeltnis, $mausinfo[4])
    if not $aVerhaeltnis[$mausinfo[4]] > -1 Then
    $aVerhaeltnis[$mausinfo[4]] = $controlinfo[2] / $controlinfo[3]
    EndIf
    $aVerhaeltnis[$mausinfo[4]] = $controlinfo[2] / $controlinfo[3]
    $neuebreite = $controlinfo[2] * 1.1
    $neuehoehe = $neuebreite / $aVerhaeltnis[$mausinfo[4]]
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
    EndFunc

    [/autoit]
  • Das Verhältnis verhält sich verhältnismäßig nicht so wie es soll

    • Scritch
    • 20. Juli 2011 um 11:34

    Hallo,
    ich habe mal wieder ein Trivialproblem. Ich möchte durch scrollen die Größe von Controls verändern. Funktioniert soweit. Da aber die Höhe im gleichen Maße wie die Breite verändert werden muss, errechne ich vorher das Verhältnis der Kantenlängen. In der Paxis funktioniert das leider nicht wie es soll. Beim hin und herscrollen verändert sich das Verhältnis, obwohl es ja gleich bleiben sollte...

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include "MouseOnEvent.au3"
    #Include <Misc.au3>

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

    global $zaehler

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 468, 343, 192, 114)
    $Group1 = GUICtrlCreateGroup("Ändern", 72, 120, 105, 185)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $plus = GUICtrlCreateButton("+", 336, 96, 27, 25, $WS_GROUP)
    $minus = GUICtrlCreateButton("-", 368, 96, 50, 50, $WS_GROUP)
    $label1 = GUICtrlCreateLabel("Verhältnis größer", 1, 1, 60, 40)
    $label2 = GUICtrlCreateLabel("Verhältnis kleiner", 1, 40, 60, 40)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;~ $hot = HotKeySet("{a}", "msgbox1")
    $vUser32Dll = DllOpen("user32.dll")

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    case $GUI_EVENT_SECONDARYDOWN
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "scrollunten")
    _MouseSetOnEvent($MOUSE_WHEELSCROLLup_EVENT, "scrolloben")
    Case $GUI_EVENT_SECONDARYUP
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT)
    _MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT)
    EndSwitch
    WEnd

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

    Func scrollunten()
    $mausinfo = GUIGetCursorInfo($Form1)
    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $verhaeltnis = $controlinfo[2] / $controlinfo[3]

    guictrlsetdata($label1, $verhaeltnis)

    $neuebreite = $controlinfo[2] * 0.95
    $neuehoehe = $neuebreite / $verhaeltnis
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
    endFunc

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

    func scrolloben()
    $mausinfo = GUIGetCursorInfo($Form1)
    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $verhaeltnis = $controlinfo[2] / $controlinfo[3]

    guictrlsetdata($label2, $verhaeltnis)

    $neuebreite = $controlinfo[2] * 1.05
    $neuehoehe = $neuebreite / $verhaeltnis
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
    EndFunc

    [/autoit]

    Wenn ich $neuehoehe = $neuebreite / $verhaeltnis in $neuehoehe = $controlinfo[2] * 0.95 bzw. 1.05 ändere, passiert genau das gleiche mit den Controls. Sie werden beim hin- und herscrollen immer schmaler.

  • Prüfen auf Rechtsklick mit _isPressed

    • Scritch
    • 20. Juli 2011 um 10:05

    Klingt logisch, was du sagts. Weiß es aber irgendwie nicht umzusetzen. Ist es möglich auf Aktionen im GUI zu reagieren, ohne Switch... Case und ohne GUIonEventMode einzusetzen?

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include "MouseOnEvent.au3"
    #Include <Misc.au3>

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

    global $zaehler

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 468, 343, 192, 114)
    $Group1 = GUICtrlCreateGroup("Ändern", 72, 72, 185, 105)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $plus = GUICtrlCreateButton("+", 336, 96, 27, 25, $WS_GROUP)
    $minus = GUICtrlCreateButton("-", 368, 96, 50, 50, $WS_GROUP)
    $label1 = GUICtrlCreateLabel("lala", 1, 1, 40, 40)
    $label2 = GUICtrlCreateLabel("blabla", 50, 50, 40, 20)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;~ $hot = HotKeySet("{a}", "msgbox1")
    $vUser32Dll = DllOpen("user32.dll")

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    case $GUI_EVENT_SECONDARYDOWN
    While _IsPressed("02", $vUser32Dll)
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "scrollunten")
    _MouseSetOnEvent($MOUSE_WHEELSCROLLup_EVENT, "scrolloben")
    WEnd
    Case $GUI_EVENT_SECONDARYUP
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT)
    _MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT)
    EndSwitch
    WEnd

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

    Func scrollunten()
    $mausinfo = GUIGetCursorInfo($Form1)
    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $verhaeltnis = $controlinfo[2] / $controlinfo[3]
    $neuebreite = $controlinfo[2] * 0.95
    $neuehoehe = $neuebreite / $verhaeltnis
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
    endFunc

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

    func scrolloben()
    $mausinfo = GUIGetCursorInfo($Form1)
    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $verhaeltnis = $controlinfo[2] / $controlinfo[3]
    $neuebreite = $controlinfo[2] * 1.05
    $neuehoehe = $neuebreite / $verhaeltnis
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
    EndFunc

    [/autoit]

    Edit: Mein Problem hat sich erledigt. Trotzdem interessiert mich die Sache noch,welche ganzen Alternative es gibt, um auf GUI-Eingabe zu reagieren.

  • Prüfen auf Rechtsklick mit _isPressed

    • Scritch
    • 18. Juli 2011 um 13:24

    So, die eigentliche Problematig hatte sich ja erledigt, habe aber jetzt eine neue, die mit der alten in Verbindung steht:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include "MouseOnEvent.au3"
    #Include <Misc.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 468, 343, 192, 114)
    $Group1 = GUICtrlCreateGroup("Ändern", 72, 72, 185, 105)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $plus = GUICtrlCreateButton("+", 336, 96, 27, 25, $WS_GROUP)
    $minus = GUICtrlCreateButton("-", 368, 96, 50, 50, $WS_GROUP)
    $label1 = GUICtrlCreateLabel("lala", 1, 1, 40, 40)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $hot = HotKeySet("{a}", "msgbox1")
    $vUser32Dll = DllOpen("user32.dll")

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    case $GUI_EVENT_SECONDARYUP
    While _IsPressed("02", $vUser32Dll)
    MsgBox(1, "lala", "lala")
    WEnd
    EndSwitch
    $mausinfo = GUIGetCursorInfo($Form1)
    GUICtrlSetData($label1, $mausinfo[4])
    wend

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

    func msgbox1()
    _MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "scrollunten")
    EndFunc

    Func scrollunten()

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

    $controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
    $verhaeltnis = $controlinfo[2] / $controlinfo[3]
    $neuebreite = $controlinfo[2] * 0.98
    $neuehoehe = $neuebreite / $verhaeltnis
    GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)

    EndFunc

    [/autoit]

    Zu einem späteren Zeitpunkt wollte ich es mal machen, dass beim Rechtsklick + Scrollen die Größe von Controls verändert werden kann. Aber auf meine gedrückte rechte Maustaste wird gar nicht reagiert. Wie kommt?

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™