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

Beiträge von Unicom

  • DB Backup erstellen

    • Unicom
    • 28. Oktober 2012 um 14:24

    Ja richtig SQL-T Skript ausführen - Unter Skripte fand ich noch etwas

    Backup SQL-Express

    Und mit LAN support gibt es auch
    http://www.autoitscript.com/forum/topic/95…__1#entry689275

  • DB Backup erstellen

    • Unicom
    • 27. Oktober 2012 um 10:31

    Hallo,
    wie kann man am besten mit AutoIT ein Backup einer DB erstellen, die in SQL Server (z.B. 2008R2 oder 2005) eingebunden ist?

    Zumindest nicht über das "SQL Server Management Studio"-Oberfläche :)

    Das Backup sollte eben eine Datei sein, die sich auch wieder in den SQL Server einhängen lassen würde.

  • Font bestimmen

    • Unicom
    • 6. Oktober 2010 um 15:31

    Hallo,

    wie kann man die aktuelle Font-Einstellung des Windows-System ermitteln?
    Eine UDF wäre praktisch ^^
    (z.B. die Schriftgröße des Textes unter den Icons auf dem Desktop)

  • Win7 und TraySetOnEvent

    • Unicom
    • 18. Dezember 2009 um 14:07

    Verwendest du die neuste Beta? Dann wirds wohl daran liegen.
    Vielen Dank

  • Win7 und TraySetOnEvent

    • Unicom
    • 18. Dezember 2009 um 11:22

    Hallo,

    ich hab selber kein Windows7 - aber mir wurde gesagt, dass meine Programme, die ein Sys-Tray-Icon verwenden, sich nicht darüber aufrufen lassen.

    Ich verwende gerne Sys-Tray-Icons um Programme zu minimieren und aus der Taskbar auszublenden.
    Opt("TrayOnEventMode",1)
    TraySetState ()

    Mit
    TraySetOnEvent ( $TRAY_EVENT_PRIMARYDOUBLE, "meineFunktion z.B. displayGUI" )
    kann ich mit 'nem Doppelclick auf das icon eine Funktion ausführen.

    Unter Windows 7 geht das seltsamerweise nicht - gibt es irgendein Workaround hierfür?

  • Recaller - Viele Programme auf einmal starten

    • Unicom
    • 13. Dezember 2009 um 17:23

    Bei mir ist es häufig so, dass ich viele Programme und Ordner für bestimmte Projekte gleichzeitig brauche.
    Das könnte bei AutoIT der SCITE-Editor, der Ordner in dem gerade das Programm sich befindet an dem ich arbeite, der Taschenrechner, ein Messanger und noch eine Webseite sein.
    Natürlich könnte man sich jedesmal den Autostart vollfüllen und bei Bedarf ändern - aber ich weiß ja nicht ob ich nächstesmal lieber eine Runde spielen will, wofür ich wieder ne andere Gruppe von Programmen benütze - und ich starte deswegen bestimmt nicht den Rechner neu.

    Um dem zu entgegnen habe ich ein Skript geschrieben, dass die aktuell laufenden Programme aufzeigt.
    Diese kann ich markieren (und evtl. abspeichern) und beim nächstenmal die ganze Gruppe auf einmal starten.

    Mit der Eingabe Taste kann ich eigene Ausdrücke zufügen - um so z.B. Webseiten wie "www.autoit.de" oder Ordner wie z.b. "D:\Program Files\AutoIt3\Examples"
    Als Option bietet das Programm noch automatisch beim Start die letze Auswahl der Programme alle zu starten.
    Del - Taste lässt eigene Ausdrücke wieder löschen.

    Ansonsten gibt es noch Refresh - was die aktuellen Programmprozesse aktualisiert.

    Herzstück des Programmes ist ein einfacher Shellexecute Funktionsaufruf.

    Denkbare Erweiterungen:
    * Man könnte noch Parameter für den Programmaufruf hinzufügen - für meine eigenen Zwecke ist das kaum nötig: daher falls jemand das so erweitern möchte nur zu.

    * Ignore Funktion - viele Prozesse sind natürlich Systemgegeben, man könnte noch nen Button mit der Funktion einfügen, der bekannte Prozesse ausblendet um die Sache übersichtlicher zu gestalten.

    * Hübscher machen - Treeview erlaubt die Möglichkeit von ChildTrees und Icons zu verwenden, dazu Buttons für die Menüführung noch erweitern und netter gestalten

    Sonstiges:
    Im Skriptverzeichnis erstellt sich das Programme eine INI - Datei, und eine text datei für die Default-Auswahl der Programme.

    Spoiler anzeigen


    (Verwendet Autoit 3.3.0.0)

    [autoit]


    ;Verwendete Quellen http://www.autoit.de/index.php?page…cess#post105389

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

    ;Benützung:
    ;DEL: Entfernen eigener Einträge
    ;Enter: Einfügen eigener Einträge

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

    #include <GUIConstants.au3>
    #Include <Constants.au3>
    #include <Array.au3>
    #include <GuiTreeView.au3>
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $filename="Recaller.txt"

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

    #RequireAdmin
    Global $hPsAPI = DllOpen("Psapi.dll")
    Global $hKernel = DllOpen("Kernel32.dll")

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

    Opt("GUIOnEventMode", 1)
    $GUIname="Recaller"

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

    $filenameini=@ScriptDir&"\Recaller.ini"
    $filenamememory=@ScriptDir&"\storage.ini"

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

    DIM $ownchecked[1]
    DIM $Executelist[1]

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

    ;GUI-Menue-Options
    Global $keepselection, $execute_at_startup
    Dim $ignorelist[3]
    $ignorelist[0] ="Program Manager"
    Dim $Programmlist[1]
    Dim $Programmlist_duplikatefree[1] ;Name ist etwas unglücklich - das ist die verwendete Liste für den Tree

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

    createGui()
    loadini()

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

    If BitAND(GUICtrlRead ($keepselection ) , $GUI_CHECKED) Then
    loadData($filenamememory)
    Else
    refresh()
    EndIf

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

    If BitAND(GUICtrlRead ($execute_at_startup ) , $GUI_CHECKED) Then
    Executeallmarked()
    EndIf

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

    While 1
    If _IsPressed("2E", $dll) AND WinActive ( $GUIname) Then ;"del"
    Delexpression()
    EndIf

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

    If _IsPressed("0D", $dll) AND WinActive ( $GUIname) Then ;"enter"
    Addexpression()
    EndIf

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

    $keepselectioncheck = GUICtrlRead ($keepselection )
    $execute_at_startupcheck = GUICtrlRead ($execute_at_startup )

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

    sleep(100)

    WEnd

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

    Func myArraySearch($feld, $value)
    $result = 0
    $split = StringSplit($value,"|")
    $value = $split[1]
    for $i = 0 to UBound($feld)-1
    If StringLeft ($value,30) = StringLeft($feld[$i],30) Then
    $result=1
    ExitLoop
    EndIf
    Next

    Return $result
    EndFunc

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

    Func _ProcessGetPath($hPID)
    If IsString($hPID) Then $hPID = ProcessExists($hPID)
    If $hPID = 0 Then Return SetError(1,0,'')
    Local $sPath = DllStructCreate("char[1000]")
    Local $hProcess = DllCall($hKernel, "int", "OpenProcess", "dword", 0x0400 + 0x0010, "int", 0, "dword", $hPID)
    DllCall($hPsAPI, "long", "GetModuleFileNameEx", "long", $hProcess[0], "int", 0, "ptr", DllStructGetPtr($sPath), "long", DllStructGetSize($sPath))
    DllCall($hKernel, "int", "CloseHandle", "hwnd", $hProcess[0])
    Return DllStructGetData($sPath, 1)
    EndFunc

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

    Func createGui()
    $gui_x=454
    $gui_y=454

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

    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

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

    $main = GUICreate ($GUIname, $gui_x, $gui_y, -1, -1)
    $menue = GUICtrlCreateMenu ( "&Menue" )
    $restore = GUICtrlCreateMenuitem ("&Load Selection",$menue)
    $store = GUICtrlCreateMenuitem ("&Store Selection",$menue)
    $refresh = GUICtrlCreateMenuitem ("&Refresh",$menue)
    $execute = GUICtrlCreateMenuitem ("&Execute selected",$menue)
    $addexpression = GUICtrlCreateMenuitem ("&Add command",$menue)
    $delexpression = GUICtrlCreateMenuitem ("&Remove command",$menue)
    $exit = GUICtrlCreateMenuitem ("&Exit",$menue)

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

    $menue1b = GUICtrlCreateMenu ( "&Options" )
    $keepselection = GUICtrlCreateMenuitem ("Keep Selections at restart",$menue1b)
    $execute_at_startup = GUICtrlCreateMenuitem ("Autostart selected at startup",$menue1b)

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

    $executebutton = GUICtrlCreateButton("Run Selections", 2, 2, $gui_x / 2 * 0.9, 25)
    $refreshbutton = GUICtrlCreateButton("Refresh", $gui_x - $gui_x / 2 * 0.9 - 2 , 2, $gui_x / 2 * 0.9, 25)

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

    GUICtrlSetOnEvent($refreshbutton, "Refresh")
    GUICtrlSetOnEvent($executebutton, "Executeallmarked")
    GUICtrlSetOnEvent($store, "Store")
    GUICtrlSetOnEvent($restore, "Restore")
    GUICtrlSetOnEvent($refresh, "Refresh")
    GUICtrlSetOnEvent($execute, "Executeallmarked")
    GUICtrlSetOnEvent($addexpression, "Addexpression")
    GUICtrlSetOnEvent($delexpression, "Delexpression")
    GUICtrlSetOnEvent($exit, "Beenden")
    GUICtrlSetOnEvent($execute_at_startup , "Startupexecutetoggle")
    GUICtrlSetOnEvent($keepselection , "Rememberselectiontoggle")

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

    Global $hTreeView = _GUICtrlTreeView_Create($main, 2, 32, 450, 450, $iStyle, $WS_EX_CLIENTEDGE)
    GUISetState()
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    Global $Check[Ubound($Programmlist_duplikatefree)]
    _GUICtrlTreeView_EndUpdate($hTreeView)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Beenden")
    GUISetState(@SW_SHOW)

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

    EndFunc

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

    Func Store()

    $var = FileSaveDialog ( "Save Selections",@WorkingDir , "Textfile (*.txt)",2+16,"temp.txt" )
    If StringRight($var, 4) <> ".txt" Then $var &= ".txt"
    if @error = 0 Then saveData($var)
    EndFunc

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

    Func Restore()
    $var = FileOpenDialog ( "Restore Selctions",@WorkingDir , "Textfiles (*.txt)",1 )
    if @error = 0 Then
    loadData($var)
    EndIf

    EndFunc

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

    Func saveData($filename)
    $file= FileOpen ( $filename, 2)

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

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to write file.")
    FileClose($file)
    return
    endif

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

    For $i=1 to UBound($Programmlist_duplikatefree)-1
    If (_GUICtrlTreeView_GetChecked($hTreeView, $check[$i])) Then
    FileWriteLine ( $file, $Programmlist_duplikatefree[$i])
    EndIf
    Next

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

    FileWriteLine ( $file, "---Executelist---")

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

    For $i=1 to UBound($Executelist)-1
    If (_GUICtrlTreeView_GetChecked($hTreeView, $ownchecked[$i])) Then
    FileWriteLine ( $file, $Executelist[$i])
    EndIf
    Next

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

    FileClose($file)

    EndFunc

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

    Func loadData($filename)
    $file = FileOpen($filename, 0)
    If $file = -1 Then
    FileClose($file)
    return
    endif

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

    ;Felder löschen
    _GUICtrlTreeView_DeleteAll($hTreeView)
    Dim $Programmlist_duplikatefree[1]
    Dim $Executelist[1]
    Dim $check[1]
    Dim $ownchecked[1]

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

    $flag=0
    $counter=0

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

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop

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

    If $flag=0 Then
    If $line<>"---Executelist---" Then

    _ArrayAdd($Programmlist_duplikatefree,$line)
    _ArrayAdd($check,_GUICtrlTreeView_Add($hTreeView, 0, $line))
    _GUICtrlTreeView_SetChecked ($hTreeView,$check[UBound($check)-1])
    Else
    $flag=1
    EndIf
    Else
    _ArrayAdd($Executelist,$line)
    _ArrayAdd($ownchecked,_GUICtrlTreeView_Add($hTreeView, 0, $line))
    _GUICtrlTreeView_SetChecked ($hTreeView,$ownchecked[UBound($ownchecked)-1])
    EndIf

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

    Wend

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

    FileClose($file)

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

    Refresh()

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

    EndFunc

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

    Func loadini()
    GUICtrlSetState ( $keepselection, IniRead ( $filenameini , "", "keepselectioncheck", $GUI_CHECKED ))
    GUICtrlSetState ( $execute_at_startup, IniRead ( $filenameini , "", "execute_at_startupcheck", $GUI_UNCHECKED ))

    EndFunc

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

    Func saveini()
    IniWrite( $filenameini , "", "keepselectioncheck", $keepselectioncheck )
    IniWrite( $filenameini , "", "execute_at_startupcheck", $execute_at_startupcheck )

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

    EndFunc

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

    Func Refresh()
    Dim $Keep[1]

    For $i = 1 to UBound($check)-1
    If (_GUICtrlTreeView_GetChecked($hTreeView, $check[$i])) Then
    _ArrayAdd($Keep,$Programmlist_duplikatefree[$i])
    $Keep[0]=$Keep[0]+1
    EndIf
    Next

    Dim $Programmlist[1]

    $wl = WinList ()
    For $i = 1 To $wl[0][0]
    if $wl[$i][0] <> "" AND myArraySearch($ignorelist, $wl[$i][0])=0 Then
    $split = StringSplit($wl[$i][0],"|")
    _ArrayAdd($Programmlist, _ProcessGetPath(WinGetProcess($split[1])))
    EndIf
    Next

    _ArrayDelete($Programmlist,0)
    $Keepcount=$Keep[0]
    _ArrayConcatenate($Keep,$Programmlist)
    _ArrayDelete($Keep,0)

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

    $Programmlist_duplikatefree=_ArrayUnique($Keep) ; ---- feld 0 enthalt anzahl

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

    For $i=1 to UBound($check)-1
    _GUICtrlTreeView_Delete($hTreeView, $check[$i])
    Next

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

    ;Treemenueeinträge erstellen
    Dim $Check[Ubound($Programmlist_duplikatefree)]

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

    For $i=1 to UBound($Programmlist_duplikatefree)-1
    $check[$i] = _GUICtrlTreeView_Add($hTreeView, 0, $Programmlist_duplikatefree[$i])
    Next

    For $i=0 to $Keepcount -1
    for $j=1 to UBound($Programmlist_duplikatefree)-1
    If $Keep[$i]=$Programmlist_duplikatefree[$j] Then
    _GUICtrlTreeView_SetChecked ($hTreeView,$check[$j])
    EndIf
    Next
    Next

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

    $Programmlist=_ArrayUnique($Programmlist)

    EndFunc

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

    Func Executeallmarked()

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

    For $i=1 to UBound($Programmlist_duplikatefree)-1
    If _GUICtrlTreeView_GetChecked($hTreeView, $check[$i]) Then
    $path=StringTrimRight($Programmlist_duplikatefree[$i], StringLen($Programmlist_duplikatefree[$i])- StringInStr( $Programmlist_duplikatefree[$i], "\" , 0 , -1)+1 )

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

    If FileExists($path) Then
    $flag=0
    For $j = 1 to UBound($Programmlist)-1
    if $Programmlist_duplikatefree[$i]=$Programmlist[$j] Then
    $flag=1
    ExitLoop
    EndIf
    Next
    If $flag=0 Then
    ShellExecute($Programmlist_duplikatefree[$i], "", $path )
    EndIf
    EndIf
    EndIf
    Next

    ;eigene Ausdrücke
    For $i = 1 to UBound($ownchecked)-1
    If _GUICtrlTreeView_GetChecked($hTreeView, $ownchecked[$i]) Then
    ShellExecute($Executelist[$i] )
    EndIf
    Next

    EndFunc

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

    Func Addexpression()
    $input=InputBox("Add a command to be executed","Enter e.g. http://www.google.de or D:\Program Files\AutoIt3\Examples")
    If $input<>"" Then
    $newhandle= _GUICtrlTreeView_AddFirst ( $hTreeView, 0,$input)
    _ArrayAdd($ownchecked,$newhandle)
    _ArrayAdd($Executelist,$input)
    EndIf
    sleep(200)
    EndFunc

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

    Func Delexpression()
    $test=_GUICtrlTreeView_GetSelection($hTreeView)
    If $test<>0 Then
    ;prüfen ob handle in eigener LIste
    $pos=_ArraySearch($ownchecked, $test)
    If $pos<0 Then
    MsgBox(0,"Warning","Cant be removed")
    Else
    _GUICtrlTreeView_Delete($hTreeView, $test )
    _ArrayDelete($ownchecked, $pos)
    _ArrayDelete($Executelist,$pos)
    EndIf
    Else
    Beep()

    EndIf
    sleep(200)
    EndFunc

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

    Func Startupexecutetoggle()
    If BitAND($execute_at_startupcheck,1) = 1 Then
    GUICtrlSetState ( $execute_at_startup , $GUI_UNCHECKED )
    Else
    GUICtrlSetState ( $execute_at_startup , $GUI_CHECKED )
    EndIf
    EndFunc

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

    Func Rememberselectiontoggle()
    If BitAND($keepselectioncheck,1) = 1 Then
    GUICtrlSetState ( $keepselection, $GUI_UNCHECKED )
    Else
    GUICtrlSetState ( $keepselection, $GUI_CHECKED )
    EndIf
    EndFunc

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

    Func Beenden()
    saveini()

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

    If BitAND($keepselectioncheck,1) = 1 Then
    saveData($filenamememory)
    EndIf

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

    GUIDelete()
    DllClose($dll)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Verschiedene Kreisbögen durch 2 Punkte.

    • Unicom
    • 20. August 2009 um 21:38

    Die Kreisbögen sind ja Teile von Kreisen - Die Mittelpunkte dieser Kreise liegen auf einer Linie (nennen wir sie mal L). Diese geht durch den Mittelpunkt zwischen A und B.
    Die Steigung dieser Linie L ist orthogonal (senkrecht) zur Verbindungslinie zwischen A und B.
    Du brauchst also eine Funktion zur Bestimmung der Linie L;

    Dann brauchst du noch eine Funktion,die den Abstand zwischen 2 Punkten bestimmt (Pythagoras).

    Nun müsstest du noch bestimmen welche Bereiche der Linie L gültig sind für deine Bedingung, dass der Abstand zwischen deinen Punkten kleiner ist als der zwischen den Mittelpunkt deiner Kreis(bögen) und A (bzw B).

    Da du das zufällig machen willst wähle einfach einen Punkt aus der Linie L aus, prüfe ob der Abstand zwischen deinen Punkten AB kleiner ist als der zwischen Mittelpunkt und A - und wenn das erfüllt lege den Kreisbogen durch die Punkte.

  • Wie kann man abfragen ob ein zweiter Monitor angeschaltet ist?

    • Unicom
    • 27. Juni 2009 um 12:08

    @Asprin-Junky:

    Super!! Funktioniert - vielen lieben Dank

    @Der-Doc
    interessante Sache,
    blos bevor ich da was gefunden habe (einschliesslich dem Testen) hat Aspirin-Junky schon 'ne ready-made Lösung gebracht

  • Wie kann man abfragen ob ein zweiter Monitor angeschaltet ist?

    • Unicom
    • 27. Juni 2009 um 09:52

    Wie kann man abfragen, ob ein zweiter Monitor angeschaltet ist?

    Die Abfrage sollte Im Hintergrund aus einem Skript heraus geschehen.

  • Kameraüberwachung möglich?

    • Unicom
    • 25. Juni 2009 um 12:52

    Ja bei dem Programm werden die Pixel direkt vom Desktop ausgelesen.
    Wenn man ein anderes Fenster davorschiebt gehts nicht mehr.

    Wer Lust hat kann es ja umschreiben,
    z.B. Bilder aufnehmen (Funktion ist im Programm enthalten um images zu speichern)
    und dort dann die Pixel vergleichen.

  • Kameraüberwachung möglich?

    • Unicom
    • 17. Juni 2009 um 10:44

    Ich hab sowas ähnliches mal gemacht.

    Um das Rauschen herauszufiltern kann man einfach die Änderung aller Pixel miteinander vergleichen, daraus erhält man ein Grundrauschen.
    Dieses Grundrauschen nimmt man als Referenz gegen aktuelle Änderungen.

    Die Schwierigkeit ist dann wie empfindlich soll sowas sein.


    Spoiler anzeigen


    PS das Programm geht nur solange es im Vordergrund läuft, da die Pixel direkt vom Desktop genommen werden, falls wer das besser lösen kann dann bitte nur zu

    C
    ;by Unicom for www.Autoit.de
    ;tested for AutoIT 3.3.0.0
    ;Demonstrations of Movement Detection via Webcam
    ;First displayed number value represents degree of change between two succeeding images
    ;Second value is maximum change of a single pixel in the image between two succeeding images 
    ;Quit by pressing "End" - Button
    
    
    
    
    $cam_xlength=300	;Breite
    $cam_ylength=300	;Höhe
    $Gridstep=50		;Abstand zwischen den Pixeln zum Abtasten
    
    
    $sensitivity = 15	;Empfindlichkeit 
    
    
    $gui_x=400
    $gui_y=500
    
    
    HotKeySet("{END}", "Quit"); 
    HotKeySet("{INSERT}", "SnapShot")
    
    
    $snapfile1 = @ScriptDir & "\scrshot1.bmp"
    
    
    #cs ----------------------------------------------------------------------------
    
    
     AutoIt Version: 3.2.11.7 (beta)
     thnx to rysiora with his great example!
     Author:         Ludocus
    
    
     Script Function:
        Webcam Udf
    
    
    #ce ----------------------------------------------------------------------------
    #include-once
    $WM_CAP_START = 0x400
    $WM_CAP_UNICODE_START = $WM_CAP_START +100
    $WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
    $WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
    $WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
    $WM_CAP_ABORT = $WM_CAP_START + 69
    $WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
    $WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
    $WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
    $WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
    $WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
    $WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
    $WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
    $WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
    $WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
    $WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
    $WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
    $WM_CAP_EDIT_COPY = $WM_CAP_START + 30
    $WM_CAP_END = $WM_CAP_UNICODE_END
    $WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
    $WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
    $WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
    $WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
    $WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
    $WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
    $WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
    $WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
    $WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
    $WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
    $WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
    $WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
    $WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
    $WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
    $WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
    $WM_CAP_GET_STATUS = $WM_CAP_START + 54
    $WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
    $WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
    $WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
    $WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
    $WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
    $WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
    $WM_CAP_PAL_OPENA = $WM_CAP_START + 80
    $WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
    $WM_CAP_PAL_PASTE = $WM_CAP_START + 82
    $WM_CAP_SEQUENCE = $WM_CAP_START + 62
    $WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
    $WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
    $WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
    $WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
    $WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
    $WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
    $WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
    $WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
    $WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
    $WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
    $WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
    $WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
    $WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
    $WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
    $WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
    $WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
    $WM_CAP_SET_SCALE = $WM_CAP_START + 53
    $WM_CAP_SET_SCROLL = $WM_CAP_START + 55
    $WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
    $WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
    $WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
    $WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
    $WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
    $WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
    $WM_CAP_STOP = $WM_CAP_START + 68
    
    
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    
    
    $avi = DllOpen("avicap32.dll")
    $user = DllOpen("user32.dll")
    
    
    
    
    $gui_name="Webcam UDF Test"
    
    
    $gui = GUICreate($gui_name,$gui_x,$gui_y)
    
    
    $label1=GUICtrlCreateLabel("Delta",50,400,150,420)
    $label2=GUICtrlCreateLabel("Max",150,400)
    $label3=GUICtrlCreateLabel("Max",75,420,250)
    
    
    
    
    Dim $red[$cam_xlength/$Gridstep*$cam_ylength/$Gridstep+1]
    Dim $green[$cam_xlength/$Gridstep*$cam_ylength/$Gridstep+1]
    Dim $blue[$cam_xlength/$Gridstep*$cam_ylength/$Gridstep+1]
    
    
    $WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength, $cam_ylength)
    
    
    
    
    GUISetState(@SW_SHOW)
    
    
    $changeold=0
    
    
    While 1
     
    $pos=WinGetPos ( $gui_name )	;Farbwerte der Cam werden direkt vom Screen ausgelesen
    $xpos=$pos[0]					;dazu wird das direkt angezeigte Bild
    $ypos=$pos[1]					;abgefragt
    $count=0
    
    
    $change=0
    $tempchange=0
    $changemax=0
    
    
    
    
    For $x_scan = 1 to $cam_xlength Step $Gridstep
    For $y_scan = 1 to $cam_ylength Step $Gridstep
    
    
    $count=$count+1			;Counter für abgetastete Pixel
    
    
    $farbe=PixelGetColor(2+$x_scan+$xpos,21+$y_scan+$ypos)
    $redc=BitAND($farbe, 0xFF0000) / 16^4
    $greenc=BitAND($farbe, 0x00FF00) / 16^2
    $bluec=BitAND($farbe, 0x0000FF)
    
    
    $change_red=$red[$count]-$redc
    $change_green=$green[$count]-$greenc
    $change_blue=$blue[$count]-$bluec
    
    
    $tempchange=Abs($change_red)+Abs($change_green)+Abs($change_blue)
    
    
    $change+=$tempchange
    If $changemax<$tempchange Then $changemax=$tempchange
    
    
    $red[$count]=$redc
    $green[$count]=$greenc
    $blue[$count]=$bluec
    
    
     $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then
      _WebcamClose($WebcamID)
      Exit
     EndIf
    Next
    Next
    
    
    $change=$change/$count
    
    
    GUICtrlSetData($label1,int($change))
    GUICtrlSetData($label2,$changemax)
    
    
    
    
    
    
    
    
    
    
    $diff=abs($change-$changeold)
    
    
    ;Hier können Anweisungen kommen wie "if $diff>50 then snapshot" folgen
    ;
    ;z.B.:
    
    
    Select
    Case $diff <$sensitivity 
    	GUICtrlSetData($label3,"none")
    
    
    Case $diff > $sensitivity AND $diff<=$sensitivity*2  
    	GUICtrlSetData($label3,"slight")
    Case $diff > 2*$sensitivity AND $diff<=$sensitivity*4  
    	GUICtrlSetData($label3,"medium")
    Case $diff > 4*$sensitivity 
    	GUICtrlSetData($label3,"high")
    EndSelect
    
    
    
    
    
    
    
    
    $changeold=$change
     Sleep(100)
    WEnd
    
    
    Func SnapShot()
    	MsgBox(0,"Snapshot","press ok")
      _WebcamSnap($WebcamID, $snapfile1)
    
    
    
    
    EndFunc
    
    
    Func Quit()
    	    _WebcamClose($WebcamID)
            Exit
    		EndFunc
    
    
    
    
    
    
    
    
    ;===============================================================================
    ;
    ; Description:      Open's a webcam preview screen in your gui
    ; Syntax:           _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
    ; Parameter(s):     $sHwnd     - The handle of the gui
    ;                   $sLeft     - Left coord. of the preview screen
    ;                   $sTop      - Top coord. of the preview screen
    ;                   $sWidth    - Width of the preview screen
    ;                   $sHeight   - Height of the preview screen
    ; Requirement(s):   A webcam
    ; Return Value(s):  On Success - Returns id needed for other controls
    ;                   On Failure - Returns -1
    ; Author(s):        Ludocus
    ; Note(s):          None
    ;
    ;===============================================================================
    func _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
    $cap = DllCall($avi, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $sLeft, "int", $sTop, "int", $sWidth, "int", $sHeight, "hwnd", $sHwnd, "int", 1)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_DRIVER_CONNECT, "int", 0, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
    DllCall($user, "int", "SendMessage", "hWnd", $cap[0], "int", $WM_CAP_SET_PREVIEWRATE, "int", 1, "int", 0)
    if @error then return -1
    return $cap[0]
    EndFunc
    
    
    ;===============================================================================
    ;
    ; Description:      Creates a Snapshot from a webcam
    ; Syntax:           _WebcamSnap($sId, $sFile)
    ; Parameter(s):     $sId       - Id (returned from _WebcamOpen)
    ;                   $sFile     - File to save the snapshot to (*.bmp)
    ; Requirement(s):   A webcam
    ; Return Value(s):  On Success - Returns 1
    ;                   On Failure - Returns 0
    ; Author(s):        Ludocus
    ; Note(s):          None
    ;
    ;===============================================================================
    Func _WebcamSnap($sId, $sFile)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $sFile)
        if @error Then
            return 0
        Else
            return 1
        EndIf
    EndFunc
    
    
    ;===============================================================================
    ;
    ; Description:      Closes the preview screen created with _WebcamOpen
    ; Syntax:           _WebcamClose($sId)
    ; Parameter(s):     $sId       - Id (returned from _WebcamOpen)
    ; Requirement(s):   A webcam
    ; Return Value(s):  On Success - Returns 1
    ;                   On Failure - Returns 0
    ; Author(s):        Ludocus
    ; Note(s):          None
    ;
    ;===============================================================================
    Func _WebcamClose($sId)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_END, "int", 0, "int", 0)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
        DllClose($user)
        if @error Then
            return 0
        Else
            return 1
        EndIf
    EndFunc
    
    
    ;===============================================================================
    ;
    ; Description:      Starts recording the webcam to a file
    ; Syntax:           _WebcamRecordStart($sFile, $sId)
    ; Parameter(s):     $sId       - Id (returned from _WebcamOpen)
    ;                   $sFile     - File to save the movie to (*.avi)
    ; Requirement(s):   A webcam
    ; Return Value(s):  On Success - Returns 1
    ;                   On Failure - Returns 0
    ; Author(s):        Ludocus
    ; Note(s):          Stop recording by: _WebcamRecordStop($Id)
    ;
    ;===============================================================================
    Func _WebcamRecordStart($sFile, $sId)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $sFile)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
        if @error Then
            return 0
        Else
            return 1
        EndIf
    
    EndFunc
    
    
    ;===============================================================================
    ;
    ; Description:      Stops recording.
    ; Syntax:           _WebcamRecordStop($sId)
    ; Parameter(s):     $sId       - Id (returned from _WebcamOpen)
    ; Requirement(s):   A webcam
    ; Return Value(s):  On Success - Returns 1
    ;                   On Failure - Returns 0
    ; Author(s):        Ludocus
    ; Note(s):          None
    ;
    ;===============================================================================
    Func _WebcamRecordStop($sId)
        DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_STOP, "int", 0, "int", 0)
        if @error Then
            return 0
        Else
            return 1
        EndIf
    EndFunc ;==> _WebcamRecordStop
    Alles anzeigen
  • AutoIT-Ersatz unter Linux

    • Unicom
    • 16. Juni 2009 um 19:54

    Wie gesagt die Möglichkeit haben einfache Makros zu schreiben, die wiederholende Arbeitsprozesse abnehmen.

    Das kann alles mögliche sein. Aus einem Chat bestimmte Webadressen rausfischen, die Webseite öffnen, das Bild dort kopieren&abspeichern, mit Grafikeditor öffnen, Veränderungen vornehmen, jenes dann in einen anderen Ordner nach bestimmten Namen abspeichern.
    Oder die Zwischenablage überwachen, und nach bestimmte Muster auswerten, wenn die vorhanden sind den Zwischenablagentext filtern und auswerten und schliesslich in ner GUI die Ergebnisse anzeigen.

    In der Art. Mit AutoIT kann ich solche Aktionen halt schnell entwickeln.

  • AutoIT-Ersatz unter Linux

    • Unicom
    • 16. Juni 2009 um 18:14

    Manche Programme stellen aber keine APIs zur Verfügung, wenn das nicht beabsichtigt wurde.
    Und beim Arbeiten mit APIs muss man eben diese kennen - beim Erstellen von Makro-skripten brauch ich mich nicht darum kümmern welche Funktionen ein Programm hat oder nicht.
    APIs hingegen erlauben elegant genau bestimmte Funktionen von Programmen auszuführen - tja warum ist wohl AutoIT für Windows für z.B. Installtionsprozesse blos so beliebt wenn man doch einfach auch dort mit APIs arbeiten könnte? Weil es einfacher handzuhaben ist.

    Mir geht es hauptsächlich um die Automatisierung von Anwendertätigkeiten, die sich ständig wiederholen. Bash-Skripte sind auf der Ebene von Dateimanagment oder ähnlichem genau das richige - für graphische Oberfächen vermisse ich halt da irgendwas.

  • AutoIT-Ersatz unter Linux

    • Unicom
    • 15. Juni 2009 um 16:55

    Klar mit Bash-Skripten kann man ein paar Sachen bewerkstelligen,
    ich rede aber von der Makro-Funktonalität aus AutoIT,
    Makros stellen allgemein die Möglichkeit her, z.B. Tastenbefehle zu senden - unter AutoIT mit Send. (Ganz abgesehen von der Möglichkeit von controlclick, controlsend etc.)
    Mittels AutoIT wäre es z.B. ein leichtes einen ChatLog aus Skype zu kopieren auszuwerten und zu bearbeiten inclusive einer GUI-Oberfläche. Wie sollte man sowas mit Bash erreichen? Skype z.B. liefert eben keinen Output-Stream und verrichtet (im gegensatz zu peethebee Meinung) nicht nur eine Aufgabe (perfekt).

    Bisher fand ich noch:
    XMacro: http://xmacro.sourceforge.net/
    Damit kann man zumindest Tastenbefehle senden

  • AutoIT-Ersatz unter Linux

    • Unicom
    • 13. Juni 2009 um 10:11

    peethebee & Stilgar

    Was verwendet ihr denn um unter Linux Programme zu erstellen?

  • AutoIT-Ersatz unter Linux

    • Unicom
    • 12. Juni 2009 um 21:33

    Äh weiß nicht?
    Ich hab halt noch keine Makro-Skripte unter Linux programmiert - gibts da auch so etwas wie bei diesem AutoIT-tool wo man die Handles der GUI-Elemente ausfindig macht?
    (so wie Button-ID oder Textfeld etc.)

  • AutoIT-Ersatz unter Linux

    • Unicom
    • 12. Juni 2009 um 20:52

    Auf meinen Rechner läuft nun Ubuntu 9.04 ;) und eine große Kleinigkeit fehlt noch zum Glück
    Nun suche ich eine Skriptsprache ähnlich wie AutoIT unter Linux.

    Die Vorzüge von AutoIT liegen für mich in der Makrosteuerung und GUI Programmierung:
    "Mittels eigner GUI: Starte Programm, öffne Datei, clicke auf Button, warte auf Ereignis, lies Inhalt aus, bearbeite und schreib Daten in ein Log" das läßt sich elegant unter AutoIT bewerkstelligen.

    Bisher hab ich Gambas (http://gambas.sourceforge.net/en/main.html) gefunden (aber noch nicht verwendet - will eure Meinung ja hören wie man sowas umsetzt) als Skriptsprache, aber ich weiß nicht ob man auch externe GUIs ansteuern lassen.
    Aber gerade die Automatisierung von tagtäglichen Arbeitsschritten ist für mich sehr wichtig. (Wer möchte 100 mal die gleichen Arbeitsschritte ausführen?)

    Was verwendet ihr? Könnt ihr irgendwas empfehlen?

  • Vista ist Müll

    • Unicom
    • 2. Juni 2009 um 08:46

    Grund für diesen Thread war ein Ärgernis mit einem Treiber für Bluetooth.
    MS aktualisiert nicht den Treiber für Bluetooth-Audio auf den aktuellen (bzw. funktionierenden) Stand .
    Im Gerätemanager Audio/Video/game controller kann man die Treiber-Version ausfindig machen.
    Unter http://www-307.ibm.com/pc/support/site.wss/MIGR-67490.html gibt es eine akutellere Version 6.0.1.4400 des Treibers.

    Ohne dieses Update kriegt man nen Bluescreen bei Benützung von Bluettooth-Audio.

    Sonst bin ich mit Vista soweit zufrieden ;)
    Vielleicht war ich verwöhnt, dass Vista die Treiber selbst aktualsiert.

  • Vista ist Müll

    • Unicom
    • 3. April 2009 um 11:30

    Topic closed

  • Vista ist Müll

    • Unicom
    • 3. April 2009 um 11:25

    wasn müll

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™