Danke
Was ist denn SRE?
Beiträge von Scritch
-
-
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

-
Alles anzeigen
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.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!
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

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!
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

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 verbundenUnd das gleiche, nur mit anderem Datum, steht über ein paar Tausend Zeilen!
-
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>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <Date.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#include <array.au3>
#Include <Date.au3>$datumheute = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(1, "lala", $datum)$aDateien = _GetFilesFolder_Rekursiv('.', -1, 0)
[/autoit] [autoit][/autoit] [autoit]
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$hFile = _WinAPI_CreateFile($aAuswertung[$a][0], 2)
[/autoit] [autoit][/autoit] [autoit]
$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,
;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)Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
[/autoit] [autoit][/autoit] [autoit]
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
EndFuncFunc _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
[/autoit]
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 -
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>
[/autoit]
#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]))
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
-
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.
-
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! -
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! -
Ja, kann ich. Die Maus fährt dann aber zu diesen Koordinaten

-
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! -
So wäre eine Möglichkeit.
[autoit]$ini = IniReadSection(@scriptdir & "\test.ini", "Zeit")
[/autoit][autoit][/autoit][autoit]for $i = 0 to $ini[1][1]
[/autoit]
sleep(1000)
ToolTip($i)
Next
;Hier gehts nach 10000 Sekunden weiterWenn du
drinstehen hast, in deiner .ini. Nachdem er die 10000 durchgezählt hat, gehts weiter im Skript. -
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. -
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.
-
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.
-
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! -
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 -
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>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "MouseOnEvent.au3"
#Include <Misc.au3>
#include <Array.au3>global $zaehler
[/autoit] [autoit][/autoit] [autoit]
dim $aVerhaeltnis[100]#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###$vUser32Dll = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc scrollunten()
[/autoit] [autoit][/autoit] [autoit]
$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)
endFuncfunc scrolloben()
[/autoit]
$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 -
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>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "MouseOnEvent.au3"
#Include <Misc.au3>global $zaehler
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###;~ $hot = HotKeySet("{a}", "msgbox1")
[/autoit] [autoit][/autoit] [autoit]
$vUser32Dll = DllOpen("user32.dll")While True
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc scrollunten()
[/autoit] [autoit][/autoit] [autoit]
$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)
endFuncfunc scrolloben()
[/autoit]
$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)
EndFuncWenn 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.
-
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>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "MouseOnEvent.au3"
#Include <Misc.au3>global $zaehler
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###;~ $hot = HotKeySet("{a}", "msgbox1")
[/autoit] [autoit][/autoit] [autoit]
$vUser32Dll = DllOpen("user32.dll")While True
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc scrollunten()
[/autoit] [autoit][/autoit] [autoit]
$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)
endFuncfunc scrolloben()
[/autoit]
$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)
EndFuncEdit: Mein Problem hat sich erledigt. Trotzdem interessiert mich die Sache noch,welche ganzen Alternative es gibt, um auf GUI-Eingabe zu reagieren.
-
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>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "MouseOnEvent.au3"
#Include <Misc.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###$hot = HotKeySet("{a}", "msgbox1")
[/autoit] [autoit][/autoit] [autoit]
$vUser32Dll = DllOpen("user32.dll")While True
[/autoit] [autoit][/autoit] [autoit]
$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])
wendfunc msgbox1()
[/autoit] [autoit][/autoit] [autoit]
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "scrollunten")
EndFunc
Func scrollunten()$controlinfo = ControlGetPos($Form1, "", $mausinfo[4])
[/autoit]
$verhaeltnis = $controlinfo[2] / $controlinfo[3]
$neuebreite = $controlinfo[2] * 0.98
$neuehoehe = $neuebreite / $verhaeltnis
GUICtrlSetPos ($mausinfo[4], $controlinfo[0], $controlinfo[1], $neuebreite, $neuehoehe)
EndFuncZu 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?