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

  • Datumsausgabe

    • Oscar
    • 24. Februar 2010 um 13:11

    Zwei Wochen zurück:

    [autoit]


    #include <Date.au3>
    MsgBox(0,0, _DateAdd('w', -2, _NowCalcDate()))

    [/autoit]
  • Prüfen ob GUI verlassen wurde

    • Oscar
    • 23. Februar 2010 um 21:29

    Hier noch eine Version mit Maus-Positions-Abfrage:

    Spoiler anzeigen
    [autoit]


    $hGui = GUICreate('Test', 600, 600)
    GUISetState(@SW_SHOW, $hGui)
    HotKeySet('!s', '_Show') ; [ALT] + [s] um das Fenster wieder anzuzeigen
    MouseMove(@DesktopWidth / 2, @DesktopHeight / 2, 0) ; Maus in der Mitte positionieren
    Do
    $aMousePos = MouseGetPos()
    $aWinPos = WinGetPos($hGui)
    If $aMousePos[0] < $aWinPos[0] Or $aMousePos[0] > ($aWinPos[0] + $aWinPos[2]) _
    Or $aMousePos[1] < $aWinPos[1] Or $aMousePos[1] > ($aWinPos[1] + $aWinPos[3]) Then GUISetState(@SW_HIDE, $hGui)
    Until GUIGetMsg() = -3

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

    Func _Show()
    MouseMove(@DesktopWidth / 2, @DesktopHeight / 2, 0)
    GUISetState(@SW_SHOW, $hGui)
    EndFunc

    [/autoit]
  • Registry durchsuchen nach einem Schlüssel

    • Oscar
    • 23. Februar 2010 um 20:49

    Ich hab mal schnell eine Funktion erstellt:

    Spoiler anzeigen
    [autoit]


    MsgBox(0, '', _RegSearch('HKEY_LOCAL_MACHINE', 'v3.3.4.0'))

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

    Func _RegSearch($sRegPath, $sSearch)
    Local $sKey, $sVal, $sVar, $ret, $i = 0, $j = 0
    While True
    $i += 1
    $sKey = RegEnumKey($sRegPath, $i)
    If @error Then ExitLoop
    $ret = _RegSearch($sRegPath & '\' & $sKey, $sSearch)
    If $ret <> '' Then ExitLoop
    $j = 0
    While True
    $j += 1
    $sVal = RegEnumVal($sRegPath & '\' & $sKey, $j)
    If @error Then ExitLoop
    $sVar = RegRead($sRegPath & '\' & $sKey, $sVal)
    If $sVar == $sSearch Then Return $sRegPath & '\' & $sKey & '\' & $sVal
    WEnd
    WEnd
    Return $ret
    EndFunc

    [/autoit]
  • Registry durchsuchen nach einem Schlüssel

    • Oscar
    • 23. Februar 2010 um 20:06

    Mit RegEnumKey bzw. RegEnumVal und RegRead hast Du alle Befehle zum auslesen. Dann noch eine rekursive Funktion und schon bekommst Du Deine Suche. :)

  • [HELP] HDD Hardware ID

    • Oscar
    • 23. Februar 2010 um 18:51

    DriveGetSerial ist in der Tat nicht so geeignet, da sie beim formatieren der Partition vergeben wird und sich somit beim nächsten formatieren ändern wird.
    Man kann aber auch die Hersteller-Seriennummer der Festplatte auslesen, die IMHO einmalig ist (oder zumindest sein sollte).
    Dazu hatte ich mal eine Funktion geschrieben:

    Spoiler anzeigen
    [autoit]


    ; Anfang Beispiel
    #include <Array.au3> ; wird nur für _ArrayDisplay benötigt
    $sDrive = 'c:'
    $Ret = _GetDriveInfo($sDrive)
    If IsArray($Ret) Then
    _ArrayDisplay($Ret, 'Informationen über Laufwerk "' & $sDrive & '"')
    Else
    MsgBox(0, 'Fehler', $Ret)
    EndIf
    ; Ende Beispiel

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

    ;===============================================================================
    ; Function Name: _GetDriveInfo($sDrive)
    ; Description:: Erweiterte Informationen zu einer Festplatte/USB-Stick
    ; Parameter(s): $sDrive = Laufwerksbuchstabe
    ; Requirement(s): ---
    ; Return Value(s): 2D-Array mit Bezeichnung und Wert (siehe Beispiel)
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _GetDriveInfo($sDrive)
    $sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
    Local $sDriveType = DriveGetType($sDrive)
    If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
    If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
    Local $wbemFlagReturnImmediately = 0x10
    Local $wbemFlagForwardOnly = 0x20
    Local $colItems = ''
    Local $aPartition, $aPhysicalDrive, $aOut[14][2]
    $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
    For $objItem In $colItems
    If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
    $aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
    EndIf
    Next
    Endif
    If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
    For $objItem In $colItems
    If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
    $aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
    EndIf
    Next
    Endif
    If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
    $aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) then
    For $objItem In $colItems
    If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
    $aOut[0][0] = 'Volume-Label'
    $aOut[0][1] = DriveGetLabel($sDrive)
    $aOut[1][0] = 'Serial-Nr. (Volume)'
    $aOut[1][1] = DriveGetSerial($sDrive)
    $aOut[2][0] = 'Model'
    $aOut[2][1] = $objItem.Model
    $aOut[3][0] = 'Serial-Nr. (Drive)'
    $aOut[3][1] = StringMid($objItem.PNPDeviceID, StringInStr($objItem.PNPDeviceID, '\', 0, -1) + 1)
    $aOut[3][1] = StringReplace($aOut[3][1], '&0', '')
    $aOut[4][0] = 'Interface'
    $aOut[4][1] = $objItem.InterfaceType
    $aOut[5][0] = 'Size (Bytes)'
    $aOut[5][1] = $objItem.Size
    $aOut[6][0] = 'Media Type'
    $aOut[6][1] = StringRegExpReplace($objItem.MediaType, '[^[:print:]]', ' ')
    $aOut[7][0] = 'Total Cylinders'
    $aOut[7][1] = $objItem.TotalCylinders
    $aOut[8][0] = 'Total Heads'
    $aOut[8][1] = $objItem.TotalHeads
    $aOut[9][0] = 'Total Tracks'
    $aOut[9][1] = $objItem.TotalTracks
    $aOut[10][0] = 'Total Sectors'
    $aOut[10][1] = $objItem.TotalSectors
    $aOut[11][0] = 'Tracks Per Cylinder'
    $aOut[11][1] = $objItem.TracksPerCylinder
    $aOut[12][0] = 'Sectors Per Track'
    $aOut[12][1] = $objItem.SectorsPerTrack
    $aOut[13][0] = 'Bytes Per Sector'
    $aOut[13][1] = $objItem.BytesPerSector
    EndIf
    Next
    Endif
    $objWMIService = ''
    Return $aOut
    EndFunc

    [/autoit]
  • Position eines RegExp-Matches herausfinden

    • Oscar
    • 22. Februar 2010 um 19:42

    Achso, ja klar. Aber das geht auch mit RegExp:

    [autoit]


    $string = 'hallohallohallo'
    $found = 1
    $search = 'hallo'
    While True
    StringRegExp($string, $search, 1, $found)
    $next = @extended
    ConsoleWrite('Position:' & $found & @CR)
    If $next = 0 Then ExitLoop
    MsgBox(0, '', StringReplace($string, $found, StringUpper($search), 1))
    $found = $next
    WEnd

    [/autoit]
  • Listview delete item problem

    • Oscar
    • 22. Februar 2010 um 19:35

    Wenn Du nur die markierten Einträge löschen willst, warum nimmst Du dann nicht:

    [autoit]

    _GUICtrlListView_DeleteItemsSelected($hListView)

    [/autoit]
  • Position eines RegExp-Matches herausfinden

    • Oscar
    • 22. Februar 2010 um 19:15

    Vielleicht hilft Dir das hier weiter:

    [autoit]


    $string = 'hallohallohallo'
    $found = 1
    $search = 'hallo'
    While True
    $found = StringInStr($string, $search, 1, 1, $found)
    ConsoleWrite('Position:' & $found & @CR)
    If $found = 0 Then ExitLoop
    MsgBox(0, '', StringReplace($string, $found, StringUpper($search), 1))
    $found += StringLen($search)
    WEnd

    [/autoit]
  • LED - Laufschrift

    • Oscar
    • 22. Februar 2010 um 16:07

    Wow! Das ist klasse! :thumbup:

    Gleich mal archivieren. Kann ich bestimmt mal gebrauchen. :)

  • IE-Objekt und ControlGetPos

    • Oscar
    • 21. Februar 2010 um 20:21

    Die Größe und Position läßt sich so auslesen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>

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

    $Form1 = GUICreate("Beispiel", 1030, 680)
    $oIE = _IECreateEmbedded()
    $Obj_ctrl = GUICtrlCreateObj($oIE, 5, 8, 1000, 610)
    GUISetState()
    _IENavigate($oIE,"http://google.de")
    MsgBox(0,0,$oIE.left & @CR & $oIE.top & @CR & $oIE.width & @CR & $oIE.height)

    [/autoit]
  • fehlermeldung, aber script lauft richtig ?

    • Oscar
    • 21. Februar 2010 um 18:00

    Das Problem ist diese Zeile:

    [autoit]

    $o_signin = _IEFormElementGetObjByName ($o_form, "button-1")

    [/autoit]


    Es gibt auf der Seite keinen Formular-Button mit diesem Namen. Das ist dort per Javascript gemacht.

    Wenn der LogIn trotzdem funktioniert kannst Du die obige Zeile einfach entfernen.

  • 2 Buttons mit 2 unterschiedlichen Funtkionen?

    • Oscar
    • 21. Februar 2010 um 16:06
    Zitat von DerAnfänger

    nun läuft mein Bot ein wenig besser was das an und ausschalten betrifft.

    Forenregeln lesen! X(

  • Zwischenablage überwachen und in TXT-Datei speichern?

    • Oscar
    • 21. Februar 2010 um 15:07

    Hier ist mal das Grundgerüst eines Clipboard-Edits:

    Spoiler anzeigen
    [autoit]


    #include <Clipboard.au3>
    #include <GUIConstantsEx.au3>
    #include <SendMessage.au3>
    #include <WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('Clipboard-Edit', 600, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $hEdit = GUICtrlCreateEdit('', 10, 10, 580, 240)
    $hSave = GUICtrlCreateButton('Save to file...', 10, 260, 120, 22)
    GUICtrlSetOnEvent(-1, '_SaveEdit')
    GUISetState()
    WinSetOnTop($hGui, '', 1)
    Global $hNext = _ClipBoard_SetViewer($hGui)
    GUIRegisterMsg($WM_CHANGECBCHAIN, 'WM_CHANGECBCHAIN')
    GUIRegisterMsg($WM_DRAWCLIPBOARD, 'WM_DRAWCLIPBOARD')

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

    While Sleep(1000)
    WEnd

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

    Func _End()
    _ClipBoard_ChangeChain($hGui, $hNext)
    Exit
    EndFunc ;==>_End

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

    Func _SaveEdit()
    Local $sPath, $hFile
    $sPath = FileSaveDialog('Choose a name', @ScriptDir, 'Text (*.txt)', 16 + 2, 'Clipboard.txt', $hGui)
    If @error Then Return
    $hFile = FileOpen($sPath, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, GUICtrlRead($hEdit))
    FileClose($hFile)
    EndIf
    EndFunc ;==>_SaveEdit

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

    Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    If $iwParam = $hNext Then
    $hNext = $ilParam
    ElseIf $hNext <> 0 Then
    _SendMessage($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, 'hwnd', 'hwnd')
    EndIf
    EndFunc ;==>WM_CHANGECBCHAIN

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

    Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    Local $clip = ClipGet()
    If Not @error Then
    $clip = StringRegExpReplace($clip, '(\S)(\n)', '$1' & @CRLF)
    If StringRight($clip, 2) <> @CRLF Then $clip &= @CRLF
    GUICtrlSetData($hEdit, GUICtrlRead($hEdit) & $clip)
    EndIf
    If $hNext <> 0 Then _SendMessage($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
    EndFunc ;==>WM_DRAWCLIPBOARD

    [/autoit]
  • Schleife um neu angeschlossene geräte (laufwerke) in einer combo hinzuzufügen

    • Oscar
    • 20. Februar 2010 um 18:12

    Ja, das sind diese Codes! :)
    Und Informationen bekommst Du am besten auf den Microsoftseiten (msdn.microsoft.com/...).
    Speziell zu einer bestimmten Seite kommst Du am einfachsten, indem Du den Code bei Google eingibst. Das ist dann meist der erste Treffer.

    stinger2k: Wenn der Code noch nicht in irgendeiner Include-Datei vorhanden ist, dann muss man diesen halt selbst als Konstante deklarieren.

  • Schleife um neu angeschlossene geräte (laufwerke) in einer combo hinzuzufügen

    • Oscar
    • 20. Februar 2010 um 15:12

    Das ständig in einer Schleife zu überprüfen ist ein schlechter Vorschlag. Besser ist es, wenn das Script von Windows darüber informiert wird, sobald sich etwas geändert hat (GUIRegisterMsg).
    Das würde dann in etwas so aussehen:

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>

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

    If Not IsDeclared('WM_DEVICECHANGE') Then Global Const $WM_DEVICECHANGE = 0x0219
    $hGui = GUICreate('Automatische Laufwerkserkennung', 300, 200)
    GUICtrlCreateLabel('Alle Laufwerke:', 25, 30, 100, 20)
    $hCombo = GUICtrlCreateCombo('', 20, 50, 120, 20, $CBS_DROPDOWNLIST)
    _ReadDrives()
    GUISetState()
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    If $hWnd = $hGui Then _ReadDrives()
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func _ReadDrives()
    Local $aDrives, $sDrives, $sTmp
    GUICtrlSetData($hCombo, '')
    $aDrives = DriveGetDrive('ALL')
    For $i = 1 To $aDrives[0]
    $sDrives &= '|' & StringUpper($aDrives[$i])
    $sTmp = DriveGetLabel($aDrives[$i])
    If $sTmp <> '' Then $sDrives &= ' (' & $sTmp & ') '
    Next
    GUICtrlSetData($hCombo, StringTrimLeft($sDrives, 1), StringRegExpReplace($sDrives, '\|(.+?)\|.*', '$1'))
    EndFunc

    [/autoit]
  • möglichst wenig code für möglichst viele checkboxen

    • Oscar
    • 20. Februar 2010 um 14:42

    Das Skript von BugFix geht noch etwas kürzer:

    Spoiler anzeigen
    [autoit]


    Local $checkbox[75]

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

    Local $Form1 = GUICreate("Form1", 875, 600, -1, -1)
    Local $top = 75
    Local $left = 25
    For $i = 0 To UBound($checkbox) - 1
    $checkbox[$i] = GUICtrlCreateCheckbox("checkbox" & $i, $left + Mod($i, 5) * 175, $top + Int($i / 5) * 20, 175, 17)
    Next

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

    GUISetState(@SW_SHOW)

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

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

    [/autoit]
  • Musik-Quiz

    • Oscar
    • 19. Februar 2010 um 15:39

    Danke für das Lob. Das Programm ist bei mir auch nicht in Vergessenheit geraten. :)
    Die nächste Version wird einen Multiplayer-Modus (bis zu vier Spieler) haben und man wird Joypads für die Eingabe benutzen können.
    Allerdings wird das noch etwas dauern, weil ich erst noch etwas anderes fertig machen muss.

  • Digitalkameraprofis unter uns?

    • Oscar
    • 19. Februar 2010 um 05:00

    Das kann ich nicht bestätigen. Es gibt auf der linken Seite genügend Platz um den Zeigefinger dort aufzulegen.
    Außerdem bietet diese Art des haltens den Vorteil, dass man den Blitz schnell mal mit dem Zeigefinger ausschalten kann (Blitz einfach runterdrücken).
    Und das mit dem optischen Zoom beim filmen stimmt zwar, aber nur während der Aufnahme. Folgende Vorgehensweise hingegen funktioniert: ranzoomen, dann filmen, auf Pause drücken, wegzoomen, wieder filmen, usw...

    Mir war besonders die Brennweite wichtig: 5,0–60,0 mm (28–336 mm, äquivalent zu KB)
    Die 5,0mm sind schon ein schöner Weitwinkel, was besonders für Innenaufnahmen einen großen Vorteil darstellt. Aber auch Außenaufnahmen, z.B. von ganzen Gebäuden werden so oft erst möglich, weil man mit anderen Kameras, die nicht einen solchen Weitwinkel bieten, viel weiter weggehen müsste, um alles zu erfassen.
    Auch der maximale Telebereich gibt noch gute Aufnahmen. Wobei ich dazu sagen muss, dass man den bei Innenaufnahmen nur nutzen sollte, wenn genügend Licht vorhanden ist. Die Lichtstärke der Kompakten ist nämlich nicht so gut. Das ist aber bei allen mir bekannten Digitalkameras (in diesem Preissegment) der Fall.

  • Digitalkameraprofis unter uns?

    • Oscar
    • 18. Februar 2010 um 21:11

    Ich bin mit meiner Canon PowerShot SX200 IS sehr zufrieden. Vielleicht ist die ja etwas für Dich!?
    Ca. 250,-€ bei Amazon.

  • Mehrere Variablen in einer InputBox

    • Oscar
    • 18. Februar 2010 um 18:57

    Oder schnell mal eine Datum-Eingabe-Box scripten. ;)

    Zum Beispiel so:

    Spoiler anzeigen
    [autoit]


    $sInput = _DateInputBox()
    MsgBox(0, 'Eingegeben wurde dieses Datum:', $sInput)

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

    Func _DateInputBox($sTitle = '')
    Local $hGui, $hDate, $hOk, $aMsg
    $hGui = GUICreate($sTitle, 200, 100)
    GUICtrlCreateLabel('Bitte Datum eingeben:', 50, 10, 120, 20)
    $hDate = GUICtrlCreateDate('', 45, 30, 120, 20, 0x00) ; 0x00 = $DTS_SHORTDATEFORMAT
    GUICtrlSetFont(-1, 12)
    $hOk = GUICtrlCreateButton('Ok', 70, 70, 60, 22)
    GUISetState(@SW_SHOW, $hGui)
    While True
    $aMsg = GUIGetMsg(1)
    If $aMsg[1] = $hGui Then
    Switch $aMsg[0]
    Case $hOk, -3 ; -3 = $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    EndIf
    WEnd
    $sDate = GUICtrlRead($hDate)
    GUIDelete($hGui)
    Return $sDate
    EndFunc ;==>_DateInputBox

    [/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™