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

Beiträge von Oscar

  • µit - September

    • Oscar
    • 24. September 2008 um 17:32

    Noch ein Kandidat! Klasse! :thumbup:
    Jetzt musst Du Dich aber ranhalten. Wir anderen haben ja schon einigen Vorsprung.
    Allerdings ist bei mir das Ende auch schon erreicht. Finde einfach keine Optimierungsmöglichkeiten mehr.

  • Was die Langeweile alles erschaffen kann

    • Oscar
    • 24. September 2008 um 17:02

    Damit kann man ja richtig kleine Geschichten schreiben (ist mir gerade passiert):

    [autoit]


    Global $oNotebook = ObjGet('Notebook', 'Hardware')
    If $oNotebook.DVD_Writer = 'Defekt' Then
    $sPriceList = InetGet('Computer-Shop', 'Preisliste')
    $sDVDWriter = StringInStr($sPriceList, 'DVD-Brenner', 0)
    _INetMail('computer-shop', 'Bestellung', $sDVDWriter & $sMyAdress)
    ProcessWait('Bestellung eingetroffen', 3*24*60*60*1000)
    Global $oCar = ObjGet('Street', 'My Car')
    $oCar.DriveTo('Computer-Shop')
    ControlSend('Computer-Shop-Kasse', 'Preis', Default)
    $oCar.DriveTo('Home')
    $oNotebook.Remove('Defekter DVD-Brenner')
    $oNotebook.Add('Neuer DVD-Brenner')
    $rc = CDTray('D:', 'open')
    If $rc = 'ERROR' Then
    _INetMail('Computer-Shop', 'Grrr...*#$*§!', '')
    $oNotebook.Remove('Neuer, defekter DVD-Brenner')
    $oCar.DriveTo('Computer-Shop')
    ControlSend('Computer-Shop', 'Reklamation')
    ControlGetText('Computer-Shop', 'Nicht vorrätig! Bestellen!')
    $oCar.DriveTo('Home')
    ProcessWait('Bestellung eingetroffen', 3*24*60*60*1000)
    $oCar.DriveTo('Computer-Shop')
    ControlSend('Computer-Shop', 'Umtausch')
    $oCar.DriveTo('Home')
    $oNotebook.Add('Neuer DVD-Brenner')
    $rc = CDTray('D:', 'open')
    If $rc = 'Ok' Then MsgBox(0, 'Notebook wieder in Ordnung', 'Hurra!')
    EndIf
    EndIf

    [/autoit]
  • _MultiFileCopy

    • Oscar
    • 23. September 2008 um 18:02

    Während des drückens wird die Funktion __Progress() mehrfach aufgerufen. Ohne die Variable kommt es darauf an, wie lange Du die ESC-Taste drückst bzw. den Button anklickst. Machst Du das nur ganz kurz oder ist der Rechner nicht schnell genug, so wird nur ein Kopiervorgang abgebrochen.

  • _MultiFileCopy

    • Oscar
    • 23. September 2008 um 17:46

    Naja, auch alte Hasen brauchen manchmal einen Schubs... ;)

    $bStop wird gebraucht, weil sonst nur der gerade laufende Kopiervorgang (1 Datei) abgebrochen wird. Die Variable sorgt dafür, dass alle Kopiervorgänge abgebrochen werden.

  • _MultiFileCopy

    • Oscar
    • 23. September 2008 um 16:44

    Bei Deiner Änderung kann man aber erst nach einer Datei abbrechen, weil der Button vorher keinen Event auslöst.
    Aber Du hast mich auf eine Idee gebracht, die sogar funktioniert (siehe Post #1). :)
    Jetzt kann man die Funktion mit der [ESC]-Taste oder mit Mausklick auf [Abbrechen] abbrechen. Das reicht mir völlig. Vielen Dank! :thumbup:

  • _MultiFileCopy

    • Oscar
    • 23. September 2008 um 13:34

    Hmm...aber wie kriege ich die Routine dazu, den Kopiervorgang abzubrechen? :S

  • _MultiFileCopy

    • Oscar
    • 23. September 2008 um 11:54

    Ich brauchte gerade eine Kopierfunktion für mehrere Dateien und Tom99 hatte in "Hilfe & Unterstützung" eine Copy-Funktion mit DllCallback gepostet. Da habe ich die mal etwas ausgebaut:

    Spoiler anzeigen
    [autoit]


    ;===werden benötigt=============================================================
    #include<String.au3>
    #include<Misc.au3>
    Global $strFiles = '', $strSize = 0
    ;===============================================================================

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

    ;===Beispiel 1 (erstellen der Datei "!copydata.mfc" im Quellverzeichnis)========
    Global $sSourcePath = 'C:\Programme\AutoIt3\Examples\'

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

    Global $aReturn = _MultiFileCopy($sSourcePath)

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

    MsgBox(0, 'MFC', '"!copydata.mfc" wurde erstellt!')
    ;===============================================================================

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

    ;===Beispiel 2 (komplettes Verzeichnis kopieren)================================
    ; Alle Dateien und Unterverzeichnisse (rekursiv) werden kopiert
    ; Verzeichnisstruktur der Quelle wird übernommen
    Global $sSourcePath = 'C:\Programme\AutoIt3\Examples\'
    Global $sDestinationPath = @ScriptDir & '\Tmp1'; Zielpfad (wird ggf. erstellt)

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

    Global $aReturn = _MultiFileCopy($sSourcePath, $sDestinationPath, False)
    ;===============================================================================

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

    ;===Beispiel 3 (mehrere Dateien kopieren)=======================================
    ; Alle Dateien aus dem Array werden ins Zielverzeichnis kopiert
    ; Array[0] muss die Anzahl der zu kopierenden Dateien enthalten
    Global $aSource[4] = [3, @SystemDir & '\shell32.dll', @SystemDir & '\mspaint.exe', @SystemDir & '\eula.txt']
    Global $sDestinationPath = @ScriptDir & '\Tmp2'; Zielpfad (wird ggf. erstellt)

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

    Global $aReturn = _MultiFileCopy($aSource, $sDestinationPath, False)
    ;===============================================================================

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

    ;===============================================================================
    ; Function Name: _MultiFileCopy
    ; Description:: Kopiert mehrere Dateien mit Progressbar
    ; Parameter(s): Array mit Dateien zum kopieren oder Quellpfad,
    ; Zielpfad,
    ; überschreiben? [True/False],
    ; Wenn überschreiben = True, dann PreFix zum überschreiben
    ; Return Value(s): Array mit den kopierten Dateien
    ; Requirement(s): Global $strFiles = '', $strSize = 0
    ; #include<String.au3>
    ; #include<Misc.au3>
    ; Author(s): Tom99, progandy, eukalyptus and Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _MultiFileCopy($aSource, $sDestPath = '', $bOverWrite = True, $sPreFix = '!Copy')
    Local $oldGUICloseOnESC = Opt('GUICloseOnESC', 0)
    Local $ret, $sShowSource, $sShowDest, $sSourcePath = '', $sNewFolder = '', $k
    Local $aMFC[12] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, DllOpen('user32.dll')]
    If IsArray($aSource) Then
    If Not IsNumber($aSource[0]) Then Return SetError(1, 0, 0)
    For $i = 1 To $aSource[0]
    $aMFC[7] += FileGetSize($aSource[$i])
    Next
    Else
    $sSourcePath = $aSource
    If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'
    $strSize = 0
    ToolTip('Bitte warten! Verzeichnis wird eingelesen!', @DesktopWidth / 2 - 100, 10)
    If FileExists($sSourcePath & '!copydata.mfc') And $sDestPath <> '' Then
    Local $sFile = StringTrimRight(FileRead($sSourcePath & '!copydata.mfc'), 2)
    $strSize = StringLeft($sFile, StringInStr($sFile, @CRLF) - 1)
    $aSource = StringSplit(StringTrimLeft($sFile, StringInStr($sFile, @CRLF) + 1), @CRLF, 1)
    Else
    If FileExists($sSourcePath & '!copydata.mfc') Then FileDelete($sSourcePath & '!copydata.mfc')
    $aSource = _GetFilesFolder_Rekursiv($sSourcePath)
    Local $hFile = FileOpen($sSourcePath & '!copydata.mfc', 2)
    If $hFile <> -1 Then
    FileWriteLine($hFile, $strSize)
    For $i = 1 To $aSource[0]
    FileWriteLine($hFile, $aSource[$i])
    Next
    FileClose($hFile)
    EndIf
    EndIf
    $aMFC[7] = $strSize
    ToolTip('')
    If $sDestPath = '' Then Return SetError(0, 0, 1)
    EndIf
    If StringRight($sDestPath, 1) <> '\' Then $sDestPath &= '\'
    If Not FileExists($sDestPath) Then
    If Not DirCreate($sDestPath) Then Return SetError(2, 0, 0)
    EndIf
    $sShowDest = StringRegExpReplace($sDestPath, '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    Local $aReturn = $aSource
    Local $callback = DllCallbackRegister('__Progress', 'int', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;str')
    Local $ptr = DllCallbackGetPtr($callback)
    Local $DllKernel32 = DllOpen('kernel32.dll')
    __ProgressCreate($aMFC)
    $aMFC[9] = TimerInit()
    For $i = 1 To $aSource[0]
    $sArray = ''
    For $j = 0 To 11
    $sArray &= $aMFC[$j] & ';'
    Next
    $sFile = StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    If $sSourcePath <> '' Then
    $sNewFolder = StringTrimLeft(StringLeft($aSource[$i], StringInStr($aSource[$i], '\', 0, -1)), StringLen($sSourcePath))
    If Not FileExists($sDestPath & $sNewFolder) Then
    If Not DirCreate($sDestPath & $sNewFolder) Then Return SetError(3, 0, 0)
    EndIf
    EndIf
    If $sFile = '' Then ContinueLoop
    $k = 0
    While $bOverWrite = False And FileExists($sDestPath & $sNewFolder & $sFile)
    $k += 1
    $sFile = $sPreFix & $k & "_" & StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    WEnd
    $aReturn[$i] = $sDestPath & $sNewFolder & $sFile
    $sShowSource = StringRegExpReplace($aSource[$i], '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    GUICtrlSetData($aMFC[1], 'Kopiere Datei ' & @CRLF & '"' & $sShowSource & '"' & @CRLF & 'nach: "' & $sShowDest & '"')
    $ret = DllCall($DllKernel32, 'int', 'CopyFileExA', 'str', $aSource[$i], 'str', $aReturn[$i], 'ptr', $ptr, 'str', $sArray, 'int', 0, 'int', 0)
    ;~ ConsoleWrite('Return: ' & $ret[0] & @LF)
    If $ret[0] = 0 Then $aMFC[10] = True
    $aMFC[8] += FileGetSize($aSource[$i])
    Next
    DllClose($DllKernel32)
    DllCallbackFree($callback)
    GUIDelete($aMFC[0])
    DllClose($aMFC[11])
    Opt('GUICloseOnESC', $oldGUICloseOnESC)
    Return $aReturn
    EndFunc ;==>_MultiFileCopy

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

    Func __Progress($FileSize, $BytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    Local $aSplit = StringSplit(StringTrimRight($lpData, 1), ";")
    If $aSplit[11] = 'True' Then Return 1
    Local $pos = GUIGetCursorInfo($aSplit[1])
    If _IsPressed('1B', Int($aSplit[12])) Then Return 1
    If _IsPressed('01', Int($aSplit[12])) And ($pos[4] = Int($aSplit[7])) Then Return 1
    Local $sPercent = Round($BytesTransferred / $FileSize * 100, 0), $iTime, $iTotalTime, $iTransferRate
    Local $sPercentAll = Round(($aSplit[9] + $BytesTransferred) / $aSplit[8] * 100, 0)
    $iTime = TimerDiff($aSplit[10])
    $iTotalTime = Ceiling($iTime / 1000 / ($sPercentAll + 0.1) * 100)
    $iTransferRate = _StringAddThousandsSep(Int($aSplit[8] / $iTotalTime / 1000), '.', ',')
    GUICtrlSetData($aSplit[3], $sPercent & ' %')
    GUICtrlSetData($aSplit[5], $sPercent)
    GUICtrlSetData($aSplit[4], $sPercentAll & ' % Zeit: ' & Int($iTime / 1000) & '/' & $iTotalTime & ' s (' & $iTransferRate & ' KB/s)')
    GUICtrlSetData($aSplit[6], $sPercentAll)
    EndFunc ;==>__Progress

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

    Func __ProgressCreate(ByRef $aMFC)
    If Not IsDeclared('WS_POPUPWINDOW') Then Local Const $WS_POPUPWINDOW = 0x80880000
    If Not IsDeclared('WS_EX_TOPMOST') Then Local Const $WS_EX_TOPMOST = 0x00000008
    If Not IsDeclared('WS_EX_TOOLWINDOW') Then Local Const $WS_EX_TOOLWINDOW = 0x00000080
    If Not IsDeclared('WS_EX_COMPOSITED') Then Local Const $WS_EX_COMPOSITED = 0x02000000
    $aMFC[0] = GUICreate('MultiFileCopy', 480, 220, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED))
    $aMFC[1] = GUICtrlCreateLabel('', 10, 10, 460, 65)
    GUICtrlSetFont(-1, 10, 400, 0, 'Courier New')
    GUICtrlCreateLabel('Datei:', 10, 83, 60, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[2] = GUICtrlCreateLabel('0 %', 80, 83, 390, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[4] = GUICtrlCreateProgress(10, 100, 460, 20)
    GUICtrlCreateLabel('Gesamt:', 10, 133, 60, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[3] = GUICtrlCreateLabel('0 %', 80, 133, 390, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[5] = GUICtrlCreateProgress(10, 150, 460, 20)
    $aMFC[6] = GUICtrlCreateButton('Abbrechen', 200, 185, 75, 25)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUISetState()
    EndFunc ;==>__ProgressCreate

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Anpassung: Verzeichnisgröße ermitteln für _MultiFileCopy ($strSize)
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    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
    $strSize += $file.size
    $strFiles &= $file.Path & $Delim
    EndIf
    Else
    $strSize += $file.size
    $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]

    ScreenShot:
    IOM302_fix.zip

    - Die Funktion kann auch ein ganzes Verzeichnis (rekursiv) kopieren, wenn als Quelle kein Array, sondern ein Verzeichnispfad angegeben wird.
    - Es wird dann die Verzeichnisstruktur des Übergabepfades übernommen und im Zielpfad erstellt!
    - Beim kopieren einzelner Dateien muss im Übergabe-Array (für die zu kopierenden Dateien) der erste Eintrag die Anzahl der Dateien beinhalten!
    - Der Zielpfad wird erstellt, wenn er nicht existiert!
    - Abbruch per [ESC]-Taste oder über den [Abbrechen]-Button!
    - Wird der dritte Parameter auf "False" gesetzt werden evtl. vorhandene Dateien nicht überschrieben. Die neuen Dateien bekommen dann einen PreFix vorangestellt, den man als 4. Parameter angeben kann.
    - Die Funktion gibt ein Array mit den kopierten Dateien zurück.

    Im Script befinden sich drei Beispiele, die den Aufruf verdeutlichen sollen.

    Zum rekursiven einlesen des Quellverzeichnisses benutze ich (mal wieder) die Funktion _GetFilesFolder_Rekursiv() von BugFix. :thumbup:

    Neue Version ( 26.01.09 )

    Weil das einlesen der Verzeichnisstruktur u.U. so lange dauern kann, habe ich MultiFileCopy (MFC) dahingehend geändert, dass man vorab (einmalig) diese Daten einlesen kann (siehe Beispiel). Dazu muss man die Funktion nur mit dem Quellverzeichnis (ohne weitere Parameter) aufrufen. Die Daten werden dann in einer Datei "!copydata.mfc" im Quellverzeichnis abgelegt. Will man später dieses Verzeichnis mit MultiFileCopy irgendwohin kopieren, so sieht MFC nach, ob sich im Quellverzeichnis eine solche Datei befindet und liest die Daten aus dieser Datei, statt das Verzeichnis zeitaufwendig neu einzulesen.
    Achtung! Wenn sich die Dateien und/oder die Ordnerstruktur geändert haben, so muss man die Datei "!copydata.mfc" neu erstellen lassen, ansonsten würde MFC die "alten" Daten benutzen.

  • Beim Kopieren Transferrate anzeigen

    • Oscar
    • 23. September 2008 um 10:00

    @Tom99: Gibt es eine Möglichkeit den Kopiervorgang bei Deiner Routine abzubrechen?

    Ich brauche nämlich auch gerade eine Multifile-Kopierfunktion und bin grad dabei, diese zu erstellen. Allerdings brauche ich die Möglichkeit, den Kopiervorgang abbrechen zu können.

    Edit: siehe _MultiFileCopy in "Scripte"

  • bild schirm ausschalten hilfe

    • Oscar
    • 21. September 2008 um 13:00

    Nein! Bitte nicht mit den Fingern den Stromverbrauch "messen"!

    Mal eine kleine Einführung in die Materie:
    Die elektrische Leistung wird in Watt gemessen und errechnet sich aus der Höhe der Spannung (Steckdose = 230 Volt) und dem fließenden Strom (abhängig vom Gerät). Wenn nun die elektrische Leistung sinkt, dann bedeutet das lediglich, dass das Gerät weniger Strom "verbraucht". Die anliegende Spannung beträgt aber weiterhin 230 Volt.
    Wenn Du nun mit den Fingern an eine der Leitungen fassen würdest (sollte bei einem intakten Gerät nicht so ohne weiteres möglich sein), würde ein Strom durch Deinen Körper fließen. Die Höhe dieses Stroms hängt von mehreren Faktoren ab:
    - Höhe der Spannung
    - Übergangswiderstand "Leitung <-> Finger"
    - elektrischen Widerstand Deines Körpers
    - und dem Übergangswiderstand "Körper <-> Erde"
    Man kann also nie so genau vorhersagen, wie groß der Strom sein wird, wenn Du solch eine Leitung anfassen würdest. Aber ab einem Stromfluß von ca. 30mA wird es für einen Menschen gefährlich (Herzkammerflimmern/Herzstillstand).

  • bild schirm ausschalten hilfe

    • Oscar
    • 21. September 2008 um 12:37

    Turbolocke: Mein Monitor schaltet bei dem Script in den Standby-Modus (<1Watt). Ich weiß aber nicht, ob das überall so ist.

  • bild schirm ausschalten hilfe

    • Oscar
    • 20. September 2008 um 22:57

    Eine Funktion, die den Monitor aus-/einschalten kann, findet man in der Hilfe zu den UDFs:

    Spoiler anzeigen
    [autoit]


    #include <SendMessage.au3>

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

    _Main()

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

    Func _Main()
    Local Const $Off = 2, $On = -1

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

    Opt("WinTitleMatchMode", 4)
    $hwnd = WinGetHandle('classname=Progman')
    _ToggleMonitor($hWnd, $Off)
    Sleep ( 3000 )
    _ToggleMonitor($hWnd, $On)
    EndFunc

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

    Func _ToggleMonitor($hwnd, $OnOff)
    Local Const $WM_SYSCOMMAND = 274
    Local Const $SC_MONITORPOWER = 61808
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_MONITORPOWER, $OnOff)
    If @error Then
    MsgBox(0,"_ToggleMonitor", "_SendMessage Error: " & @error)
    Exit
    EndIf
    EndFunc

    [/autoit]
  • automatisches rechnen

    • Oscar
    • 20. September 2008 um 10:01

    Ich habe das Script noch etwas verbessert, so dass man Input5 und 6 besser eingeben kann, bevor es auf drei Nachkommastellen gebracht wird:

    Spoiler anzeigen
    [autoit]


    #include<GUIConstantsEx.au3>
    #include<WinAPI.au3>
    #include<WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 416, 376, 193, 125)
    $Label1 = GUICtrlCreateLabel("1. Menge", 328, 16, 57, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input1 = GUICtrlCreateInput("", 8, 16, 313, 21)
    $Label2 = GUICtrlCreateLabel("2. Menge", 328, 48, 57, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input2 = GUICtrlCreateInput("", 8, 48, 313, 21)
    $Label3 = GUICtrlCreateLabel("1. * 2. Menge", 328, 88, 68, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Input3 = GUICtrlCreateInput("", 8, 88, 313, 21)
    $Label4 = GUICtrlCreateLabel("P1", 328, 120, 17, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Input4 = GUICtrlCreateInput("", 8, 120, 313, 21)
    $Label5 = GUICtrlCreateLabel("P1 = 2.00 % bis 5.00 %", 112, 152, 134, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input5 = GUICtrlCreateInput("", 8, 152, 89, 21)
    $Label6 = GUICtrlCreateLabel("Wert zwischen 0.55 und 3.60", 112, 184, 170, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input6 = GUICtrlCreateInput("", 8, 184, 89, 21)
    $Label8 = GUICtrlCreateLabel("-----------------------------------------------------------------------------------------------------------------------------------", 0, 216, 397, 17)
    $Label9 = GUICtrlCreateLabel("Input 1 = Hier erfolg eine Eingabe", 8, 240, 162, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    $Label10 = GUICtrlCreateLabel("Input 2 = Hier erfolgt auch eine Eingabe", 8, 256, 192, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    $Label11 = GUICtrlCreateLabel("Input 3 = Berechnung: Input 1 * Input 2", 8, 272, 189, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Label12 = GUICtrlCreateLabel("Input 4 = Berechnung: Input 3 / 100 * Input 5 + Input 6", 8, 288, 263, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Label7 = GUICtrlCreateLabel("Input 5 und Input 6 sind veränderbar, aber nur direkt nach dem starten. ", 8, 328, 341, 17)
    $Label13 = GUICtrlCreateLabel("Input 1 und Input 2 ändern sich während damit gearbeitet wird.", 8, 344, 299, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    Global $Timer1, $Timer2, $Change1 = False, $Change2 = False
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    If (TimerDiff($Timer1) > 1000) And ($Change1 = True) Then
    $Change1 = False
    GUICtrlSetData($Input5, StringFormat('%.3f', GUICtrlRead($Input5)))
    GUICtrlSetState($Input5, $GUI_FOCUS)
    EndIf
    If (TimerDiff($Timer2) > 1000) And ($Change2 = True) Then
    $Change2 = False
    GUICtrlSetData($Input6, StringFormat('%.3f', GUICtrlRead($Input6)))
    GUICtrlSetState($Input6, $GUI_FOCUS)
    EndIf
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $controlID = _WinAPI_LoWord($wParam)
    Switch $controlID
    Case $Input1, $Input2
    $Change1 = False
    $Change2 = False
    GUICtrlSetData($Input3, GUICtrlRead($Input1) * GUICtrlRead($Input2))
    GUICtrlSetData($Input4, StringFormat('%.3f', GUICtrlRead($Input3) / 100 * GUICtrlRead($Input5) + GUICtrlRead($Input6)))
    Case $Input5
    $Change1 = True
    $Change2 = False
    $Timer1 = TimerInit()
    Case $Input6
    $Change1 = False
    $Change2 = True
    $Timer2 = TimerInit()
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • komplettes GUI soll Dateien per Drag & Drop akzeptieren

    • Oscar
    • 20. September 2008 um 09:38

    Du mußt das transparente Label disablen, dann sind alle anderen GUI-Elemente weiterhin nutzbar.
    Geändertes Beispiel aus der Hilfe:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $file, $btn, $msg

    GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018); WS_EX_ACCEPTFILES
    $file = GUICtrlCreateLabel("", 0, 0, 320, 120)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlCreateInput("", 10, 35, 300, 20) ; will not accept drag&drop files
    $btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)

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

    GUISetState()

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    Case $msg = $GUI_EVENT_DROPPED
    MsgBox(0,0,@GUI_DRAGFILE)
    EndSelect
    WEnd

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

    MsgBox(4096, "drag drop file", GUICtrlRead($file))
    EndFunc ;==>Example

    [/autoit]
  • komplettes GUI soll Dateien per Drag & Drop akzeptieren

    • Oscar
    • 20. September 2008 um 09:27

    Erstelle einfach ein transparentes Label in der Größe der GUI. Oder habe ich das falsch verstanden?

  • automatisches rechnen

    • Oscar
    • 19. September 2008 um 23:06

    Ist es das, was Du willst?

    Spoiler anzeigen
    [autoit]


    #include<GUIConstantsEx.au3>
    #include<WinAPI.au3>
    #include<WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 416, 376, 193, 125)
    $Label1 = GUICtrlCreateLabel("1. Menge", 328, 16, 57, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input1 = GUICtrlCreateInput("", 8, 16, 313, 21)
    $Label2 = GUICtrlCreateLabel("2. Menge", 328, 48, 57, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input2 = GUICtrlCreateInput("", 8, 48, 313, 21)
    $Label3 = GUICtrlCreateLabel("1. * 2. Menge", 328, 88, 68, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Input3 = GUICtrlCreateInput("", 8, 88, 313, 21)
    $Label4 = GUICtrlCreateLabel("P1", 328, 120, 17, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Input4 = GUICtrlCreateInput("", 8, 120, 313, 21)
    $Label5 = GUICtrlCreateLabel("P1 = 2.00 % bis 5.00 %", 112, 152, 134, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input5 = GUICtrlCreateInput("", 8, 152, 89, 21)
    $Label6 = GUICtrlCreateLabel("Wert zwischen 0.55 und 3.60", 112, 184, 170, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $Input6 = GUICtrlCreateInput("", 8, 184, 89, 21)
    $Label8 = GUICtrlCreateLabel("-----------------------------------------------------------------------------------------------------------------------------------", 0, 216, 397, 17)
    $Label9 = GUICtrlCreateLabel("Input 1 = Hier erfolg eine Eingabe", 8, 240, 162, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    $Label10 = GUICtrlCreateLabel("Input 2 = Hier erfolgt auch eine Eingabe", 8, 256, 192, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    $Label11 = GUICtrlCreateLabel("Input 3 = Berechnung: Input 1 * Input 2", 8, 272, 189, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Label12 = GUICtrlCreateLabel("Input 4 = Berechnung: Input 3 / 100 * Input 5 + Input 6", 8, 288, 263, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $Label7 = GUICtrlCreateLabel("Input 5 und Input 6 sind veränderbar, aber nur direkt nach dem starten. ", 8, 328, 341, 17)
    $Label13 = GUICtrlCreateLabel("Input 1 und Input 2 ändern sich während damit gearbeitet wird.", 8, 344, 299, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $controlID = _WinAPI_LoWord($wParam)
    Switch $controlID
    Case $Input1, $Input2
    GUICtrlSetData($Input3, GUICtrlRead($Input1) * GUICtrlRead($Input2))
    GUICtrlSetData($Input4, StringFormat('%.3f', GUICtrlRead($Input3) / 100 * GUICtrlRead($Input5) + GUICtrlRead($Input6)))
    Case $Input5, $Input6
    GUICtrlSetData($Input5, StringFormat('%.3f', GUICtrlRead($Input5)))
    GUICtrlSetData($Input6, StringFormat('%.3f', GUICtrlRead($Input6)))
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • automatisches rechnen

    • Oscar
    • 19. September 2008 um 18:59

    Hallo Alina!

    Was genau meinst Du denn mit "Fehler"?

    In den Zeilen 16-18 schreibst Du drei verschiedene Werte nach $input4, die jeweils den vorherigen überschreiben ohne einen Bezug zu den vorherigen zu haben. Deshalb ist das so ziemlich sinnlos.
    Außerdem wäre es hilfreich zu wissen, um was für GUI-Elemente es sich bei $h, $p1 und $p2 handelt.
    Eine Division durch Null (bzw. ein leeres Inputfeld) ergibt immer "1.#INF". Sowas müßte man ggf. abfangen.

    Achja, und wenn Du die Berechnung doch erst nach Klick auf "Berechnen" durchführst, dann kann das mit $1oldData weg. Das sollte nur dazu dienen, das Flackern der Anzeige zu verhindern.

  • Calculator

    • Oscar
    • 19. September 2008 um 14:49

    Das sieht ganz so aus, als wolltest Du sowas machen: WiFaRi
    :)

  • Regulärer Ausdruck.

    • Oscar
    • 19. September 2008 um 14:39

    Ich steuere mal noch eine StringRegExpReplace-Version und einen Geschwindigkeitstest bei:

    [autoit]


    $t = TimerInit()
    $str = "|!TET13060NAU00!"
    $str = Stringleft($str, 2) & StringTrimLeft($str, 5)
    MsgBox(0,0,$str & @CRLF & Round(TimerDiff($t), 4))

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

    $t = TimerInit()
    $str = "|!TET13060NAU00!"
    $str = StringRegExpReplace($str, '(\|!)(.{3})', '$1')
    MsgBox(0,0,$str & @CRLF & Round(TimerDiff($t), 4))

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

    $t = TimerInit()
    $str = "|!TET13060NAU00!"
    $str = StringLeft($str,2) & StringMid($str, 6)
    MsgBox(0,0,$str & @CRLF & Round(TimerDiff($t), 4))

    [/autoit]

    Die Version von Tom99 ist dabei die Schnellste.

  • text in 500er zeichenketten teilen

    • Oscar
    • 19. September 2008 um 13:21

    Das geht aber auch kürzer:

    [autoit]


    Func _StringSplitCount(Const $S_TEXT, Const $I_COUNT)
    Return StringRegExp($S_TEXT, '.{1,' & $I_COUNT & '}', 3)
    EndFunc

    [/autoit]
  • Auswahl mit checkboxen

    • Oscar
    • 19. September 2008 um 12:54

    Vielleicht so:

    Spoiler anzeigen
    [autoit]


    Func _Absenden()
    For $i = 0 To UBound($checkOff)-1
    If BitAND(GUICtrlRead($checkOff[$i]), $GUI_CHECKED) Then
    ShellExecuteWait($OfficePfad & '\' & $OfficeAufruf[$i+1])
    If Not @error Then FileWriteLine(@ScriptDir & '\logfile.txt', $OfficeAufruf[$i+1])
    EndIf
    Next
    For $i = 0 To UBound($checkEnt)-1
    If BitAND(GUICtrlRead($checkEnt[$i]), $GUI_CHECKED) Then
    ShellExecuteWait($EntwicklerPfad & '\' & $EntwickAufruf[$i+1])
    If Not @error Then FileWriteLine(@ScriptDir & '\logfile.txt', $OfficeAufruf[$i+1])
    EndIf
    Next
    For $i = 0 To UBound($checkSon)-1
    If BitAND(GUICtrlRead($checkSon[$i]), $GUI_CHECKED) Then
    ShellExecuteWait($SonstigePfad & '\' & $SonstigAufruf[$i+1])
    If Not @error Then FileWriteLine(@ScriptDir & '\logfile.txt', $OfficeAufruf[$i+1])
    EndIf
    Next
    ;Exit
    EndFunc ;==>_Absenden

    [/autoit]

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™