Über den (Un)sinn, einen Webbrowser in pur-AutoIt programmieren zu wollen, haben wir schon mehrmals geredet.
Es ist in etwa so, als ob du jemandem immer wieder sagst: Ein Formel 1 Auto läßt sich nicht nur aus Holz bauen, derjenige aber immer wieder aufs Neue trötet: "Ich baue jetzt einen funktionsfähigen Formel 1 Boliden nur aus Holz, wer hilft mir."
Sorry, aber die Welt besteht nicht nur aus beratungsresistenten Leuten. Ich werde sicher keine Zeit in die Unterstützung eines totgeborenen Kindes investieren. ![]()
Beiträge von BugFix
-
-
Ein Bemühen der Forumssuche hätte dir den Wettbewerb dazu geliefert. Hier der Ergebnispost: [Beendet] µitLight März
-
Lies dir erst mal diverse Tuts zu SQL durch. Das Basis-Handling ist in allen SQL-Dialekten annähernd gleich.
Ich verwende inzwischen lieber das FF-AddOn (auch wenn ich den FF sonst nicht verwende) für SQLite zum Bearbeiten von Datenbanken.
Lad dir das mal und schau es an, das wird schon einige deiner Fragen beantworten und ermöglicht dir gutes Üben. -
immer der schwarze Kasten zu sehen wo das Previewwindow war. Gibt es keine möglichkeit dieses GUI- Element wieder zu entfernen?
Entfernen ist nicht sinnvoll - dann bekommst du es nicht wieder zum Laufen. Wenn du das schwarze Capture-Window (es ist kein Control, sondern ein separates Fenster) nicht sehen magst, schieb einfach ein Child-Window bei Bedarf drauf.
Hier der betreffende Teil aus meinem Bsp. um das Child-Window ergänzt.:Spoiler anzeigen
[autoit]$hWnd_Blende = GUICreate("", 322, 242, 9, 9, $WS_POPUP, $WS_EX_MDICHILD, $hWnd_Camera) ; == Child Erstellen
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hWnd_Blende) ; == Child zeigen --> überdeckt das Capture-FensterWinSetOnTop($hWnd_Camera, '', 1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hWnd_Camera)While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
_WebcamClose($idCam)
Exit
EndFuncFunc _CameraOnOff()
[/autoit]
; == Kamera (de)aktivieren - Standbild An/Aus
If $isCamera = 0 Then
GUICtrlSetData($btCamera, 'Kamera AUS')
GUICtrlSetColor($btCamera, 0xFF0000)
GUICtrlSetState($btFoto, $GUI_ENABLE)
GUISetState(@SW_HIDE, $hWnd_Blende) ; == Kamera wird aktiviert --> Child ausblenden
_WebcamActive($idCam)
Else
GUICtrlSetData($btCamera, 'Kamera EIN')
GUICtrlSetColor($btCamera, 0x008000)
GUICtrlSetState($btFoto, $GUI_DISABLE)
GUISetState(@SW_SHOW, $hWnd_Blende) ; == Kamera wird deaktiviert --> Child einblenden
_WebcamInactive($idCam)
EndIf
$isCamera = BitXOR($isCamera, 1)
If $isCamera = 1 Then _PreviewOnOff()
EndFunc -
-
Die UDF von Ludocos ist nicht gerade ausgereift
. Ich habe diese mal etwas umgearbeitet und dieses Bsp. erstellt. -
-
Bisher habe ich das immer als Einzellösung neu geschrieben - nun in einer UDF verpackt.
Es lassen sich GIFs mit Transparenz als Schaltflächen verwenden, bei Klick wird das Buttonverhalten auch in der Darstellung simuliertAufgrund des internen Handlings ist zur Nutzung zwingend der OnEventMode erforderlich!
Folgende Funktionen stehen zur Verfügung:
_GUICtrl_TransGifButton_Create
Erstellt aus einem transparenten GIF ein Button-Control, dass bei Klick buttontypisch animiert wird
Die Anzahl der erstellbaren Button ist z.Zt. auf 255 begrenzt._GUICtrl_TransGifButton_Show
Macht alle erstellten GIF-Button sichtbar_GUICtrl_TransGifButton_GetMsg
Gibt den String-Identifier des geklickten GIF-Button zurück_GUICtrl_TransGifButton_SetImage
Setzen eines neuen Images für einen GIF-ButtonHier ein Bsp. (Binärdaten gekürzt, im Anhang kpl.)
Spoiler anzeigen
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-08-24 17:41:41
#EndRegion - TimeStamp#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include 'TransGifButton.au3'Opt('GuiOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]#region - Transparente Bild-Datei
[/autoit] [autoit][/autoit] [autoit]
OnAutoItExitRegister("_DelBinaryTempFiles")
; == Picture binär
Global $aBin[3], $aPictFile[3]
$aBin[0] = "0x47494638396130003000F7000000000062440E6365397F7624616F427A7C6B3E7ECA417CC118BA7824C6793DDB7F7EAD6F52D07E5E89AC5CB7857182807F9D9C729DAD64BA8675A5B5478BDC498CD.."
$aPictFile[0] = @ScriptDir & "\tmp_pict_0.gif"
$aBin[1] = "0x47494638396130003000F70000000000153E0C1F5B0A3B5F382668072A700E357C1833672E3975383D7C31437D1C4A7C2449484950524F5153515958576A6A696F6D6A7173717574737B7A777D7D7.."
$aPictFile[1] = @ScriptDir & "\tmp_pict_1.gif"
$aBin[2] = "0x47494638396130003000F700000000001E4F65364E59384F5A38505B3B535D20516624546929596E2C5C72335D6F3F566031607636657A3B617238677C39687D4259644960694A636E4B646F4C626.."
$aBin[2] &= "00270C6287513C4354CEC0850B6EA00639F802136C48820B14718B5D1401978B78C43527400146AC22164BDC64307D63102CEC424BD928C50B92A00636AC41093368C02550A10A13E811038AD0C32F.."
$aPictFile[2] = @ScriptDir & "\tmp_pict_2.gif"For $i = 0 To 2
[/autoit] [autoit][/autoit] [autoit]
Local $hFileOut = FileOpen($aPictFile[$i], 2+8+16)
FileWrite($hFileOut, Binary($aBin[$i]))
FileClose($hFileOut)
NextFunc _DelBinaryTempFiles()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 2
FileDelete($aPictFile[$i])
Next
EndFunc
#endregion - Transparente Bild-Datei$guiMain = GUICreate('Main', 400, 300, 200, 100)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit', $guiMain)
GUISetBkColor(0xFFFFAA, $guiMain)$GifButton1 = _GUICtrl_TransGifButton_Create($guiMain, '_ImageClick', $aPictFile[0], 60, 126, 48, 48)
[/autoit] [autoit][/autoit] [autoit]
$GifButton2 = _GUICtrl_TransGifButton_Create($guiMain, '_ImageClick', $aPictFile[1], 176, 126, 48, 48, $WS_BORDER)
$GifButton3 = _GUICtrl_TransGifButton_Create($guiMain, '_ImageClick', $aPictFile[2], 292, 126, 48, 48, $WS_THICKFRAME)_GUICtrl_TransGifButton_Show()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $guiMain)$t = TimerInit()
[/autoit] [autoit][/autoit] [autoit]
While 1
Sleep(50)
If TimerDiff($t) >= 3000 Then
_GUICtrl_TransGifButton_SetImage($GifButton1, $aPictFile[2])
EndIf
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _ImageClick()
[/autoit]
Switch _GUICtrl_TransGifButton_GetMsg()
Case $GifButton1
MsgBox(0, '', 'Picture-Button 1 geklickt')
Case $GifButton2
MsgBox(0, '', 'Picture-Button 2 geklickt')
Case $GifButton3
MsgBox(0, '', 'Picture-Button 3 geklickt')
EndSwitch
EndFuncTransGifButton.au3 v1.0
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-08-24 18:00:01 v 1.0
#EndRegion - TimeStamp
#include-once
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrl_TransGifButton_Create
; Description......: Erstellt aus einem transparenten GIF ein Button-Control, dass bei Klick buttontypisch animiert wird
; Parameter(s).....: $hWndMain Handle des Fensters auf dem der Button erstellt wird
; $sFunc Funktion, die bei Klick auf den Button ausgeführt wird
; $sPathGIF Pfad zur GIF-Datei
; $iX x-Position auf der GUI
; $iY y-Position auf der GUI
; $iW Breite des Button
; $iH Höhe des Button
; $iStyle Wenn gewünscht, kann mit $WS_THICKFRAME oder $WS_BORDER kombiniert werden
; Requirement(s)...: Um den Button zu sehen, muß vor oder nach @SW_SHOW der GUI die Funktion "_GUICtrl_TransGifButton_Show()" aufgerufen werden
; Return Value(s)..: Erfolg String-Identifier, der die Auswertung über "_GUICtrl_TransGifButton_GetMsg()" ermöglicht
; Fehler 0 @error 1 - Mainwindow existiert nicht
; 2 - Imagepfad existiert nicht
; Note.............: Der Button registriert nur Klicks, die das Bild treffen! Ein Klick in den transparenten Bereich wird nicht erkannt.
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrl_TransGifButton_Create($hWndMain, $sFunc, $sPathGIF, $iX, $iY, $iW, $iH, $iStyle=-1)
Local $STYLE = $WS_POPUP
If $iStyle <> -1 Then $STYLE = BitOR($WS_POPUP,$iStyle)
If Not WinExists($hWndMain) Then Return SetError(1,0,0)
If Not FileExists($sPathGIF) Then Return SetError(2,0,0)
Local $guiChildButton = GUICreate("", $iW, $iH, $iX, $iY, $STYLE, BitOR($WS_EX_LAYERED,$WS_EX_MDICHILD), $hWndMain)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '__GUICtrl_TransGifButton_MDown', $guiChildButton)
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '__GUICtrl_TransGifButton_MUp', $guiChildButton)
Local $aParam[4] = [$hWndMain,$guiChildButton,$sFunc,GUICtrlCreatePic($sPathGIF, 0, 0, $iW, $iH)]
__GUICtrl_TransGifButton_Manage('add', $aParam)
Return __GUICtrl_TransGifButton_Manage('create_sID', $guiChildButton)
EndFunc ; ==>_GUICtrl_TransGifButton_Create;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrl_TransGifButton_Show
; Description......: Macht alle erstellten GIF-Button sichtbar
; Parameter(s).....: keine
; Requirement(s)...: Ausführen vor oder nach @SW_SHOW der Haupt-GUI
; Return Value(s)..: kein
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrl_TransGifButton_Show()
__GUICtrl_TransGifButton_Manage('show_All')
EndFunc ; ==>_GUICtrl_TransGifButton_Show;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrl_TransGifButton_GetMsg
; Description......: Gibt den String-Identifier des geklickten GIF-Button zurück
; Parameter(s).....: keine
; Requirement(s)...: keine
; Return Value(s)..: kein
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrl_TransGifButton_GetMsg()
Return __GUICtrl_TransGifButton_Manage('get_Clicked')
EndFunc ; ==>_GUICtrl_TransGifButton_GetMsg;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrl_TransGifButton_SetImage
; Description......: Setzen eines neuen Images für einen GIF-Button
; Parameter(s).....: $sID String-Identifier von _GUICtrl_TransGifButton_Create
; $sPathImage Pfad zur GIF-Datei
; Requirement(s)...: keine
; Return Value(s)..: Erfolg 1
; Fehler 0 @error 1 - $sID existiert nicht
; 2 - GIF-Datei existiert nicht
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrl_TransGifButton_SetImage($sID, $sPathImage)
Local $index = StringTrimLeft($sID, 11)
Local $CtrlID = __GUICtrl_TransGifButton_Manage('get_sID', $index)
If @error Then Return SetError(1,0,0)
If Not FileExists($sPathImage) Then Return SetError(2,0,0)
Return GUICtrlSetImage($CtrlID, $sPathImage)
EndFunc ; ==>_GUICtrl_TransGifButton_SetImage#region - Interne Funktionen
[/autoit] [autoit][/autoit] [autoit]
Func __GUICtrl_TransGifButton_Manage($sCommand, $vParam=0) ; max 255 Button ==> wenn mehr erwünscht >> $aGIFButton vergrößern
Local Static $aGIFButton[256][3] = [[0]]
Local Static $lastBtClicked = '', $BtClicked = ''
Local $index
Switch $sCommand
Case 'add'
$aGIFButton[0][1] = $vParam[0] ; hWndMain
$aGIFButton[0][0] += 1
$aGIFButton[$aGIFButton[0][0]][0] = $vParam[1] ; hWndChild
$aGIFButton[$aGIFButton[0][0]][1] = $vParam[2] ; Funktionsname
$aGIFButton[$aGIFButton[0][0]][2] = $vParam[3] ; Picture-ID
Case 'get_Func'
$index = _ArraySearch($aGIFButton, $vParam)
If Not @error Then Return $aGIFButton[$index][1]
Case 'create_sID'
$index = _ArraySearch($aGIFButton, $vParam)
If Not @error Then Return 'Gif_Button_' & $index
Case 'show_All'
For $i = 1 To $aGIFButton[0][0]
GUISetState(@SW_SHOW, $aGIFButton[$i][0])
Next
Case 'set_Clicked'
$index = _ArraySearch($aGIFButton, $vParam)
$BtClicked = 'Gif_Button_' & $index
Case 'get_Clicked'
If $BtClicked <> $lastBtClicked Then
$lastBtClicked = $BtClicked
Return $BtClicked
Else
Return ''
EndIf
Case 'end_Func'
$lastBtClicked = ''
Case 'get_HWnd'
Return $aGIFButton[$vParam][0]
Case 'get_sID'
Return $aGIFButton[$vParam][2]
Case 'get_Main'
Return $aGIFButton[0][1]
EndSwitch
EndFunc ; ==>__GUICtrl_TransGifButton_ManageFunc __GUICtrl_TransGifButton_MDown()
[/autoit] [autoit][/autoit] [autoit]
Local $hWnd = WinGetHandle('[ACTIVE]')
Local $pos = WinGetPos($hWnd)
WinMove($hWnd, '', $pos[0]+1, $pos[1]+1)
EndFunc ; ==>__GUICtrl_TransGifButton_MDownFunc __GUICtrl_TransGifButton_MUp()
[/autoit]
Local $hWnd = WinGetHandle('[ACTIVE]')
WinActivate(__GUICtrl_TransGifButton_Manage('get_Main'))
Local $pos = WinGetPos($hWnd)
WinMove($hWnd, '', $pos[0]-1, $pos[1]-1)
__GUICtrl_TransGifButton_Manage('set_Clicked', $hWnd)
Call(__GUICtrl_TransGifButton_Manage('get_Func', $hWnd))
__GUICtrl_TransGifButton_Manage('end_Func', $hWnd)
EndFunc ; ==>__GUICtrl_TransGifButton_MUp
#endregion -
Hier mal ein Mustercode (Bild ist binär eingebunden).
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]#region - Transparente Bild-Datei
[/autoit] [autoit][/autoit] [autoit]
OnAutoItExitRegister("_DelBinaryTempFiles")
; String mit den Binärdaten von: config_tool1.gif (48x48)
Local $bPict = "0x47494638396130003000F70000000000153E0C1F5B0A3B5F382668072A700E357C1833672E3975383D7C31437D1C4A7C2449484950524F5153515958576A6A696F6D6A7173717574737B7A777D7D7D7E7E7E3E820D3E82163E84233E813E43820C4880164E83154B8A114A8A1851871B538D1457921A4186234789224A8A2C4A8E2F498E314F92254A90314B91324E93354A9039528F2250803253962052972B5A992652973754973D54983B5A9D345D9F33619F2967A22960A13B6BA7326AA53D6CA93B72AA2D70AA3F78AE3C49934C5C89455895525E935F57A55C5DA163648C4F6C985C6991687298677B9D6A61A14065A44A69A64461A3506CA85169AA5C76B04C7CB5457FB64972B05477B15779B75762A66966A36867AE6D6EAC7773B36B7EB8667DB86D7DBA747EBC7079B8797EBD8686BA4781B85F86BB668BB96F87B57281BF7D8AB8718BC1528BC66B8CC77C91C7749AD27D8384838585858686868989898C8C8C8E8E8E9090909292929494949596959696969799989898989A9A9A9C9B9B9E9E9E9F9F9F80AD858DA782A0A0A0A3A3A3A5A5A1A6A6A6A5AEA5A8A4A2A9A9A9AAAAAAACACACAEAEAEAFAFAFB0B0AFB0B0B0B1B1B1B2B2B2B3B3B4B2B4B2B4B4B4B6B6B6B7B7B7B8B8B8BABABABCBCBCBEBEBEBFBFBF85C18086C3858FC98B92CA8291CD8797CF8890CB9092CE9496CF9094CF969DC59895D1999FD6929CD6959EC9A195D0A19BD2A99FD9A39ED9A59FDAA69ED9A89FD9A9A0C698A0DAA6A4DDA2A7DDA7A1DAA8A4DEAAA4DDACA7DFAFA7DEB6A8D9B2ABDCB8B4D2A9B5DDBDA7E0AFAAE2ACACE3A8A8E1B1A9E2B0ABE2B1AEE6B6AFE7BBB1E8B9B0E9BDB0E8BFB2EAC1B4EDC7B7EFC8B8F0CBC0C0C0C1C1C1C2C2C2C4C4C4C6C6C6C7C7C7C8C8C8C9C9C9CACACACBCBCBCCCCCCCDCDCDCECECECFCFCFD0D0D0D2D2D2D4D4D4D6D6D6D8D8D8D9D9D9DADADADBDBDBDCDCDCDEDEDEC1F8D3E0E0E0E1E1E1E3E3E3E4E4E4E5E5E5E6E6E6E7E7E7E8E8E8E9E9E9EAEAEAEBEBEBECECECEDEDEDEEEEEEF0F0F0F1F1F1F2F2F2F3F3F3F4F4F4F5F5F5F6F6F6F7F7F7F8F8F8F9F9F9FAFAFAFEFEFE00000021F904010000FF002C00000000300030000008FF00FF091C48B0A0C18308132A5CC8B0A1C3871023E6C2A52BA24584A4C0B852B64CD5C58F03596C29658C5C3254202F1EC9E0E44C2C5AB6BEA42CE86E1E3F85490AA880B269950D644F66FECB362F5F3E81D5C021146060058A519EA8043313F11BC14CEEE0C18B27D05ABD840432C060D2CA8AA83511A7D5FB3AE91CBAB7021BCDF39730C885142FBCD4E241AC0AC46AE9D6B15B67EE5AB36802FDE03B9A5001061931429D8A320C8DC345DDC0651237AE5CB9698BFE49D3C6AEDDC20D236A3469A5A6D3278789BA4162000193BB76EACE9513C779DC42251E4EDCE8D24B8AB0310D9F79E36328C28470F5EC2DD687AF9E3C862E3ED0C0014AD6946265188AFFBBD4C0CD206ADBBA9943A7AEDDBB78A619722091C347AC366C4CED52A8ED5B9E070E48308E37DC4C438D36E979C38C432198A00317C0A4310B190A89F3CD368C50F0C8371C7AA38D33975442C843468830430F9CF822C62DB020840D37FD11D88D37DE7C43A3338158B4400B4BFCC0CA2FC768715033CFE8F1467F1C7E93CD227EA4D441093B68F24A2A57185449338854924834DE54D2A450FF000242024260514416053D72C922975CF28C34601A848006401011062F032D524925CF3833CD24712284C40143FC2190229438630D357F069A5000031412C92395BCB8CD358E2E74879B977C234E38DA64BA50227268830D3AE76C23AA429648E32587DCACFC9A1035D57C53CF2592C42AEB41DC5473CE3EFBDCB3C735AAEE4A1037D4C0D34F3FFC78F34F1C4A192B1036D3CCB3EC3EDD0CB48755C642238D3C46D9A3EB40958C9BA9246FC233CF3CF2845A501DEE664A0734D1B4D7CE3AD8200447B68ED611CD33E59863CE38D328D48733810AD2278DDE7483F0429838026625CC30A3CDC5D83CBC9005D9CCE4672597482372348839240735203DB34D36CE34E332337042A44D342847844D378910E2CD35965812CD881065E288251685537323E058F20CD010C1D16AC11095339024E25073C8477674233544E3440BCD378980040722F46CED901FE054534D377ACC0407AE11CD81871C15486BF7DD78DB1D10003B"
Global $sPictFile = @ScriptDir & "\config_tool.gif"
Local $hFileOut = FileOpen($sPictFile, 2+8+16)
FileWrite($hFileOut, Binary($bPict))
FileClose($hFileOut)Func _DelBinaryTempFiles()
[/autoit] [autoit][/autoit] [autoit]
FileDelete($sPictFile)
EndFunc
#endregion$guiMain = GUICreate('Main', 400, 300)
[/autoit] [autoit][/autoit] [autoit]
; == Ein Child erstellen in der Größe des Pictures
$guiChild = GUICreate("Child", 48, 48, 176, 126, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $guiMain)
; == darauf platzieren wir das transparente Picture
GUICtrlCreatePic($sPictFile, 0, 0, 48, 48)
GUISetState(@SW_SHOW, $guiChild)
GUISetState(@SW_SHOW, $guiMain)$t = TimerInit()
[/autoit]
While 1
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
If TimerDiff($t) >= 3000 Then GUISetBkColor(0xFFFFAA, $guiMain)
WEnd -
Grundsätzlich sollte wohl auch jeder mit den englischen Begriffen klarkommen. Das ist nun mal die Standardsprache im Computerbereich.
Du kannst ja aber auch im Include die Systemsprache abfragen und in Abhängigkeit davon die Konstanten in deutsch oder englisch gestalten.
-
Schnappschuss mit 'ss'
Nee nee, bei mit wird noch scharf geschossen.
-
Hi,
nachdem ich die Webcam-UDF von Ludocus etwas erweitert habe, ist sie nun auch sinnvoll nutzbar.(außer Video-Aufzeichnung, die schmiert noch ab - da bin ich noch dran)
Hier mal ein kleines Bsp.:
- Kamera ein/ausschalten
- Toggle Standbild/Livebild
- Schnappschuß (gespeichert wird im @ScriptDir)
- *.avi -Aufzeichnung (Speicherplatz in Einstellungs-INI bestimmbar) <== Bsp. 2 (MyWebcam)Edit 13.09.2011
Die zweite Anwendung basiert auf der ersten, hat aber zusätzlich auch die Record-Funktion. In der Original-UDF fehlten da die entscheidenden Funktionen um Aufzunehmen ohne dass die Anwendung einfriert. Das Problem ist nun gelöst.
Resultierend daraus ist die Konstantendatei um eine Struktur erweitert. Die Funktionen habe ich jetzt in eine eigene Datei gepackt. Wenn ihr sie nicht im registrierten Include-Ordner speichert, muß zumindest die Konstanten-Datei im selben Ordner, wie die Funktionsdatei gespeichert werden.Ich habe nur die notwendigen UDF-Funktionen gleich in das Skript gepackt (getrennt in Bsp. MyWebcam). Die Konstanten habe ich jedoch in die "WebcamConstants.au3" ausgelagert.
SimpleWebcamApp
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-08-23 16:48:25
#EndRegion - TimeStamp
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WebcamConstants.au3>; =============================================================================
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; Titel..........: SimpleWebcamApp.au3
; Beschreibung...: Webcam Ein/Aus, Live/Standbild, Schnappschuß (*.bmp) ==> im @ScriptDir
; Version AutoIt.: 3.3.6.1
; Author.........: BugFix
; ...............: Webcam Funktionen von Ludocus und pierrotm777
; ...............: Modifiziert BugFix
; =============================================================================Opt('GuiOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
Opt('MustDeclareVars', 1)Global $avicap = DllOpen("avicap32.dll")
[/autoit] [autoit][/autoit] [autoit]
Global $user = DllOpen("user32.dll")Global $hWnd_Camera, $idCam, $isCamera = 0, $btCamera, $btFoto, $rLive
[/autoit] [autoit][/autoit] [autoit]$hWnd_Camera = GUICreate('Webcam', 340, 348, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit', $hWnd_Camera)
; == Capturing für Fenster aktivieren:
$idCam = _WebcamOpen($hWnd_Camera, 10, 10, 320, 240)
$btFoto = GUICtrlCreateButton('Foto', 10, 260, 48, 22)
GUICtrlSetOnEvent(-1, '_Snap')
GUICtrlSetState(-1, $GUI_DISABLE)
$btCamera = GUICtrlCreateButton('Kamera EIN', 10, 315, 120, 25)
GUICtrlSetOnEvent(-1, '_CameraOnOff')
GUICtrlSetColor(-1, 0x008000)
GUICtrlSetFont(-1, 10, 600)
$rLive = GUICtrlCreateRadio('', 155, 322, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlSetOnEvent(-1, '_PreviewOnOff')
ControlFocus($hWnd_Camera, '', $rLive)
GUICtrlCreateLabel('Live', 175, 319, 60)
GUICtrlSetColor(-1, 0x008000)
GUICtrlSetFont(-1, 10, 600)
GUICtrlCreateRadio('', 230, 322, 17)
GUICtrlSetOnEvent(-1, '_PreviewOnOff')
GUICtrlCreateLabel('Standbild', 250, 319, 75)
GUICtrlSetColor(-1, 0x008000)
GUICtrlSetFont(-1, 10, 600)WinSetOnTop($hWnd_Camera, '', 1)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hWnd_Camera)While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
_WebcamClose($idCam)
Exit
EndFuncFunc _CameraOnOff()
[/autoit] [autoit][/autoit] [autoit]
; == Kamera (de)aktivieren - Standbild An/Aus
If $isCamera = 0 Then
GUICtrlSetData($btCamera, 'Kamera AUS')
GUICtrlSetColor($btCamera, 0xFF0000)
GUICtrlSetState($btFoto, $GUI_ENABLE)
_WebcamActive($idCam)
Else
GUICtrlSetData($btCamera, 'Kamera EIN')
GUICtrlSetColor($btCamera, 0x008000)
GUICtrlSetState($btFoto, $GUI_DISABLE)
_WebcamInactive($idCam)
EndIf
$isCamera = BitXOR($isCamera, 1)
If $isCamera = 1 Then _PreviewOnOff()
EndFuncFunc _PreviewOnOff()
[/autoit] [autoit][/autoit] [autoit]
; == Livebild An/Aus
If Not $isCamera Then
_WebcamActive($idCam)
$isCamera = 1
GUICtrlSetData($btCamera, 'Kamera AUS')
GUICtrlSetColor($btCamera, 0xFF0000)
GUICtrlSetState($btFoto, $GUI_ENABLE)
EndIf
If BitAND(GUICtrlRead($rLive), $GUI_CHECKED) Then
_WebcamPreview($idCam)
Else
_WebcamStopPreview($idCam)
EndIf
EndFuncFunc _Snap()
[/autoit] [autoit][/autoit] [autoit]
Local $sFile = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & '.bmp', $sSave, $mb
If _WebcamSnap($idCam, @ScriptDir & '\' & $sFile) = 1 Then
WinSetOnTop($hWnd_Camera, '', 0)
While True
Do
$sSave = InputBox('Schnappschuß speichern', 'Bitte Dateinamen eingeben')
If $sSave = '' Then $mb = MsgBox(262180, 'Kein Dateiname vergeben', 'Eingabe Wiederholen?')
Until $sSave <> '' Or $mb = 7
If $sSave = '' Or $mb = 7 Then
WinSetOnTop($hWnd_Camera, '', 1)
FileDelete(@ScriptDir & '\' & $sFile)
Return
EndIf
If StringRight($sSave, 4) <> '.bmp' Then $sSave &= '.bmp'
If FileExists(@ScriptDir & '\' & $sSave) Then
MsgBox(262192, 'Fehler', $sSave & ' existiert bereits!', 3)
Else
ExitLoop
EndIf
WEnd
FileMove(@ScriptDir & '\' & $sFile, @ScriptDir & '\' & $sSave)
EndIf
WinSetOnTop($hWnd_Camera, '', 1)
EndFunc; ==================== webcam - UDF von Ludocus, BugFix ==========================================================================================
[/autoit] [autoit][/autoit] [autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; 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)
Local $cap = DllCall($avicap, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $sLeft, "int", $sTop, "int", $sWidth, "int", $sHeight, "hwnd", $sHwnd, "int", 1)
If @error Then Return -1
Return $cap[0]
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; 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_SET_PREVIEW, "int", 0, "int", 0);ferme le preview
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_CALLBACK_FRAME, "int", 0, "int", 0);ajout
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_END, "int", 0, "int", 0)
DllClose($user)
If @error Then
Return 0
Else
Return 1
EndIf
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamActive
; Description......: Connects the capture driver for specified webcam-id (default 0) to the capture window (like camera switch on)
; shows freeze image
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; $WebCamId - specified webcam-id (default 0)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WebcamActive($sId, $WebCamId=0)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_CONNECT, "int", $WebCamId , "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamInactive
; Description......: Disonnects the capture driver from the capture window (like camera switch off)
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WebcamInactive($sId)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamPreview
; Description......: shows live image in the capture window
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; Requirement(s)...: Run _WebcamActive before
; Author(s)........: Ludocus
;===============================================================================
Func _WebcamPreview($sId)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEWRATE, "int", 15, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamStopPreview
; Description......: stops the live image in the capture window
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; Author(s)........: Ludocus
;===============================================================================
Func _WebcamStopPreview($sId)
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEW, "int", 0, "int", 0)
EndFunc;===============================================================================
[/autoit]
; 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
EndFuncWeb_Cam.au3 (v0.1)
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-09-13 18:49:24 v 0.1
#EndRegion - TimeStamp#include-once
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <WebcamConstants.au3>;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Description: Open's a webcam capturing window 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
; Modified: BugFix ( [email='bugfix@autoit.de'][/email] )
; Note(s): Sets the "fYield" param to 1, that allows user action during capturing (controls not frozen now)
;===============================================================================
Func _WebcamOpen($sHwnd, $sLeft, $sTop, $sWidth, $sHeight)
Local $cap = DllCall($Dll_avicap, "int", "capCreateCaptureWindow", "str", "cap", "int", BitOR($WS_CHILD,$WS_VISIBLE), "int", $sLeft, "int", $sTop, "int", $sWidth, "int", $sHeight, "hwnd", $sHwnd, "int", 1)
If @error Then Return -1
Local $tCAPTUREPARMS = __CAP_GET_SEQUENCE_SETUP($cap[0])
If @error Then Return -1
__CAP_SET_SEQUENCE_SETUP($cap[0], $tCAPTUREPARMS)
If @error Then Return -1
Return $cap[0]
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; 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($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEW, "int", 0, "int", 0);ferme le preview
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_CALLBACK_FRAME, "int", 0, "int", 0);ajout
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_END, "int", 0, "int", 0)
DllClose($Dll_user)
If @error Then
Return 0
Else
Return 1
EndIf
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamActive
; Description......: Connects the capture driver for specified webcam-id (default 0) to the capture window (like camera switch on)
; shows freeze image
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; $WebCamId - specified webcam-id (default 0)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WebcamActive($sId, $WebCamId=0)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_CONNECT, "int", $WebCamId , "int", 0)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_SCALE, "int", 1, "int", 0)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_OVERLAY, "int", 1, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamInactive
; Description......: Disonnects the capture driver from the capture window (like camera switch off)
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WebcamInactive($sId)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_DRIVER_DISCONNECT, "int", 0, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamPreview
; Description......: shows live image in the capture window
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; Requirement(s)...: Run _WebcamActive before
; Author(s)........: Ludocus
;===============================================================================
Func _WebcamPreview($sId)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEW, "int", 1, "int", 0)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEWRATE, "int", 15, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WebcamStopPreview
; Description......: stops the live image in the capture window
; Parameter(s).....: $sId - Id (returned from _WebcamOpen)
; Author(s)........: Ludocus
;===============================================================================
Func _WebcamStopPreview($sId)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_PREVIEW, "int", 0, "int", 0)
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Description: Creates a Snapshot from a webcam
; Syntax: _WebcamSnap($sId, $sFile)
; Parameter(s): $sId - Id (returned from _WebcamOpen); Requirement(s): A webcam
[/autoit] [autoit][/autoit] [autoit]
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
; Author(s): Ludocus
; Note(s): None
;===============================================================================
Func _WebcamSnap($sId, $sFile)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_GRAB_FRAME_NOSTOP, "int", 0, "int", 0)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SAVEDIBA, "int", 0, "str", $sFile)
If @error Then
Return 0
Else
Return 1
EndIf
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Description: Starts recording the webcam to file
; Syntax: _WebcamRecordStart($sId, $sFile)
; 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
; Modified: BugFix ( [email='bugfix@autoit.de'][/email] )
; Note(s): Stop recording by: _WebcamRecordStop($Id, $sFile)
;===============================================================================
Func _WebcamRecordStart($sId, $sFile)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_FILE_SET_CAPTURE_FILEA, "int", 0, "str", $sFile)
DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SEQUENCE, "int", 0, "int", 0)
If @error Then
Return 0
Else
Return 1
EndIf
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; 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($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_STOP, "int", 0, "int", 0)
If @error Then
Return 0
Else
Return 1
EndIf
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Description: De/Activate audio capturing
; Syntax: _WebcamAudioSet($sId [, $iOn])
; Parameter(s): $sId - Id (returned from _WebcamOpen)
; $iOn - 0 or 1 (Default) to switch Off/On
; Requirement(s): A webcam
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
; Note(s): By default in SEQUENCE_SETUP is capturing active
;===============================================================================
Func _WebcamAudioSet($sId, $iOn=1)
If $iOn <> 1 Then $iOn = 0
__CAP_SET_SEQUENCE_SETUP($sId, __CAP_GET_SEQUENCE_SETUP($sId), 'fCaptureAudio=' & $iOn)
If @error Then Return 0
Return 1
EndFunc; == helper functions:
[/autoit] [autoit][/autoit] [autoit]
;===============================================================================
; Description: Reads the values of current capture parameter
; Syntax: __CAP_GET_SEQUENCE_SETUP($sId)
; Return Value(s): On Success - Returns the CAPTUREPARMS-structure
; On Failure - Returns 0, set error
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func __CAP_GET_SEQUENCE_SETUP($sId)
Local $aParamStruc[24] = [ _
'dwRequestMicroSecPerFrame','fMakeUserHitOKToCapture','wPercentDropForError','fYield','dwIndexSize','wChunkGranularity','fUsingDOSMemory','wNumVideoRequested', _
'fCaptureAudio','wNumAudioRequested','vKeyAbort','fAbortLeftMouse','fAbortRightMouse','fLimitEnabled','wTimeLimit','fMCIControl','fStepMCIDevice','dwMCIStartTime', _
'dwMCIStopTime','fStepCaptureAt2x','wStepCaptureAverageFrames','dwAudioBufferSize','fDisableWriteCache','AVStreamMaster']
Local $tCAPTUREPARMS = DllStructCreate($tagCAPTUREPARMS), $pCAPTUREPARMS = DllStructGetPtr($tCAPTUREPARMS)
Local $ret = DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_GET_SEQUENCE_SETUP, "WPARAM", DllStructGetSize($tCAPTUREPARMS), "LPARAM", $pCAPTUREPARMS)
If @error Then
Return SetError(1,0,0)
Else
;~ For $i = 0 To 23
;~ ConsoleWrite($aParamStruc[$i] & @TAB & DllStructGetData($tCAPTUREPARMS, $aParamStruc[$i]) & @CRLF)
;~ Next
Return $tCAPTUREPARMS
EndIf
EndFunc;===============================================================================
[/autoit]
; Description: Sets one or more values in current capture parameter
; Syntax: __CAP_SET_SEQUENCE_SETUP($sId, $tCAPTUREPARMS [, $vParams=0])
; Parameter(s): $sId - Id (returned from _WebcamOpen)
; $tCAPTUREPARMS - structure from __CAP_GET_SEQUENCE_SETUP
; $vParams - string: "Param=value"; for more than one param use: "Param1=value|Param2=value|Param3=value|.."
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0, set error
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
; Note(s): Meaning of all parameters: http://msdn.microsoft.com/en-us/library/…2(v=VS.85).aspx
;===============================================================================
Func __CAP_SET_SEQUENCE_SETUP($sId, $tCAPTUREPARMS, $vParams=0) ; $vParams: Um nur einen Wert zu ändern "Parametername=Wert" übergeben, mehrere Werte mit "|" abtrennen
Local $aParamStruc[24] = [ _
'dwRequestMicroSecPerFrame','fMakeUserHitOKToCapture','wPercentDropForError','fYield','dwIndexSize','wChunkGranularity','fUsingDOSMemory','wNumVideoRequested', _
'fCaptureAudio','wNumAudioRequested','vKeyAbort','fAbortLeftMouse','fAbortRightMouse','fLimitEnabled','wTimeLimit','fMCIControl','fStepMCIDevice','dwMCIStartTime', _
'dwMCIStopTime','fStepCaptureAt2x','wStepCaptureAverageFrames','dwAudioBufferSize','fDisableWriteCache','AVStreamMaster']
If $vParams == 0 Then
Local $aParam2Set[1] = ['fYield=1'] ; == Default: Erlaubt Nutzereingaben während Capturing
Else
Local $aParam2Set = StringSplit($vParams, '|', 2)
EndIf
Local $aSplit
For $i = 0 To UBound($aParam2Set) -1
$aSplit = StringSplit($aParam2Set[$i], '=')
If $aSplit[0] <> 2 Then ContinueLoop
DllStructSetData($tCAPTUREPARMS, $aSplit[1], $aSplit[2])
Next
Local $pCAPTUREPARMS = DllStructGetPtr($tCAPTUREPARMS)
Local $ret = DllCall($Dll_user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_SEQUENCE_SETUP, "wparam", DllStructGetSize($tCAPTUREPARMS), "lparam", $pCAPTUREPARMS)
If @error Then
Return SetError(1,0,0)
Else
;~ For $i = 0 To 23
;~ ConsoleWrite($aParamStruc[$i] & @TAB & DllStructGetData($tCAPTUREPARMS, $aParamStruc[$i]) & @CRLF)
;~ Next
Return 1
EndIf
EndFunc -
Lösche einfach mit der Funktion das Kameraobjekt.
Das tue ich doch:
[autoit]_WebcamClose($idCam)
[/autoit]Wenn du dann unbedingt den schwazren kasten haben willst, zeichne ich als Grafik.
Wozu Grafik, wenn ich Hintergrund schwarz haben will? Ein schwarzes Rectangle als Grafik zu zeichnen macht doch wohl wenig Sinn (die enthaltenen Pictures sind Controls mit entsprechendem Verhalten beim Klick - Grafik macht also null Sinn).
Ein kleiner Verbesserungvorschlag: Du kannt über die TreiberID zwischen den angeschlossenen Kameras wechseln. Das würde ich noch einbauen.
===>
Es ist noch nicht alles fertig
Edit
Hab den Fehler entdeckt: Die UDF ist etwas zu "undetailliert" erstellt, sodass Einzelfunktionen nicht wirksam werden konnten. Habe die Funktionen entsprechend umgebaut und somit auch die Funktionsvielfalt erweitert.
Ich werde das noch etwas vervollständigen und dann als Skript-Bsp. posten. -
Hi,
ich habe hier eine kleine Oberfläche für meine Webcam erstellt. (Es ist noch nicht alles fertig)
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Mein Problem:
Wenn ich die Kamera aktiviere (das funktioniert) anschließend deaktiviere und erneut aktivieren möchte, läßt sie sich nicht mehr einschalten.
Passiert in der Funktion _CameraOnOff() ab Zeile 338.
Einen Teil der Daten habe ich im Spoiler gekürzt - im Anhang ist alles komplett.
Hat jemand eine Idee?Spoiler anzeigen
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-08-23 01:20:46 v 0.2
#EndRegion - TimeStamp; =============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Titel..........: MyWebcam.au3
; Beschreibung...: Webcam live, Aufzeichnung/Wiedergabe Schnappschuß/Video
; Version AutoIt.: 3.3.6.1
; Author.........: BugFix
; ...............: Webcam Funktionen von Ludocus und pierrotm777
; =============================================================================#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GUIConstants.au3>Opt('GuiOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
Opt('MustDeclareVars', 1)Global Const $WM_CAP_START = 0x400
[/autoit] [autoit][/autoit] [autoit]
Global Const $WM_CAP_UNICODE_START = $WM_CAP_START +100
Global Const $WM_CAP_PAL_SAVEA = $WM_CAP_START + 81
Global Const $WM_CAP_PAL_SAVEW = $WM_CAP_UNICODE_START + 81
Global Const $WM_CAP_UNICODE_END = $WM_CAP_PAL_SAVEW
Global Const $WM_CAP_ABORT = $WM_CAP_START + 69
Global Const $WM_CAP_DLG_VIDEOCOMPRESSION = $WM_CAP_START + 46
Global Const $WM_CAP_DLG_VIDEODISPLAY = $WM_CAP_START + 43
Global Const $WM_CAP_DLG_VIDEOFORMAT = $WM_CAP_START + 41
Global Const $WM_CAP_DLG_VIDEOSOURCE = $WM_CAP_START + 42
Global Const $WM_CAP_DRIVER_CONNECT = $WM_CAP_START + 10
Global Const $WM_CAP_DRIVER_DISCONNECT = $WM_CAP_START + 11
Global Const $WM_CAP_DRIVER_GET_CAPS = $WM_CAP_START + 14
Global Const $WM_CAP_DRIVER_GET_NAMEA = $WM_CAP_START + 12
Global Const $WM_CAP_DRIVER_GET_NAMEW = $WM_CAP_UNICODE_START + 12
Global Const $WM_CAP_DRIVER_GET_VERSIONA = $WM_CAP_START + 13
Global Const $WM_CAP_DRIVER_GET_VERSIONW = $WM_CAP_UNICODE_START + 13
Global Const $WM_CAP_EDIT_COPY = $WM_CAP_START + 30
Global Const $WM_CAP_END = $WM_CAP_UNICODE_END
Global Const $WM_CAP_FILE_ALLOCATE = $WM_CAP_START + 22
Global Const $WM_CAP_FILE_GET_CAPTURE_FILEA = $WM_CAP_START + 21
Global Const $WM_CAP_FILE_GET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 21
Global Const $WM_CAP_FILE_SAVEASA = $WM_CAP_START + 23
Global Const $WM_CAP_FILE_SAVEASW = $WM_CAP_UNICODE_START + 23
Global Const $WM_CAP_FILE_SAVEDIBA = $WM_CAP_START + 25
Global Const $WM_CAP_FILE_SAVEDIBW = $WM_CAP_UNICODE_START + 25
Global Const $WM_CAP_FILE_SET_CAPTURE_FILEA = $WM_CAP_START + 20
Global Const $WM_CAP_FILE_SET_CAPTURE_FILEW = $WM_CAP_UNICODE_START + 20
Global Const $WM_CAP_FILE_SET_INFOCHUNK = $WM_CAP_START + 24
Global Const $WM_CAP_GET_AUDIOFORMAT = $WM_CAP_START + 36
Global Const $WM_CAP_GET_CAPSTREAMPTR = $WM_CAP_START + 1
Global Const $WM_CAP_GET_MCI_DEVICEA = $WM_CAP_START + 67
Global Const $WM_CAP_GET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 67
Global Const $WM_CAP_GET_SEQUENCE_SETUP = $WM_CAP_START + 65
Global Const $WM_CAP_GET_STATUS = $WM_CAP_START + 54
Global Const $WM_CAP_GET_USER_DATA = $WM_CAP_START + 8
Global Const $WM_CAP_GET_VIDEOFORMAT = $WM_CAP_START + 44
Global Const $WM_CAP_GRAB_FRAME = $WM_CAP_START + 60
Global Const $WM_CAP_GRAB_FRAME_NOSTOP = $WM_CAP_START + 61
Global Const $WM_CAP_PAL_AUTOCREATE = $WM_CAP_START + 83
Global Const $WM_CAP_PAL_MANUALCREATE = $WM_CAP_START + 84
Global Const $WM_CAP_PAL_OPENA = $WM_CAP_START + 80
Global Const $WM_CAP_PAL_OPENW = $WM_CAP_UNICODE_START + 80
Global Const $WM_CAP_PAL_PASTE = $WM_CAP_START + 82
Global Const $WM_CAP_SEQUENCE = $WM_CAP_START + 62
Global Const $WM_CAP_SEQUENCE_NOFILE = $WM_CAP_START + 63
Global Const $WM_CAP_SET_AUDIOFORMAT = $WM_CAP_START + 35
Global Const $WM_CAP_SET_CALLBACK_CAPCONTROL = $WM_CAP_START + 85
Global Const $WM_CAP_SET_CALLBACK_ERRORA = $WM_CAP_START + 2
Global Const $WM_CAP_SET_CALLBACK_ERRORW = $WM_CAP_UNICODE_START + 2
Global Const $WM_CAP_SET_CALLBACK_FRAME = $WM_CAP_START + 5
Global Const $WM_CAP_SET_CALLBACK_STATUSA = $WM_CAP_START + 3
Global Const $WM_CAP_SET_CALLBACK_STATUSW = $WM_CAP_UNICODE_START + 3
Global Const $WM_CAP_SET_CALLBACK_VIDEOSTREAM = $WM_CAP_START + 6
Global Const $WM_CAP_SET_CALLBACK_WAVESTREAM = $WM_CAP_START + 7
Global Const $WM_CAP_SET_CALLBACK_YIELD = $WM_CAP_START + 4
Global Const $WM_CAP_SET_MCI_DEVICEA = $WM_CAP_START + 66
Global Const $WM_CAP_SET_MCI_DEVICEW = $WM_CAP_UNICODE_START + 66
Global Const $WM_CAP_SET_OVERLAY = $WM_CAP_START + 51
Global Const $WM_CAP_SET_PREVIEW = $WM_CAP_START + 50
Global Const $WM_CAP_SET_PREVIEWRATE = $WM_CAP_START + 52
Global Const $WM_CAP_SET_SCALE = $WM_CAP_START + 53
Global Const $WM_CAP_SET_SCROLL = $WM_CAP_START + 55
Global Const $WM_CAP_SET_SEQUENCE_SETUP = $WM_CAP_START + 64
Global Const $WM_CAP_SET_USER_DATA = $WM_CAP_START + 9
Global Const $WM_CAP_SET_VIDEOFORMAT = $WM_CAP_START + 45
Global Const $WM_CAP_SINGLE_FRAME = $WM_CAP_START + 72
Global Const $WM_CAP_SINGLE_FRAME_CLOSE = $WM_CAP_START + 71
Global Const $WM_CAP_SINGLE_FRAME_OPEN = $WM_CAP_START + 70
Global Const $WM_CAP_STOP = $WM_CAP_START + 68Global $avicap = DllOpen("avicap32.dll")
[/autoit] [autoit][/autoit] [autoit]
Global $user = DllOpen("user32.dll")#region - Iconsource
[/autoit] [autoit][/autoit] [autoit]
; registriert die Funktion "_DelBinaryTempFiles()", damit die temporär erstellten Dateien bei Beendigung wieder gelöscht werden
OnAutoItExitRegister("_DelBinaryTempFiles")Local $bData[13] = [12]
[/autoit] [autoit][/autoit] [autoit]; String mit den Binärdaten von: camera-web.ico
[/autoit] [autoit][/autoit] [autoit]
$bData[1] &= "0x0000010001003030000000000000A82500001600000028000000300000006000000001002000000000000024000000000000000000000000000000000...."
$bData[1] &= "000000000000000000000000000001000000050000000D000000170000001F1413103A33312CB9424240FF4E5150FF555857FF5A5D5CFF5E615FFF5F63...."
$bData[1] &= "4E48FF4D4945FF3F3E3CFF40403EFF7C7C7BFFCBCBCBFFD4D4D4FFC8C8C8FFB9B9B9FFB8B8B8FFC3C3C3FFC6C6C6FFD1D1D1FFCFD0CFFF7A7C7AE...."
$bData[1] &= "000000000000000000000000000000000000000000000000000000000000000000000000000000515553065D605E7D9FA1A0F8E0E0E0FFDCDCDCFFE0E...."
$bData[1] &= "9694D6B4B7B6F8D7D6D5FFDDCBBDFFCBA78BFFC49A7AFFC39776FFC39675FFC39675FFC39776FFC49A7AFFCCA88BFFDECCBFFFD7D7D5FFB3B6B...."
; String mit den Binärdaten von: camera_photo1.gif
$bData[2] &= "0x47494638396130003000F700000000001E4F65364E59384F5A38505B3B535D20516624546929596E2C5C72335D6F3F566031607636657A3B6172386...."
$bData[2] &= "00270C6287513C4354CEC0850B6EA00639F802136C48820B14718B5D1401978B78C43527400146AC22164BDC64307D63102CEC424BD928C50B92A0...."
; String mit den Binärdaten von: camera_photo2.gif
$bData[3] &= "0x47494638396130003000F700000000001E4F65364E59384F5A38505B3B535D20516624546929596E2C5C72335D6F3F566031607636657A3B6172386...."
$bData[3] &= "00270C6287513C6354CEC0850B6EA00639F802136C48820B14718B5D1401978B78C43527400146AC22164BDC64307F63102CEC624BD928C50B92A00...."
; String mit den Binärdaten von: camera_video_rec0.gif
$bData[4] &= "0x47494638396130003000F700000000000303030500050606060909090D0D0C001800091E09120E121212121612161515151919191D1D1D0E210E0033...."
$bData[4] &= "86A2AC510C71046316D5880624370549666C5023DFD0C73CE4710F10CE631DD558C73CACE18D6F24431CF880C62EB6F14A6449E395C268454C6CE10...."
; String mit den Binärdaten von: camera_video_rec1.gif
$bData[5] &= "0x47494638396130003000F700000000000500050606060B0B0B001800091E09120E121212121612161515151919191D1D1D0E210E003500043E041829...."
$bData[5] &= "862EB0418D44A2610C5680E525C5801170E8631EF2B8C705E7B10E6CAC631ED9F8063824870FA6742395D438431494794929608417FEC80635A271CD...."
; String mit den Binärdaten von: camera_video_rec2.gif
$bData[6] &= "0x47494638396130003000F700000000000500050606060B0B0B001800091E09120E121212121612161515151919191D1D1D0E210E003500043E041829...."
$bData[6] &= "C6297B51862DB4B29550400246C0A18F79C8E31E129CC73AB0B18E7964E31BE0701C3E98D20D527E63176260E531A1C08420400417FEC80635A251C...."
; String mit den Binärdaten von: config_tool.gif
$bData[7] &= "0x47494638396130003000F70000000000153E0C1F5B0A3B5F382668072A700E357C1833672E3975383D7C31437D1C4A7C2449484950524F515351595...."
; String mit den Binärdaten von: config_tool1.gif
$bData[8] &= "0x47494638396130003000F70000000000153E0C1F5B0A3B5F382668072A700E357C1833672E3975383D7C31437D1C4A7C2449484950524F515351595...."
; String mit den Binärdaten von: folder_records.gif
$bData[9] &= "0x47494638396130003000F7000000000062440E6365397F7624616F427A7C6B3E7ECA417CC118BA7824C6793DDB7F7EAD6F52D07E5E89AC5CB78571...."
; String mit den Binärdaten von: folder_records1.gif
$bData[10] &= "0x47494638396130003000F7000000000062440E6365397F7624616F427A7C6B3E7ECA417CC118BA7824C6793DDB7F7EAD6F52D07E5E89AC5CB7857...."
; String mit den Binärdaten von: media_start.ico
$bData[11] &= "0x0000010001003030000001002000A8250000160000002800000030000000600000000100200000000000004800000000000000000000000000000000...."
$bData[11] &= "B43C7F6AB43C7F7CAA3DB6739C23D771B13DB6ADCCB3DB548DEEFD246DF2FF246DF1FF236DF1FF236CF2FF236CF1FF236BF1FF236BF1FF236BF1F...."
$bData[11] &= "FDFFFFBCD4F8FE5C97F3FE468AF4FF347EF3FF2776F3FF2474F2FF2573F2FF2473F2FF2673F2FFA4ABA7F260613EE1A29234CCC2A65BE2A56102FF9...."
$bData[11] &= "854AA1C8A85D91C19149F3A56000BE8F8B34FF768522DB6FB03B856AB43C7F848C5DBF328BEAFF298CF7FF298CF7FF298CF7FF298BF6FF298BF6FF...."
$bData[11] &= "A7D4FF6EABE7FF68ADF0FF68ADF0FF6EADEBFF7FADDFFF97ADC9FDAEAAACF7B8A490EEBDA883E6CFB481E2D5B782E1D5B782E1D5B782E1D5B782...."
; String mit den Binärdaten von: media_select.ico
$bData[12] &= "0x0000010001003030000001002000A8250000160000002800000030000000600000000100200000000000004800000000000000000000000000000000...."
$bData[12] &= "DDF4FF7ADFF7FF78DEF7FF76DDF7FF74DCF6FF73DCF6FF72DCF6FF9FD2E6FF88A1B0FF7A909DFF51636CFF6E7A81FF7FA2AFFF63AEC2FF5EAEC4FF...."
$bData[12] &= "E4EAFFBAE5EBFFB9E4EBFFC5E6ECFFCDEAECFFCCE9ECFFCCE8EBFFD6E6E8D8F2ECE7A3F1EBE5AAF4EDE3AFE5DBD0D8BBB9B8FE929293F46561614..."
$bData[12] &= "0000000000000000000000000000000000000000000000B3E0F1FFB0F3FFFFB0F1FEFFB0F6FFFFB2F7FFFFB2F7FFFFB2F7FFFFB2F7FFFFB3F7FFFFD7F...."
$bData[12] &= "E4F4FF99E5F5FF9FE8F6FFA9EBF7FFB2EDF8FFB9EFF9FFC5F2FBFFCCF3FCFFCCF4FBFFCBF3FBFFC5F3FBFFC1F2FBFFBDF1FBFF9EEFFCFF000000000...."; erstellt im TEMPDIR die Datei/-en aus allen vorhandenen $bData Variablen
[/autoit] [autoit][/autoit] [autoit]
Dim $bDatanames[12] = ["camera-web.ico","camera_photo1.gif","camera_photo2.gif","camera_video_rec0.gif","camera_video_rec1.gif","camera_video_rec2.gif","config_tool.gif","config_tool1.gif","folder_records.gif","folder_records1.gif","media_start.ico","media_select.ico"]
For $i = 1 To $bData[0]
Local $sFile = @ScriptDir & "\" & $bDatanames[$i -1]
Local $hFileOut = FileOpen($sFile, 2+8+16)
FileWrite($hFileOut, Binary($bData[$i]))
FileClose($hFileOut)
NextFunc _DelBinaryTempFiles()
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $bData[0] - 1
FileDelete(@ScriptDir & "\" & $bDatanames[$i - 1])
Next
EndFunc
#endregion - IconsourceGlobal $pic_Photo1 = @ScriptDir & '\' & $bDatanames[1]
[/autoit] [autoit][/autoit] [autoit]
Global $pic_Photo2 = @ScriptDir & '\' & $bDatanames[2]
Global $pic_Video0 = @ScriptDir & '\' & $bDatanames[3]
Global $pic_Video1 = @ScriptDir & '\' & $bDatanames[4]
Global $pic_Video2 = @ScriptDir & '\' & $bDatanames[5]
Global $pic_Config = @ScriptDir & '\' & $bDatanames[6]
Global $pic_Config1 = @ScriptDir & '\' & $bDatanames[7]
Global $pic_Records = @ScriptDir & '\' & $bDatanames[8]
Global $pic_Records1 = @ScriptDir & '\' & $bDatanames[9]
Global $icon_MediaRun = @ScriptDir & '\' & $bDatanames[10]
Global $icon_MediaSel = @ScriptDir & '\' & $bDatanames[11]
Global $aSavePath[2] = [@HomeDrive & @HomePath,@HomeDrive & @HomePath]
Global $hWnd_Camera, $hWnd_Config, $hWnd_Records, $fRecord_active = False
Global $MyWebcamApp_INI = @ScriptDir & '\MyWebcamApp.INI'
If FileExists($MyWebcamApp_INI) Then
$aSavePath[0] = IniRead($MyWebcamApp_INI, 'pathes', 'snap', @HomeDrive & @HomePath)
$aSavePath[1] = IniRead($MyWebcamApp_INI, 'pathes', 'video', @HomeDrive & @HomePath)
EndIfGlobal $idCam, $isCamera = 0, $picPhoto, $picVideo, $picRecord, $picConfig, $rVideo, $inPath, $inPathSnap, $inPathVideo, $btCamera
[/autoit] [autoit][/autoit] [autoit]#region - Webcam Fenster
[/autoit] [autoit][/autoit] [autoit]
$hWnd_Camera = GUICreate('Webcam', 340, 348, -1, -1)
GUISetIcon(@ScriptDir & '\' & $bDatanames[0])
GUISetBkColor(0x000000)
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit', $hWnd_Camera)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_MDown', $hWnd_Camera)
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_MUp', $hWnd_Camera)
GUICtrlCreateGroup('', 8, 2, 324, 250)
GUICtrlCreateGroup('', -99, -99, 1, 1)
;~ $idCam = _WebcamOpen($hWnd_Camera, 10, 10, 320, 240)
$picPhoto = GUICtrlCreatePic($pic_Photo1, 10, 260, 48, 48)
$picVideo = GUICtrlCreatePic($pic_Video0, 99, 260, 48, 48)
$picRecord = GUICtrlCreatePic($pic_Records, 188, 260, 48, 48)
$picConfig = GUICtrlCreatePic($pic_Config, 278, 260, 48, 48)
$btCamera = GUICtrlCreateButton('Kamera EIN', 110, 315, 120, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetOnEvent(-1, '_CameraOnOff')
GUICtrlSetColor(-1, 0x008000)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetFont(-1, 10, 600)
#endregion#region - Records Fenster
[/autoit] [autoit][/autoit] [autoit]
$hWnd_Records = GUICreate("Aufzeichnungen", 340, 250, 285, 129)
GUISetOnEvent($GUI_EVENT_CLOSE, '_HideRecords', $hWnd_Records)
GUICtrlCreateGroup(" Datentyp ", 16, 16, 305, 121)
GUICtrlCreateRadio("Schnappschuß", 40, 48, 113, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$rVideo = GUICtrlCreateRadio("Video", 40, 88, 113, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$inPath = GUICtrlCreateInput("", 16, 150, 305, 21)
GUICtrlCreateButton("", 40, 185, 48, 48, $BS_ICON)
GUICtrlSetOnEvent(-1, '_SelectFile')
GUICtrlSetImage(-1, $icon_MediaSel)
GUICtrlCreateButton("", 252, 185, 48, 48, $BS_ICON)
GUICtrlSetOnEvent(-1, '_PlayFile')
GUICtrlSetImage(-1, $icon_MediaRun)
#endregion#region - Config Fenster
[/autoit] [autoit][/autoit] [autoit]
$hWnd_Config = GUICreate("Standardpfade", 340, 200, 285, 129)
GUISetOnEvent($GUI_EVENT_CLOSE, '_HideConfig', $hWnd_Config)
GUICtrlCreateLabel('Schnappschuß', 10, 30)
GUICtrlCreateButton('', 313, 30, 17, 17)
GUICtrlSetOnEvent(-1, '_SelectFolderSnap')
$inPathSnap = GUICtrlCreateInput($aSavePath[0], 10, 60, 320, 21)
GUICtrlCreateLabel('Video', 10, 110)
GUICtrlCreateButton('', 313, 110, 17, 17)
GUICtrlSetOnEvent(-1, '_SelectFolderVideo')
$inPathVideo = GUICtrlCreateInput($aSavePath[1], 10, 140, 320, 21)
#endregionWinSetOnTop($hWnd_Camera, '', 1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hWnd_Camera)While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
If $fRecord_active Then ; Aufzeichnung läuft noch
_WebcamRecordStop($idCam)
_CameraOnOff()
EndIf
Exit
EndFuncFunc _MDown()
[/autoit] [autoit][/autoit] [autoit]
Local $cursor = GUIGetCursorInfo($hWnd_Camera)
Switch $cursor[4]
Case $picPhoto
GUICtrlSetImage($picPhoto, $pic_Photo2)
Case $picVideo
If Not $fRecord_active Then
$fRecord_active = True
Else
_WebcamRecordStop($idCam)
AdlibUnRegister('_ToggleRecordPict')
AdlibUnRegister('_SetTitle')
$fRecord_active = False
GUICtrlSetImage($picVideo, $pic_Video0)
EndIf
Case $picConfig
GUICtrlSetImage($picConfig, $pic_Config1)
Case $picRecord
GUICtrlSetImage($picRecord, $pic_Records1)
EndSwitch
EndFuncFunc _MUp()
[/autoit] [autoit][/autoit] [autoit]
Local $cursor = GUIGetCursorInfo($hWnd_Camera), $sFile, $sSave, $mb
Switch $cursor[4]
Case $picPhoto
GUICtrlSetImage($picPhoto, $pic_Photo1)
Local $sFile = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & '.bmp'
If _WebcamSnap($idCam, $aSavePath[0] & '\' & $sFile) = 1 Then
WinSetOnTop($hWnd_Camera, '', 0)
While True
Do
$sSave = InputBox('Schnappschuß speichern', 'Bitte Dateinamen eingeben')
If $sSave = '' Then $mb = MsgBox(262180, 'Kein Dateiname vergeben', 'Eingabe Wiederholen?')
Until $sSave <> '' Or $mb = 7
If $sSave = '' Or $mb = 7 Then
WinSetOnTop($hWnd_Camera, '', 1)
FileDelete($aSavePath[0] & '\' & $sFile)
Return
EndIf
If StringRight($sSave, 4) <> '.bmp' Then $sSave &= '.bmp'
If FileExists($aSavePath[0] & '\' & $sSave) Then
MsgBox(262192, 'Fehler', $sSave & ' existiert bereits!', 3)
Else
ExitLoop
EndIf
WEnd
FileMove($aSavePath[0] & '\' & $sFile, $aSavePath[0] & '\' & $sSave)
EndIf
WinSetOnTop($hWnd_Camera, '', 1)
Case $picConfig
GUICtrlSetImage($picConfig, $pic_Config)
WinSetOnTop($hWnd_Camera, '', 0)
WinSetOnTop($hWnd_Config, '', 1)
GUISetState(@SW_SHOW, $hWnd_Config)
Case $picVideo
If Not $fRecord_active Then
WinSetTitle($hWnd_Camera, '', 'Webcam')
Else
WinSetOnTop($hWnd_Camera, '', 0)
; == Video-Aufzeichnung funzt noch nicht ==
;~ While True
;~ Do
;~ $sSave = InputBox('Video speichern', 'Bitte Dateinamen eingeben')
;~ If $sSave = '' Then $mb = MsgBox(262180, 'Kein Dateiname vergeben', 'Eingabe Wiederholen?')
;~ Until $sSave <> '' Or $mb = 7
;~ If $sSave = '' Or $mb = 7 Then
;~ Return WinSetOnTop($hWnd_Camera, '', 1)
;~ EndIf
;~ If StringRight($sSave, 4) <> '.avi' Then $sSave &= '.avi'
;~ If FileExists($aSavePath[1] & '\' & $sSave) Then
;~ MsgBox(262192, 'Fehler', $sSave & ' existiert bereits!', 3)
;~ Else
;~ ExitLoop
;~ EndIf
;~ WEnd
;~ WinSetOnTop($hWnd_Camera, '', 1)
GUICtrlSetImage($picVideo, $pic_Video1)
AdlibRegister('_ToggleRecordPict', 500)
AdlibRegister('_SetTitle', 1000)
WinSetTitle($hWnd_Camera, '', 'Webcam [ Record-Time 00:00:00 ]')
;~ _WebcamRecordStart($sSave, $idCam)
EndIf
Case $picRecord
GUICtrlSetImage($picRecord, $pic_Records)
WinSetOnTop($hWnd_Camera, '', 0)
WinSetOnTop($hWnd_Records, '', 1)
GUISetState(@SW_SHOW, $hWnd_Records)
EndSwitch
EndFuncFunc _CameraOnOff()
[/autoit] [autoit][/autoit] [autoit]
If $isCamera = 0 Then
GUICtrlSetData($btCamera, 'Kamera AUS')
GUICtrlSetColor($btCamera, 0xFF0000)
$idCam = _WebcamOpen($hWnd_Camera, 10, 10, 320, 240)
Else
GUICtrlSetData($btCamera, 'Kamera EIN')
GUICtrlSetColor($btCamera, 0x008000)
_WebcamClose($idCam)
EndIf
$isCamera = BitXOR($isCamera, 1)
EndFuncFunc _ToggleRecordPict()
[/autoit] [autoit][/autoit] [autoit]
Local Static $iToggle = 0
If $fRecord_active Then
If $iToggle = 0 Then
GUICtrlSetImage($picVideo, $pic_Video1)
$iToggle = 1
Else
GUICtrlSetImage($picVideo, $pic_Video2)
$iToggle = 0
EndIf
EndIf
EndFuncFunc _SetTitle()
[/autoit] [autoit][/autoit] [autoit]
Local Static $sec = 0, $hour = 0, $min = 0
$sec += 1
Local $secShow, $minShow, $hourShow
If $sec > 59 Then
$min += 1
$sec = 0
EndIf
If $min > 59 Then
$hour += 1
$min = 0
EndIf
If $hour > 23 Then
$hour = 0
EndIf
WinSetTitle($hWnd_Camera, '', 'Webcam [ Record-Time ' & StringFormat('%02u', $hour) & ':' & StringFormat('%02u', $min) & ':' & StringFormat('%02u', $sec) & ' ]')
EndFuncFunc _HideRecords() ; Aufzeichnungsfenster ausblenden
[/autoit] [autoit][/autoit] [autoit]
WinSetOnTop($hWnd_Records, '', 0)
GUISetState(@SW_HIDE, $hWnd_Records)
WinSetOnTop($hWnd_Camera, '', 1)
EndFuncFunc _SelectFile() ; Auswahl im Fenster Aufzeichnungen
[/autoit] [autoit][/autoit] [autoit]
Local $aParam[2][2] = [['Schnappschuß wählen','Bilder (*.bmp)'], ['Video wählen','Videos (*.avi)']], $index = 0
If BitAND(GUICtrlRead($rVideo), $GUI_CHECKED) Then $index = 1
WinSetOnTop($hWnd_Records, '', 0)
Local $sFile = FileOpenDialog($aParam[$index][0], $aSavePath[$index], $aParam[$index][1], 3)
Local $error = @error
WinSetOnTop($hWnd_Records, '', 1)
If $error Then Return
GUICtrlSetData($inPath, $sFile)
EndFuncFunc _PlayFile() ; Ausgewählte Datei wiedergeben
[/autoit] [autoit][/autoit] [autoit]
Local $sFile = GUICtrlRead($inPath)
If Not FileExists($sFile) Then Return
WinSetOnTop($hWnd_Records, '', 0)
ShellExecuteWait($sFile)
WinSetOnTop($hWnd_Records, '', 1)
GUICtrlSetData($inPath, '')
EndFuncFunc _HideConfig()
[/autoit] [autoit][/autoit] [autoit]
Local $sSnap = GUICtrlRead($inPathSnap)
If Not FileExists($sSnap) Then $sSnap = $aSavePath[0]
Local $sVideo = GUICtrlRead($inPathVideo)
If Not FileExists($sVideo) Then $sVideo = $aSavePath[1]
If $sSnap <> $aSavePath[0] Or $sVideo <> $aSavePath[1] Then
IniWrite($MyWebcamApp_INI, 'pathes', 'snap', $sSnap)
IniWrite($MyWebcamApp_INI, 'pathes', 'video', $sVideo)
EndIf
WinSetOnTop($hWnd_Config, '', 0)
GUISetState(@SW_HIDE, $hWnd_Config)
WinSetOnTop($hWnd_Camera, '', 1)
EndFuncFunc _SelectFolderSnap()
[/autoit] [autoit][/autoit] [autoit]
WinSetOnTop($hWnd_Config, '', 0)
Local $sSnap = FileSelectFolder('Speicher-Ordner für Schnappschüsse wählen', $aSavePath[0], 7)
Local $error = @error
WinSetOnTop($hWnd_Config, '', 1)
If $error Then Return
GUICtrlSetData($inPathSnap, $sSnap)
EndFuncFunc _SelectFolderVideo()
[/autoit] [autoit][/autoit] [autoit]
WinSetOnTop($hWnd_Config, '', 0)
Local $sVideo = FileSelectFolder('Speicher-Ordner für Videos wählen', $aSavePath[1], 7)
Local $error = @error
WinSetOnTop($hWnd_Config, '', 1)
If $error Then Return
GUICtrlSetData($inPathVideo, $sVideo)
EndFunc; ==================== webcam - UDF von Ludocus ==========================================================================================
[/autoit] [autoit][/autoit] [autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; 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,$WebCamId=0)
Local $cap = DllCall($avicap, "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", $WebCamId , "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;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; 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_SET_CALLBACK_FRAME, "int", 0, "int", 0)
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;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; 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_SET_PREVIEW, "int", 0, "int", 0);ferme le preview
DllCall($user, "int", "SendMessage", "hWnd", $sId, "int", $WM_CAP_SET_CALLBACK_FRAME, "int", 0, "int", 0);ajout
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($avicap);ajout
DllClose($user)
if @error Then
return 0
Else
return 1
EndIf
EndFunc;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; 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
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit];===============================================================================
[/autoit]
;
; 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 -
Nur eins verstehe ich nicht: Warum sind hinter vielen Farbnamen 1-3 Rechtecke zu finden?
Kann ich nicht bestätigen, vielleicht solltest du die Einstellungen deines Browsers überprüfen. -
gibt es eine Möglichkeit das flackern des ListViews zu verhindern
In diesem Falle würde ich sagen:Nein.
Denn da du ununterbrochen im Abstand von 10ms den Befehl zum Eintragen neu aufrufst ändert sich die Ansicht deines Listview in der Zeitspanne 10ms+Zeitaufwand_aus_der_Funktion (zw. 3 u. 30 ms), sodass du im schlechtesten Fall eine Frequenz von etwa 25Hz erreichst - deutliches Flackern.
Grml - es gibt ja bei Listview den Ex-Style: $LVS_EX_DOUBLEBUFFER - der tuts.
-
funkey hat ja schon den richtigen Verweis gegeben. Um die fixen Parameter auch zu erfassen, gehören diese natürlich mit in die interne Parameter-Table:
Codefunction Test(arg1, arg2, ...) local param = {arg1,arg2,...} for index, wert in pairs(param) do print(tostring(index).."="..tostring(wert)..", ") end end Test(1,"hallo",5,4,"just a string")P.S. Du kannst natürlich immer deine Fragen zu LUA hier stellen. Spätestens wenn ich sie lese, werde ich mich auch um eine Antwort bemühen, wenn meine LUA-Kenntnisse das zulassen.

-
Wenn ich Ctrl + V drücke, kommt sowas dabei raus:
Wie hast du es geschafft, dass das Skript nicht abbricht, obwohl du keine Datei übergeben hast?Edit: Fehler gefunden - Bei FileSelectFolder mit nur einer Datei wurde der Pfad falsch gebildet.

-
Neu v1.1 s. Startpost
Einbau einer Modifikation von Schnuffel, mehrere Dateien übergeben, Mehrfachauswahl mit FileOpenDialog möglich. -
Hast Du was dagegen, wenn ich mit Deinem Quellskript etwas bastelle.
Kannst du natürlich verwenden (kleiner Verweis auf den Author wird dankend angenommen).