Ja richtig SQL-T Skript ausführen - Unter Skripte fand ich noch etwas
Und mit LAN support gibt es auch
http://www.autoitscript.com/forum/topic/95…__1#entry689275
Ja richtig SQL-T Skript ausführen - Unter Skripte fand ich noch etwas
Und mit LAN support gibt es auch
http://www.autoitscript.com/forum/topic/95…__1#entry689275
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.
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)
Verwendest du die neuste Beta? Dann wirds wohl daran liegen.
Vielen Dank
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?
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.
(Verwendet Autoit 3.3.0.0)
;Verwendete Quellen http://www.autoit.de/index.php?page…cess#post105389
;Benützung:
;DEL: Entfernen eigener Einträge
;Enter: Einfügen eigener Einträge
#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"
#RequireAdmin
Global $hPsAPI = DllOpen("Psapi.dll")
Global $hKernel = DllOpen("Kernel32.dll")
Opt("GUIOnEventMode", 1)
$GUIname="Recaller"
$filenameini=@ScriptDir&"\Recaller.ini"
$filenamememory=@ScriptDir&"\storage.ini"
DIM $ownchecked[1]
DIM $Executelist[1]
;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
createGui()
loadini()
If BitAND(GUICtrlRead ($keepselection ) , $GUI_CHECKED) Then
loadData($filenamememory)
Else
refresh()
EndIf
If BitAND(GUICtrlRead ($execute_at_startup ) , $GUI_CHECKED) Then
Executeallmarked()
EndIf
While 1
If _IsPressed("2E", $dll) AND WinActive ( $GUIname) Then ;"del"
Delexpression()
EndIf
If _IsPressed("0D", $dll) AND WinActive ( $GUIname) Then ;"enter"
Addexpression()
EndIf
$keepselectioncheck = GUICtrlRead ($keepselection )
$execute_at_startupcheck = GUICtrlRead ($execute_at_startup )
sleep(100)
WEnd
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
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
Func createGui()
$gui_x=454
$gui_y=454
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)
$menue1b = GUICtrlCreateMenu ( "&Options" )
$keepselection = GUICtrlCreateMenuitem ("Keep Selections at restart",$menue1b)
$execute_at_startup = GUICtrlCreateMenuitem ("Autostart selected at startup",$menue1b)
$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)
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")
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)
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
Func Restore()
$var = FileOpenDialog ( "Restore Selctions",@WorkingDir , "Textfiles (*.txt)",1 )
if @error = 0 Then
loadData($var)
EndIf
EndFunc
Func saveData($filename)
$file= FileOpen ( $filename, 2)
If $file = -1 Then
MsgBox(0, "Error", "Unable to write file.")
FileClose($file)
return
endif
For $i=1 to UBound($Programmlist_duplikatefree)-1
If (_GUICtrlTreeView_GetChecked($hTreeView, $check[$i])) Then
FileWriteLine ( $file, $Programmlist_duplikatefree[$i])
EndIf
Next
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
FileClose($file)
EndFunc
Func loadData($filename)
$file = FileOpen($filename, 0)
If $file = -1 Then
FileClose($file)
return
endif
;Felder löschen
_GUICtrlTreeView_DeleteAll($hTreeView)
Dim $Programmlist_duplikatefree[1]
Dim $Executelist[1]
Dim $check[1]
Dim $ownchecked[1]
$flag=0
$counter=0
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
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
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
Func saveini()
IniWrite( $filenameini , "", "keepselectioncheck", $keepselectioncheck )
IniWrite( $filenameini , "", "execute_at_startupcheck", $execute_at_startupcheck )
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)
$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
;Treemenueeinträge erstellen
Dim $Check[Ubound($Programmlist_duplikatefree)]
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
$Programmlist=_ArrayUnique($Programmlist)
EndFunc
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 )
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
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
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
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
Func Rememberselectiontoggle()
If BitAND($keepselectioncheck,1) = 1 Then
GUICtrlSetState ( $keepselection, $GUI_UNCHECKED )
Else
GUICtrlSetState ( $keepselection, $GUI_CHECKED )
EndIf
EndFunc
Func Beenden()
saveini()
If BitAND($keepselectioncheck,1) = 1 Then
saveData($filenamememory)
EndIf
GUIDelete()
DllClose($dll)
Exit
EndFunc
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.
@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?
Die Abfrage sollte Im Hintergrund aus einem Skript heraus geschehen.
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.
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.
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
;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
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.
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.
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
peethebee & Stilgar
Was verwendet ihr denn um unter Linux Programme zu erstellen?
Ä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.)
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?
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.
Topic closed
wasn müll