dany , esta trabajando perfecto el script , le hice yo algunos ajustes , y le quite el marco , y le puse los comandos para moverlo a la posicion que yo quiero ...
dany , una pregunta se puede con autoit asociar algun commando o orden de otro programa que autoit lo reconosca ... aver si me explico mejor , tu conoces el sistema de automazacion del hogar x10 , bueno lo que trato de ver es como autoit cuando reciba la orden de los comandos de x10 , el abra automaticamente el script que me hiciste de la camara , y a la ves suene el sonido de un timbre d casa , y luego a los 10 o 15 sec , se cierre automaticamente , la idea es que me compre un boton que manda senal de RF a un interface que va conectado a la corriente , entonces , cuando toco el boton , manda senal de RF al interface , y este manda senal a la computadora por el sistema de cables de la casa , entonces cuando la pc reciba ese comando , es el que yo quiero usar para que autoit lo reconosca , le de la orden al script de la camara pa que se abra y la misma ves me suene una musiquita de un timbre y luego de 10 o 15 se cierra el video de la camara .... pero lo curioso es que este boton solo manda senal de RF para prender , no manda para apagar ...
lo que como no estoy seguro que comando o que orden es la que realmente recibe la computadora cuando llega la senal del boton , me toca ir provando a ver cuando es la que reconoce , yo se que es la misma que cuando yo prendo una lamapara , en el plugin de las luces yo tengo
este es el comando que yo uso cuando prendo una lampara "x10sendplc;on;c2" claro el c2 se cambia segun el que use en el modulo que uso .... tambien por cada lampara yo tengo puesto un indicador , diciendome que se prendio esa lampara no se si ese comando del indicador se podra utilizar para darle la orden que cuando el vea ese indicador prendido , haga su trabajo , el comando del indicador es este x10_ind_c2 , tambien aqui , se cambia el c2 igual que el comando , para que ambos tengan relacion
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
#NoTrayIcon
#region Global Vars
Global Const $sProgramTitle = "IP Camera stream "
;Coloca los datos Respectivos:
GLobal $Usuario="admin"
Global $Password=""
Global Const $iIPAddress = "", $iPort = 80, $shtauth = _Base64Encode($Usuario & ":" & $Password)
Global Const $STM_SETIMAGE = 0x0172
Global $blRecording = False, $blGUIMinimized = False
;Global Const $sRecordDir = @ScriptDir & "\ip_camera_stream"
Global $bRecvtmp = Binary(""), $bStream = $bRecvtmp
Global $iImgLen = 0, $iStreamLen = 0, $iWritten = 0, $iEOH = 0, $iContLenPos = 0, $hImgFile = 0, $pBuffer = 0, $iImgCount = 0
Global Const $iContLengthLen = StringLen("Content-Length: ")
Global $sStream = "", $sTrim2ContLen = ""
Global $hBMP = 0, $hGraphics = 0, $hHBITMAP2 = 0, $hFamily = 0, $hFont = 0, $tLayout = "", $hFormat = 0, $hBrush = 0
#endregion Global Vars
TCPStartup()
Global $iSocket = TCPConnect($iIPAddress, $iPort)
If @error Then
MsgBox(16, $sProgramTitle, "Could not connect !")
Exit -1
EndIf
TCPSend($iSocket, _
"GET /mjpeg.cgi HTTP/1.1" & @CRLF & _
"Host: " & $iIPAddress & ":" & $iPort & @CRLF & _
"Connection: keep-alive" & @CRLF & _
"Authorization: Basic " & $shtauth & @CRLF & @CRLF)
#region GUI
Global Const $SC_DRAGMOVE = 0xF012
Global $hGUI = 0, $pPic = 0, $hPic = 0, $btnRecord = 0
;$hGUI = GUICreate($sProgramTitle, 640, 480, $WS_POPUP, $WS_BORDER, $WS_EX_TOPMOST)
$hGUI = GUICreate($sProgramTitle, 640, 480, _
(@DesktopWidth - 1020) / 2, (@DesktopHeight - 760) / 2, _
$WS_POPUP)
$pPic = GUICtrlCreatePic("", 0, 0, 640, 480, $SS_BITMAP)
WinWait("IP Camera stream")
WinMove("IP Camera stream", "", 80, 80, 640, 480)
GUICtrlSetState($pPic, $GUI_DISABLE)
$hPic = GUICtrlGetHandle($pPic)
;$btnRecord = GUICtrlCreateButton("Record", 10, 490, 80, 26)
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")
GUISetState(@SW_SHOW, $hGUI)
#endregion GUI
_GDIPlus_Startup()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 17)
$tLayout = _GDIPlus_RectFCreate(10, 10, 100, 40)
$hFormat = _GDIPlus_StringFormatCreate()
$hBrush = _GDIPlus_BrushCreateSolid(0xAFFF0000)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $btnRecord
EndSwitch
$bRecvtmp = TCPRecv($iSocket, 4096, 1) ;4kb
If @error Then ExitLoop
If Not BinaryLen($bRecvtmp) Then ContinueLoop
$bStream &= $bRecvtmp
If $iImgLen = 0 Then
$sStream = BinaryToString($bStream)
$iContLenPos = StringInStr($sStream, "Content-Length: ", 2)
$iEOH = StringInStr($sStream, @CRLF & @CRLF, 2, 1, $iContLenPos)
If $iEOH = 0 Or $iContLenPos = 0 Then ContinueLoop
$sTrim2ContLen = StringTrimLeft($sStream, $iContLenPos + $iContLengthLen - 1)
$iImgLen = Number(StringLeft($sTrim2ContLen, StringInStr($sTrim2ContLen, @CR, 2) - 1))
$bStream = BinaryMid($bStream, $iEOH + 4)
EndIf
If $iImgLen = 0 Then ContinueLoop
$iStreamLen = BinaryLen($bStream)
If $iStreamLen < $iImgLen Then ContinueLoop
If Not $blGUIMinimized Then
$hBMP = Load_BMP_From_Mem($bStream)
If $blRecording Then
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBMP)
_GDIPlus_GraphicsDrawStringEx($hGraphics, "[•REC]", $hFont, $tLayout, $hFormat, $hBrush)
EndIf
$hHBITMAP2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBMP)
_WinAPI_DeleteObject(_SendMessage($hPic, $STM_SETIMAGE, 0, $hHBITMAP2))
_GDIPlus_ImageDispose($hBMP)
If $blRecording Then _GDIPlus_GraphicsDispose($hGraphics)
_WinAPI_DeleteObject($hHBITMAP2)
EndIf
$iImgLen = 0
WEnd
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_Shutdown()
TCPCloseSocket($iSocket)
TCPShutdown()
Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam)
Local Const $SC_MINIMIZE = 0xF020, $SC_RESTORE = 0xF120
Switch BitAND($wParam, 0xFFF0)
Case $SC_MINIMIZE, $SC_RESTORE
$blGUIMinimized = Not $blGUIMinimized
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SYSCOMMAND
Func Load_BMP_From_Mem($bImage) ;_GDIPlus_BitmapCreateFromMemory2
;Author: UEZ
;Modified: ProgAndy, Yashied, FireFox
If Not IsBinary($bImage) Then Return 0
Local $memBitmap = Binary($bImage)
Local $iLen = BinaryLen($memBitmap)
Local $GMEM_MOVEABLE = 0x0002
Local $aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", $GMEM_MOVEABLE, "ulong_ptr", $iLen)
Local $hData = $aResult[0]
$aResult = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $hData)
If @error Then Return 0
Local $tMem = DllStructCreate("byte[" & $iLen & "]", $aResult[0])
DllStructSetData($tMem, 1, $memBitmap)
DllCall("kernel32.dll", "bool", "GlobalUnlock", "handle", $hData)
If @error Then Return 0
$aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $hData, "int", True, "ptr*", 0)
$hStream = $aResult[3]
If @error Then Return 0
$aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0)
If @error Then Return 0
DllCall('oleaut32.dll', 'long', 'DispCallFunc', 'ptr', $hStream, 'ulong_ptr', 8 * (1 + @AutoItX64), 'uint', 4, 'ushort', 23, 'uint', 0, 'ptr', 0, 'ptr', 0, 'str', '')
Return $aResult[2]
EndFunc ;==>Load_BMP_From_Mem
Func _Base64Encode($input)
;Author: trancexx
$input = Binary($input)
Local $struct = DllStructCreate("byte[" & BinaryLen($input) & "]")
DllStructSetData($struct, 1, $input)
Local $strc = DllStructCreate("int")
Local $a_Call = DllCall("Crypt32.dll", "int", "CryptBinaryToString", _
"ptr", DllStructGetPtr($struct), _
"int", DllStructGetSize($struct), _
"int", 1, _
"ptr", 0, _
"ptr", DllStructGetPtr($strc))
If @error Or Not $a_Call[0] Then
Return SetError(1, 0, "") ; error calculating the length of the buffer needed
EndIf
Local $a = DllStructCreate("char[" & DllStructGetData($strc, 1) & "]")
$a_Call = DllCall("Crypt32.dll", "int", "CryptBinaryToString", _
"ptr", DllStructGetPtr($struct), _
"int", DllStructGetSize($struct), _
"int", 1, _
"ptr", DllStructGetPtr($a), _
"ptr", DllStructGetPtr($strc))
If @error Or Not $a_Call[0] Then
Return SetError(2, 0, ""); error encoding
EndIf
Return DllStructGetData($a, 1)
EndFunc ;==>_Base64Encode