Sieh dir mal entweder den GuiOnEventMode oder den Message Loop Modus in der Hilfe an!
Außerdem wirst du entweder
Run
[/autoit]oder
[autoit]ShellExecute
[/autoit]brauchen, wobe ich letzeres bevorzuge.
Sieh dir mal entweder den GuiOnEventMode oder den Message Loop Modus in der Hilfe an!
Außerdem wirst du entweder
Run
[/autoit]oder
[autoit]ShellExecute
[/autoit]brauchen, wobe ich letzeres bevorzuge.
Hallo liebe AutoitCom,
leider muss ich euch heute schon wieder um Rat fragen.
Vorweg, damit der Thread nicht gesperrt wird: Ich kenne die Forenregeln. Ich möchte keinen Bot oder sonstige illegale Dinge schreiben.
So, nun zum Thema:
Ich mlchte mir auf eine Gui das Bild einer Webcam projezieren lassen (mithilfe der WebCam.au3).
Das klappt auch soweit ganz gut. Nun suche ich dieses Bild nach einem weißen Punkt hab (habe aus Verzweiflung PixelSearch verwendet). Leider ist dieser Befehle verdammt langsam und total von äußeren Einflüssen abhängig.
Deshalb suche ich eine Alternative, um das sich ändernde Bild auf einen weißen Bereich abzutasten.
Ich vermute, dass das Erzeugen eines Snapshots und das Abtasten von diesem durch GDI+ - Funktionen keinerlei Zeitersparnis einbringt.
Mein nächster Gedanke wäre, eine Dll zu schreiben, inder in vielen Threads eine kleinere Menge von Pixeln angetastet werden (z.B: 500 Pixel/Thread). Leider habe ich davon keine Ahnung.
Würde gerne mal wissen, ob ihr mir eine Lösung für dieses Problem vorschlagen könnt.
Viele Grüße, Dank und Entschuldigungen für das erneute Fragen im Vorraus,
stayawayknight
Bisheriges Script:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Webcam.au3>
;###Intialize Start
Global $sMainTitle = "Test"
Global $iMainLeft = 0
Global $iMainTop = 0
Global $iMainWidth = @DesktopWidth
Global $iMainHeight = @DesktopHeight
Global $iCamLeft = 0
Global $iCamTop = 0
Global $iCamWidth = 640
Global $iCamHeight = 480
Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]OnAutoItExitRegister("ende")
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}", "ende")
;###Intialize Ende
;###Guis Start
$hMain = GUICreate($sMainTitle, $iMainWidth, $iMainHeight, $iMainLeft, $iMainTop, $WS_POPUP)
GUISetOnEvent($GUI_EVENT_CLOSE, "ende", $hMain)
GUISetBkColor(0xFFFFFF, $hMain)
GUISetState(@SW_SHOW, $hMain)
;----------------------------
$hCam = GUICreate($sMainTitle, $iCamWidth, $iCamHeight, $iCamLeft, $iCamTop, $WS_POPUP, Default, $hMain)
GUISetBkColor(0xFFFFFF, $hCam)
$cCam = _WebcamOpen($hCam, 0, 0, 640, 480)
$cCam = _WebcamOpen($hCam, 0, 0, 640, 480)
GUISetState(@SW_SHOW, $hCam)
;----------------------------
;###Guis Ende
;###GDI+ Start
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hMain)
$hCamGraphics = _GDIPlus_GraphicsCreateFromHWND($hCam)
$cPointerPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
;###GDI+ Ende
While 1
$aPixPos = PixelSearch(5, 5, 640, 480, 0xFFFFFF, 1, 2, $hCam)
If IsArray($aPixPos) Then
_GDIPlus_GraphicsDrawRect($hCamGraphics, $aPixPos[0] - 20, $aPixPos[1] - 20, 40, 40, $cPointerPen)
_CalcToMouse($aPixPos[0], $aPixPos[1])
Else
_GDIPlus_GraphicsDrawStringColor($hCamGraphics, "KEIN POINTER!", 50, $iCamHeight / 2, "Arial", 50, 0xFFFF0000)
EndIf
Sleep(10)
WEnd
Func _CalcToMouse($iX, $iY)
Local $iBetween
$iY = $iY / $iCamWidth
$iY = @DesktopWidth * $iY
$iX = $iX / $iCamWidth
$iX = @DesktopWidth * $iX
If $iX > @DesktopWidth / 2 Then
$iBetween = $iX - (@DesktopWidth / 2)
$iX = (@DesktopWidth / 2) - $iBetween
ElseIf $iX < @DesktopWidth / 2 Then
$iBetween = (@DesktopWidth / 2) - $iX
$iX = (@DesktopWidth / 2) + $iBetween
ElseIf $iX = @DesktopWidth / 2 Then
$iX = @DesktopWidth / 2
EndIf
MouseMove($iX, $iY)
EndFunc ;==>_CalcToMouse
Func _GDIPlus_GraphicsDrawStringColor($hGraphics, $sString, $nX, $nY, $sFont = "Arial", $nSize = 10, $ARGB = 0xFFFFFFFF, $iFormat = 0)
Local $hBrush = _GDIPlus_BrushCreateSolid($ARGB)
Local $hFormat = _GDIPlus_StringFormatCreate($iFormat)
Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
Local $hFont = _GDIPlus_FontCreate($hFamily, $nSize)
Local $tLayout = _GDIPlus_RectFCreate($nX, $nY, 0, 0)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
Local $aResult = _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $aInfo[0], $hFormat, $hBrush)
Local $iError = @error
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
Return SetError($iError, 0, $aResult)
EndFunc ;==>_GDIPlus_GraphicsDrawStringColor
Func ende()
_GDIPlus_PenDispose($cPointerPen)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_GraphicsDispose($hCamGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>ende
PS: Sorry, dass die Überschrift botverdächtig klingt - mir fällt jedoch keine Aussagekräftigere ein.
Sieh dir die Funktionsweise von Arrays an, dazu ist z.B. Bugfix Tutorial sehr nützlich! Du findest es in seiner Sigantur.
BIn ich auch dafür, wäre echt hilfreich!
Gutes Script, sehe wieder nichts zu bemängeln, außer evtl. den Sinn... ![]()
Sehr gut gelungen, einwandfrei! Kann keinen Fehler / Bug entdecken, wirklich umwerfend!
Lies den Quelltext aus und durchsuche diesen mit den Stringbefehlen.
Aulesen kannst du den Quelltext entweder mit
InetRead
[/autoit]oder
[autoit]_InetGetSource
[/autoit].
-> weniger zu zahlende Rente.
Pinguin: Alkohol verbieten? Hätt ich nix dagegen ![]()
Kann Mattthias nur zustimmen - Drogen sollten verboten werden und nicht legalisiert - das ist doch Quatsch!
In bestimmten Ländern wirst du nur beim Besitz von Drogen hingerichtet - ist zwar etwas übertrieben, finde ich, aber Drogen legalisieren zu wollen???
Hi,
habe leider auch nur eine Möglichkeit das Script zu testen, deshalb würde ich gerne weitere Antworten mit Testergebnissen abwarten.
Besitze leider auch (noch) keinen Account im englischen Forum, um dies zu posten, sollte sich die Lösung bewähren.
Mhm...
Wie müssten die Funktionen denn dann deiner Meinung nach lauten? Verstehe leider nicht ganz, was du beim zweiten Beispiel meinst,
aber danke für die Unterstützung!
Hallo,
tut mir Leid das ich in diesem etwas älteren Thread noch poste, nur ich hatte das oben beschriebene Problem mit der Webcam unter Win7.
Folgendes Script funktioniert bei mir einwandfrei, auch nach mehreren Starts - der einzige Nachteil ist, dass die Meldung bezüglich der Videoquelle auftaucht.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: autoBert http://www.autoit.de/index.php?page…2937#post182937
based on http://www.autoitscript.com/forum/index.ph…ndpost&p=572154
Script Function:
Demo for Webcam Udf
#ce ----------------------------------------------------------------------------
#include 'webcam.au3'
#include<GDIPlus.au3>
#include <Misc.au3>
#include<array.au3>
$cam_xlength = 640;Breite
$cam_ylength = 480 ;Höhe
$sProgTitel = "SnapShot from WebCam"
$sProgVer = "v 0.8.1.3"
$capDir = @ScriptDir & "\captures"
If Not FileExists($capDir) Then DirCreate($capDir)
HotKeySet("{INSERT}", "SnapShot")
[/autoit] [autoit][/autoit] [autoit]If _Singleton($sProgTitel & $sProgVer, 1) = 0 Then
WinActivate($sProgTitel & $sProgVer)
Exit
EndIf
$gui = GUICreate($sProgTitel & $sProgVer, $cam_xlength, $cam_ylength + 20, 0, 0)
[/autoit] [autoit][/autoit] [autoit]$WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
$label1 = GUICtrlCreateLabel("", 0, $cam_ylength + 5, $cam_xlength, 20)
_GDIPlus_Startup()
$WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
GUISetState(@SW_SHOW)
AdlibRegister("SnapShot", 10000)
Do
Until GUIGetMsg() = -3
AdlibUnRegister("SnapShot")
_WebcamClose($WebcamID)
ConsoleWrite($WebcamID & @CRLF)
_GDIPlus_Shutdown()
Func SnapShot()
$nr = 1
While FileExists($capDir & "\Bild" & $nr & ".jpg")
$nr += 1
WEnd
$oFile = $capDir & "\Bild.bmp"
$nFile = $capDir & "\Bild" & $nr & ".jpg"
If FileExists($oFile) Then FileDelete($oFile)
_WebcamSnap($WebcamID, $oFile)
Local $aDT = FileGetTime($oFile)
$sInfo = $aDT[0] & "/" & $aDT[1] & "/" & $aDT[2] & " " & $aDT[3] & ":" & $aDT[4] & ":" & $aDT[5]
ConsoleWrite($sInfo & @CRLF)
$himg = _GDIPlus_ImageLoadFromFile($oFile)
[/autoit] [autoit][/autoit] [autoit]$hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
$iX = _GDIPlus_ImageGetWidth($himg)
$iy = _GDIPlus_ImageGetHeight($himg)
$hBrush = _GDIPlus_BrushCreateSolid(); $Color)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 20, 2)
$tLayout = _GDIPlus_RectFCreate($iX - 260, $iy - 30)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sInfo, $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphics, $sInfo, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
_GDIPlus_ImageSaveToFile($himg, $nFile)
_GDIPlus_FontDispose($hFont)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_ImageDispose($himg)
GUICtrlSetData($label1, $nr)
FileDelete($oFile)
EndFunc ;==>SnapShot
Vielleicht kannst du das ja brauchen,
stayawayknight
Edit: So, hab eine Lösung gefunden die gut funktioniert, einzigster Nachteil ist, dass die Meldung bezüglich der Kamera weiterhin erscheint - beim Abbrechen o.ä. wird jedoch dann die Kamera ausgeführt.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: autoBert http://www.autoit.de/index.php?page…2937#post182937
based on http://www.autoitscript.com/forum/index.ph…ndpost&p=572154
Script Function:
Demo for Webcam Udf
#ce ----------------------------------------------------------------------------
#include 'webcam.au3'
#include<GDIPlus.au3>
#include <Misc.au3>
#include<array.au3>
$cam_xlength = 640;Breite
$cam_ylength = 480 ;Höhe
$sProgTitel = "SnapShot from WebCam"
$sProgVer = "v 0.8.1.3"
$capDir = @ScriptDir & "\captures"
If Not FileExists($capDir) Then DirCreate($capDir)
HotKeySet("{INSERT}", "SnapShot")
[/autoit] [autoit][/autoit] [autoit]If _Singleton($sProgTitel & $sProgVer, 1) = 0 Then
WinActivate($sProgTitel & $sProgVer)
Exit
EndIf
$gui = GUICreate($sProgTitel & $sProgVer, $cam_xlength, $cam_ylength + 20, 0, 0)
[/autoit] [autoit][/autoit] [autoit]$WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
$label1 = GUICtrlCreateLabel("", 0, $cam_ylength + 5, $cam_xlength, 20)
_GDIPlus_Startup()
$WebcamID = _WebcamOpen($gui, 0, 0, $cam_xlength + 30, $cam_ylength)
GUISetState(@SW_SHOW)
AdlibRegister("SnapShot", 10000)
Do
Until GUIGetMsg() = -3
AdlibUnRegister("SnapShot")
_WebcamClose($WebcamID)
ConsoleWrite($WebcamID & @CRLF)
_GDIPlus_Shutdown()
Func SnapShot()
$nr = 1
While FileExists($capDir & "\Bild" & $nr & ".jpg")
$nr += 1
WEnd
$oFile = $capDir & "\Bild.bmp"
$nFile = $capDir & "\Bild" & $nr & ".jpg"
If FileExists($oFile) Then FileDelete($oFile)
_WebcamSnap($WebcamID, $oFile)
Local $aDT = FileGetTime($oFile)
$sInfo = $aDT[0] & "/" & $aDT[1] & "/" & $aDT[2] & " " & $aDT[3] & ":" & $aDT[4] & ":" & $aDT[5]
ConsoleWrite($sInfo & @CRLF)
$himg = _GDIPlus_ImageLoadFromFile($oFile)
[/autoit] [autoit][/autoit] [autoit]$hGraphics = _GDIPlus_ImageGetGraphicsContext($himg)
$iX = _GDIPlus_ImageGetWidth($himg)
$iy = _GDIPlus_ImageGetHeight($himg)
$hBrush = _GDIPlus_BrushCreateSolid(); $Color)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 20, 2)
$tLayout = _GDIPlus_RectFCreate($iX - 260, $iy - 30)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sInfo, $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphics, $sInfo, $hFont, $aInfo[0], $hFormat, $hBrush)
_GDIPlus_GraphicsDrawImage($hGraphics, $himg, $iX, $iy)
_GDIPlus_ImageSaveToFile($himg, $nFile)
_GDIPlus_FontDispose($hFont)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_ImageDispose($himg)
GUICtrlSetData($label1, $nr)
FileDelete($oFile)
EndFunc ;==>SnapShot
Vielleicht kann ja auch autoBert damit etwas anfangen, werde es mal in dem entsprechenden Thread posten.
Ja, z.B. wie du willst.
Der Musikplayer war einfach ein Beispiel - lernen tust du Autoit am besten, wenn du dir ein Projekt setzt und dieses durchführst und dann verbesserst - Learning by Doing eben.
Sorry, dass ich hier Pushe, aber es ist wirklich dringend und es muss doch eine Lösung geben...
Hallo Com,
ich habe mir einmal dieses Beispielsscript von autoBert angesehen [Beispiel] SnapShot's from WebCam ver.: 0.8.1.3 .
Dabei ist mir aufgefallen, dass die Webcambilder bei mir nur nach jedem Start von Windows 1x angezeigt werden; danach kommt nur noch ein schwarzes Bild.
Habe jetzt bei mehreren Leuten gelesen, dass es Probleme mit dieser Udf-Sammlung auf WIn7 gibt. Weiß jemand wie diese zu lösen sind, bzw. wie das Script unter Win7 immer funktioniert und nicht nach jedem Neustart des Computers?
Für mich sieht es so aus, als ob irgendwelche DInge betrefflich der Webcam nicht heruntergefahren werden und diese dann Komplikationen verursachen, die nach jedem Neustart heruntergefahren werden.
Die in dem verlinkten Thread beschriebene Lösung mit _Singelton funktioniert leider nicht bei mir, habe das Script genauso verwendet wie dort gepostet.
Habe leider keinerlei Lösungsansatz für dieses Problem und hoffe, dass ihr mir helfen könnt.
Im Prinzip ist das das gleiche Problem wie hier beschrieben: [ offen ] Webcam.au3 fehler bei Windows 7 x32/x64
Nur das ich darauf noch keine Lösung habe.
Win7, Cpu:X64 Os:X86
Viele Grüße und Dank im Vorraus,
stayawayknight
Ich würde mir an deiner Stelle ein kleines Ziel setzen, z.B. das Schreiben eines kleinen Musikplayers.
Dann fängst du einfach mal, und suchst dir per Google oder per Hilfe die Befehle, die du brauchst.
Irgendwann kommen dann immer mehr Befehle zu deinem Wortschatz dazu und du beherrscht immer mehr Autoit.
Deine Scripte kannst du dann hier posten, bekommst Feedback und Verbesserungsvorschläge.
So lernst du Autoit im Nu!
Jetzt wieder.
Ein Browsergame lässt sich nicht mit Autoit erstellen, genauso wenig sonstige Homepage/Server bezogene Dinge.
Was du kannst, ist ein Spiel über einen Server laufen lassen, aber das Programm liegt dabei auf dem Rechner von jedem Spieler.
Bevor du dich allerdings da reinstürzt würd ich dir empfehlen, die Grundlagen von Autoit gut zu wiederholen.
Kannst dir ja mal mein "Onlinespiel" in der Signatur ansehen (Fantasy Football). Leider hab ich das nicht mehr weitergeführt und irgendwann keine Aktualisierungen der SPielerpunkte mehr gemacht.
PCKing: Mit Java kann man genausowenig ein Browsergame oder eine Homepage erstellen, wie mit Autoit.
Was du meinst ist sicher JavaScript. JavaScript ungleich Java.