achei um code tipo um capturador de screen....
voce escolhe o metodo tipo a janela a tela toda.
ai vc aperta ativar e print screen ou Prt Scr q vai abrir o paint com a imagem....
bom ta aki o code e tbm tem o download do code exe pt.
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=camera.ico
#AutoIt3Wrapper_outfile=Capturador_nocomp.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Res_Comment=Software gratuito y email-ware: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
#AutoIt3Wrapper_Res_Description=Capturador de pantalla personalizable
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=XimorroSoft 2009
#AutoIt3Wrapper_Res_Language=1034
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include
#include
#include
#include
#include
#include
#include
#include
#include
;Opt("MustDeclareVars", 1) ;Lo quitamos para compilar
Opt("GUICloseOnESC", 0)
Global $WS_EX_COMPOSITED = 0x2000000 ;Un estilo que curiosamente no está en WindowsConstants.au3 ni otro parecido
; Constantes para cursores
Global Const $IDC_ARROW = 32512
Global Const $OCR_NORMAL = 32512
Global Const $OCR_CROSS = 32515
Global Const $OCR_APPSTARTING = 32650
Global Const $OCR_HAND = 32649
Global Const $OCR_IBEAM = 32513
Global Const $OCR_NO = 32648
Global Const $OCR_SIZEALL = 32646
Global Const $OCR_SIZENESW = 32643
Global Const $OCR_SIZENS = 32645
Global Const $OCR_SIZENWSE = 32642
Global Const $OCR_SIZEWE = 32644
Global Const $OCR_UP = 32516
Global Const $OCR_WAIT = 32514
; Fin constantes cursores
; Varibles para controlar el rectángulo en los métodos de captura de objeto o de rectángulo marcado por usuario.
;Es necesario hacerlas globales para poder utilizarlas en el evento capturado $WM_WINDOWPOSCHANGED, así como en las
;funciones que crean el agujero, pues ahí no podemos pasarlas como parámetros
Global $hCtrlOld, $recAncho = 5, $hRect_GUI
; Mensajes descriptivos de los modos de captura
Local $msgDesactivado = @LF & "Esperando activación"
Local $msgRectan = "Pulse y luego marque el rectángulo arrastrando con el ratón"
Local $msgObjeto = "Ponga el cursor" & @LF & "sobre el objeto y" & @LF & "pulse " & @LF & "( cancela )"
Local $msgVentana = @LF & "Active ventana y" & @LF & "pulse "
Local $msgPantalla = @LF & "Disponga entorno y pulse "
;Versión de S.O., porque algunas cosas son diferentes en XP o Vista (o superiores) con Aero, por ejemplo en
;el modo recuadro el zoom en Aero puede ver GUIs con transparencia, XP no. En Aero es más suave hacer el
;zoom y luego mover el GUI, en XP al revés. Cuando la función da error devuelve FALSE (además del error),
;es decir, es equivalente a "no hay Aero"
Global $MODO_XP = Not _IsAeroEnable() ;(@OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000")
;Formulario guardado en Koda en gui_principal.kxf
Local $GUI_Principal = GUICreate("Capturador", 359, 135)
Local $lblMail = GUICtrlCreateLabel("", 5, 120, 255, 17) ;Para poder pinchar dejando lblLicencia deshabilitada
GUICtrlSetCursor($lblMail, 0)
Local $lblLicencia = GUICtrlCreateLabel("Emailware XimorroSoft 2009 (ximo.soft@yahoo.es)", 5, 120, 270, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Serif")
GUICtrlSetState(-1, $GUI_DISABLE)
Local $lblMarco = GUICtrlCreateLabel("", 5, 44, 200, 70, $SS_SUNKEN)
GUICtrlSetState(-1, $GUI_DISABLE) ; Si no captura eventos de ratón aunque no haga nada y no pasan a los botones
Local $lblMarco2 = GUICtrlCreateLabel("", 213, 30, 139, 68, $SS_ETCHEDFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
Local $lblMetodo = GUICtrlCreateLabel("Método:", 10, 16, 43, 17)
Local $cbxMetodo = GUICtrlCreateCombo("", 53, 12, 151, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Rectángulo|Objeto|Interior ventana|Ventana|Toda la pantalla", "Rectángulo")
Local $btnCapturar = GUICtrlCreateCheckBox("&Activar", 9, 54, 74, 50, $BS_PUSHLIKE) ; Aspecto de botón bi-estado
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") ; Negrita
Local $lblActiv = GUICtrlCreateLabel($msgDesactivado, 86, 51, 112, 55, BitOR($SS_CENTER,$WS_BORDER))
GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
GUICtrlSetState(-1, $GUI_DISABLE)
Local $chkCursor = GUICtrlCreateCheckbox("&Capturar cursor", 220, 8, 97, 17)
Local $chkPortapapeles = GUICtrlCreateCheckbox("Copiar en &Portapapeles", 220, 35, 129, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
Local $chkPaint = GUICtrlCreateCheckbox("Abrir en &MSPaint", 242, 53, 105, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
Local $chkPNG = GUICtrlCreateCheckbox("&Guardar PNG", 220, 75, 97, 17)
Local $btnSalir = GUICtrlCreateButton("&Salir", 284, 104, 67, 25)
WinSetTrans($GUI_Principal, "", 0)
GUISetState(@SW_SHOW)
_AnimTrans($GUI_Principal, 1, 255)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $btnSalir
_AnimTrans($GUI_Principal, 255, 0)
Exit
Case $lblMail
;Abrimos la aplicación de correo por defecto
Local $prev = Opt("ExpandEnvStrings", 1)
Local $var = RegRead("HKCR\mailto\shell\open\command", "")
SplashTextOn("Capturador", "Abriendo correo...",170,80,-1,-1,35,"",9.5,800)
Run(StringReplace($var, "%1", "mailto: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]?subject=Capturador" & _
"&body====
Escribe aquí tus comentarios y sugerencias.
" & _
"Por favor indica desde dónde escribes (para saber cuánto ha viajado el programa)
" & _
"¡Gracias!
Atentamente, XimorroSoft.
==="))
Local $err = @error
Opt("ExpandEnvStrings", $prev)
Sleep(1000)
SplashOff()
If $err Then
MsgBox(48 8192, "Capturador", "Error abriendo mail." & @LF & "Códido de error de Windows: " & $err)
EndIf
Case $btnCapturar
If _chkIsChecked($btnCapturar) Then
_CapturaActivada()
Else
_CapturaDesactivada()
EndIf
; Copiar a portapapeles y guardar en PNG no deben estar desactivados a la vez, es casi como un
; RadioButton, pero no del todo porque pueden estar los dos activados simultáneamente
Case $chkPortapapeles
If NOT (_chkIsChecked($chkPortapapeles) OR _chkIsChecked($chkPNG)) Then
GUICtrlSetState($chkPortapapeles, $GUI_CHECKED)
EndIf
If _chkIsChecked($chkPortapapeles) Then
GUICtrlSetState($chkPaint, $GUI_ENABLE)
Else
GUICtrlSetState($chkPaint, $GUI_DISABLE)
EndIf
Case $chkPNG
If NOT (_chkIsChecked($chkPortapapeles) OR _chkIsChecked($chkPNG)) Then
GUICtrlSetState($chkPNG, $GUI_CHECKED)
EndIf
EndSwitch
WEnd
Func _CapturaActivada()
GUICtrlSetData($btnCapturar, "Des&activar")
GUICtrlSetState($cbxMetodo, $GUI_DISABLE)
GUICtrlSetState($lblActiv, $GUI_ENABLE)
Switch GUICtrlRead($cbxMetodo)
Case "Rectángulo"
GUICtrlSetData($lblActiv, $msgRectan)
HotKeySet("{PRINTSCREEN}", "_CapturaRectan")
Case "Objeto"
GUICtrlSetData($lblActiv, $msgObjeto)
_CapturaObjeto()
Case "Interior ventana"
GUICtrlSetData($lblActiv, $msgVentana)
HotKeySet("{PRINTSCREEN}", "_CapturaClienteVentana")
Case "Ventana"
GUICtrlSetData($lblActiv, $msgVentana)
HotKeySet("{PRINTSCREEN}", "_CapturaVentana")
Case "Toda la pantalla"
GUICtrlSetData($lblActiv, $msgPantalla)
HotKeySet("{PRINTSCREEN}", "_CapturaPantalla")
Case Else
MsgBox(48, "Operación no realizable", "Método '" & GUICtrlRead($cbxMetodo) & "' no implementado.")
_CapturaDesactivada()
EndSwitch
EndFunc
; Para mantener el mismo modo después de una captura
Func _CapturaReactivada()
Switch GUICtrlRead($cbxMetodo)
Case "Rectángulo"
HotKeySet("{PRINTSCREEN}", "_CapturaRectan")
Case "Objeto"
GUICtrlSetData($lblActiv, $msgObjeto)
_CapturaObjeto()
Case "Interior ventana"
HotKeySet("{PRINTSCREEN}", "_CapturaClienteVentana")
Case "Ventana"
HotKeySet("{PRINTSCREEN}", "_CapturaVentana")
Case "Toda la pantalla"
HotKeySet("{PRINTSCREEN}", "_CapturaPantalla")
EndSwitch
EndFunc
Func _CapturaDesactivada()
GUICtrlSetState($cbxMetodo, $GUI_ENABLE)
GUICtrlSetData($lblActiv, $msgDesactivado)
GUICtrlSetState($lblActiv, $GUI_DISABLE)
GUICtrlSetData($btnCapturar, "&Activar")
GUICtrlSetState($btnCapturar, $GUI_UNCHECKED) ; Por si no se ha desactivado desde el botón
HotKeySet("{PRINTSCREEN}") ; Devolvemos el control de la tecla a Windows
EndFunc
Func _CapturaRectan()
Local $iX1, $iY1, $iX2, $iY2
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
if _Marca_Rectan($iX1, $iY1, $iX2, $iY2) then
; Capturamos imagen y copiamos al portapapeles
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $iX1, $iY1, $iX2, $iY2, $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
Else
_CapturaReactivada()
EndIf
EndFunc
Func _CapturaObjeto()
Local $aceptado = True
$hCtrlOld = -1
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar el ScreenCopy de Windows
; Deshabilitamos controles que no queremos activos, pues el usuario aún puede interactuar con el GUI
GUICtrlSetState($btnSalir, $GUI_DISABLE)
; Rectángulo, es un GUI con un agujero en medio para "desrellenar" el rectángulo formado por su fondo
$hRect_GUI = GUICreate("", 0, 0, 10, 10, $WS_POPUP, BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
GUISetBkColor(0x00FF00)
WinSetTrans($hRect_GUI, "", 200)
_RecuadraObjeto() ; Colocamos bien el rectángulo antes de mostrarlo la primera vez
GUISetState(@SW_SHOWNOACTIVATE, $hRect_GUI)
; Para poder recuadrar mientras se mueve o redimensiona una ventana reseteo $hCtrlOld en el bucle principal
; cuando se presiona el ratón, pero esto no funciona cuando la ventana afectada es de nuestro propio GUI, pues
; en ese caso el script se detiene; en este caso lo que hago es capturar el mensaje del sistema WM_WINDOWPOSCHANGED.
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED") ; Para poder recuadrar cuando se mueva nuestro GUI
Local $UserDLL = DllOpen("user32.dll")
While (Not _IsPressed("2C", $UserDLL)) AND $aceptado ; Hasta que se pulse o se cancele con
If _IsPressed("1B", $UserDLL) Or Not _chkIsChecked($btnCapturar) Then ; Escape
$aceptado = False
ExitLoop
EndIf
Sleep(30)
_RecuadraObjeto()
If _IsPressed(1, $UserDLL) Then
$hCtrlOld = -1
EndIf
WEnd
; Realizamos limpieza
DllClose($UserDLL)
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "") ; Liberamos captura de evento
GUIDelete($hRect_GUI)
If $aceptado Then
; Tomamos extensión de la última ventana, mejor no usamos $hCtrlOld por si casualmente está a -1
Local $mPos = _WinAPI_GetMousePos()
Local $posObj = WinGetPos(_WinAPI_WindowFromPoint($mPos))
; Traducimos ancho y alto a coordenadas
$posObj[2] = $posObj[0] $posObj[2]
$posObj[3] = $posObj[1] $posObj[3]
Sleep(100)
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $posObj[0], $posObj[1], $posObj[2], $posObj[3], $concursor)
GUICtrlSetState($btnSalir, $GUI_ENABLE)
_CapturaDesactivada()
_ProcesaCaptura($Hbit)
Else
; Sólo restauramos controles
GUICtrlSetState($btnSalir, $GUI_ENABLE)
_CapturaDesactivada()
EndIf
EndFunc
Func _RecuadraObjeto()
Local $pos = _WinAPI_GetMousePos()
Local $hCtrl = _WinAPI_WindowFromPoint($pos)
If $hCtrl <> 0 And $hCtrlOld <> $hCtrl And $hRect_GUI <> $hCtrl Then
$hCtrlOld = $hCtrl
Local $i_W, $i_H, $Todo_Rgn, $Agujero_Rgn, $Rectan_Rgn
Local $aCtrlPos = WinGetPos($hCtrl)
$i_W = $aCtrlPos[2]
$i_H = $aCtrlPos[3]
$Todo_Rgn = _WinAPI_CreateRectRgn(0, 0, $i_W, $i_H)
$Agujero_Rgn = _WinAPI_CreateRectRgn($recAncho, $recAncho, $i_W - $recAncho, $i_H - $recAncho)
$Rectan_Rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_CombineRgn($Rectan_Rgn, $Todo_Rgn, $Agujero_Rgn, $RGN_DIFF)
_WinAPI_SetWindowRgn($hRect_GUI, $Rectan_Rgn)
WinMove($hRect_GUI, "", $aCtrlPos[0], $aCtrlPos[1], $i_W, $i_H)
WinSetOnTop($hRect_GUI, "", 1) ; Por si aparecen nuevas ventanas pop-up, recolocamos delante
EndIf
EndFunc
; Para seguir recuadrando mientras se mueve una de nuestras ventanas, excepto el propio rectángulo, claro
Func WM_WINDOWPOSCHANGED($hWndGUI, $MsgID, $WParam, $LParam)
If $hWndGUI = $hRect_GUI Then Return $GUI_RUNDEFMSG
_RecuadraObjeto()
$hCtrlOld = -1
EndFunc
Func _CapturaClienteVentana()
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
Local $hVentana = WinGetHandle("[ACTIVE]")
Local $pos = _WinGetClientPos($hVentana)
Local $tam = WinGetClientSize($hVentana)
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $pos[0], $pos[1], $pos[0] $tam[0], $pos[1] $tam[1], $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
EndFunc
Func _WinGetClientPos($hVent)
Local $Pos[2]
Local $tpoint = DllStructCreate("int X; int Y")
DllStructSetData($tpoint, "X", 0)
DllStructSetData($tpoint, "Y", 0)
_WinAPI_ClientToScreen($hVent, $tpoint)
$Pos[0] = DllStructGetData($tpoint, "X")
$Pos[1] = DllStructGetData($tpoint, "Y")
return $Pos
EndFunc
Func _CapturaVentana()
; ALT PrintScreen de Windows no nos sirve porque no captura cursor
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
Local $hVentana = WinGetHandle("[ACTIVE]")
Local $rectV = WinGetPos($hVentana)
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $rectV[0], $rectV[1], $rectV[0] $rectV[2], $rectV[1] $rectV[3], $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
EndFunc
Func _CapturaPantalla()
; No nos sirve el PrintScreen de Windows porque no podemos controlar el cursor
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", 0, 0, @DesktopWidth, @DesktopHeight, $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
EndFunc
Func _ProcesaCaptura($hBMP)
If _chkIsChecked($chkPNG) Then _GuardaBMPenPNG($hBMP)
If _chkIsChecked($chkPortapapeles) Then
_BMPaPortapapeles($hBMP)
If _chkIsChecked($chkPaint) Then
_PegaEnPaint()
Else
; Si no se pega en Paint mostramos un mensaje para que el usuario tenga alguna respuesta visual
MsgBox(8192 64, "Capturador", "Imagen copiada en el portapapeles.")
EndIf
EndIf
_WinAPI_DeleteObject($HBMP)
EndFunc
Func _BMPaPortapapeles($img_handler)
_ClipBoard_Open($GUI_Principal)
_ClipBoard_Empty()
_ClipBoard_SetDataEx($img_handler, $CF_BITMAP)
_ClipBoard_Close() ; ¡Hay que cerrar o lo dejamos bloqueado!
EndFunc
Func _PegaEnPaint()
Local $clase = "[CLASS:MSPaintApp]"
Run("mspaint.exe")
If Not WinWait($clase, "", 5) Then
MsgBox(16, "Imposible conectar con MsPaint", "Error conectando con MsPaint, proceso no encontrado.")
Else
If Not WinActive($clase) Then
WinActivate($clase)
WinWaitActive($clase)
EndIf
Send("^v") ; ctrl v = pegar
EndIf
EndFunc
Func _GuardaBMPenPNG($HBitmap)
Local $fich = FileSaveDialog("Guardan en...", @WorkingDir , "Imagen PNG (*.png)", 18, "captura.png", $GUI_Principal)
If @error Then
MsgBox(48, "Capturador", "Proceso cancelado. Imagen descartada.")
Else
_GDIPlus_Startup()
Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($HBitmap)
_GDIPlus_ImageSaveToFile($hImage, $fich)
_GDIPlus_ImageDispose($hImage)
;_WinAPI_DeleteObject($HBitmap)
_GDIPlus_ShutDown()
EndIf
EndFunc
Func _Marca_Rectan(ByRef $iX1, ByRef $iY1, ByRef $iX2, ByRef $iY2)
; Permite dibujar un rectángulo sobre la pantalla, devuelve TRUE si se acepta el rectángulo y FALSE
; si se cancela. Si TRUE, las coordenadas del rectángulo se devuelven en los parámetros.
Local $UserDLL = DllOpen("user32.dll")
Local $GdiDLL = DllOpen("gdi32.dll")
;Extensión de la que se hace zoom y multiplicador
Local $ZoomAncho = 50, $ZoomAlto = 50, $ZoomX = 3
; GUI transparente ocupando toda la pantalla para capturar el ratón
Local $GUI_fondo = GUICreate("Fondo", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP,BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
WinSetTrans($GUI_fondo, "", 1) ; ¡Si se pone totalmente transparente no captura el ratón!
GUISetCursor(3, 1) ;Cursor de cruz, sólo cambia para GUI actual
;Con _SetStdCursor($OCR_CROSS, $IDC_ARROW) podríamos cambiar el cursor global, pero no hace falta. En
;ese caso hay que restaurarlo con _RestoreDefaultSystemCursor()
GUISetState(@SW_SHOW)
; Rectángulo, es un GUI con un agujero en medio para "desrellenar" el rectángulo formado por su fondo
; El agujero será la región a capturar
$hRect_GUI = GUICreate("", 0, 0, 10, 10, $WS_POPUP, BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
GUISetBkColor(0xFF5500)
GUISetCursor(3, 1) ;Cursor de cruz
If Not $MODO_XP Then WinSetTrans($hRect_GUI, "", 180)
GUISetState(@SW_SHOWNOACTIVATE, $hRect_GUI)
; Esperamos primer click
Local $rect_aceptado = True
While 1
If _IsPressed("1B", $UserDLL) Then ; Escape
$rect_aceptado = False
ExitLoop
EndIf
If _IsPressed("01", $UserDLL) Then ExitLoop ;Botón izdo
Sleep(10)
WEnd
;Posición inicial
Local $aMouse_Pos = MouseGetPos()
$iX1 = $aMouse_Pos[0]
$iY1 = $aMouse_Pos[1]
;Creamos la ventana de zoom
Local $GuiZoomAncho = $ZoomAncho * $ZoomX
Local $GuiZoomAlto = $ZoomAlto * $ZoomX
Local $MidZoomW = $ZoomAncho / 2, $MidZoomH = $ZoomAlto / 2
Local $Xzoom = $iX1 4, $Yzoom = $iY1 25 ;posición del GUI
Local $XSrc = $iX1-$MidZoomW, $YSrc = $iY1-$MidZoomH ;posición de la zona a "zoomear"
Local $GUI_zoom = GUICreate("Zoom", $GuiZoomAncho, $GuiZoomAlto, $iX1 4, $iY1 25, _
BitOR($WS_POPUP, $WS_THICKFRAME), BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW, $WS_EX_STATICEDGE))
GUISetState(@SW_SHOWNOACTIVATE)
Local $DeskDC = _WinAPI_GetDC(0) ;DC de la ventana Desktop
Local $ZoomDC = _WinAPI_GetDC($GUI_zoom)
; Empezamos a dibujar el rectángulo a copiar
Local $ratX, $ratY, $lblX1, $lblX2, $lblY1, $lblY2, $tamX, $tamY
Local $oldRatX = $iX1, $oldRatY = $iY1 ;Para saber si el rectángulo ha cambiado
While _IsPressed("01", $UserDLL)
$aMouse_Pos = MouseGetPos()
$ratX = $aMouse_Pos[0]
$ratY = $aMouse_Pos[1]
; Actualización de zoom antes de mover su GUI para que vaya suave en Vista
If Not $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
If ($oldRatX <> $ratX OR $oldRatY <> $ratY) Then
;Sólo procesamos si el ratón se ha movido
$oldRatX = $ratX
$oldRatY = $ratY
If $iX1 < $ratX Then
$lblX1 = $iX1
$lblX2 = $ratX
Else
$lblX1 = $ratX
$lblX2 = $iX1
EndIf
If $iY1 < $ratY Then
$lblY1 = $iY1
$lblY2 = $ratY
Else
$lblY1 = $ratY
$lblY2 = $iY1
EndIf
$tamX = $lblX2 - $lblX1 1
$tamY = $lblY2 - $lblY1 1
ToolTip($tamX & " x " & $tamY, $lblX2 4, $lblY2 4, Default, Default, 4)
_DibujaRectan($lblX1, $lblY1, $tamX, $tamY)
; Movemos la ventana de zoom para que no se salga por el borde
If ($lblX2 4 $GuiZoomAncho < @DesktopWidth) Then
$Xzoom = $lblX2 4
Else
$Xzoom = $lblX1-20-$GuiZoomAncho
EndIf
If ($lblY2 30 $GuiZoomAlto < @DesktopHeight) Then
$Yzoom = $lblY2 30
Else
$Yzoom = $lblY1-20-$GuiZoomAlto
EndIf
WinMove($GUI_zoom, "", $Xzoom, $Yzoom)
; No hacemos zoom de zonas fuera de pantalla, aunque el ratón esté en el borde
If $ratX < $MidZoomW Then
$XSrc = 0
ElseIf $ratX $MidZoomW > @DesktopWidth Then
$XSrc = @DesktopWidth-$ZoomAncho
Else
$XSrc = $ratX-$MidZoomW
EndIf
If $ratY < $MidZoomH Then
$YSrc = 0
ElseIf $ratY $MidZoomH > @DesktopHeight Then
$YSrc = @DesktopHeight-$ZoomAlto
Else
$YSrc = $ratY-$MidZoomH
EndIf
EndIf
;En XP es más suave copiar después de mover
If $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
Sleep(10)
WEnd
; Dejamos ajustar el recuadro de captura, se mueve con los cursores y se redimensiona con CTRL cursores
; Para finalizar se pulsa ENTER
; Tecla CONTROL = "11"
GUISetCursor(4, 1, $GUI_fondo) ; Cursor con interrogante, en fondo...
GUISetCursor(4, 1, $hRect_GUI) ; ...y en recuadro
;Ahora el control de si ha cambiado el rectángulo lo tenemos sobre la coordenada final
Local $controlX = $lblX2
Local $controlY = $lblY2
While (Not _IsPressed("0D", $UserDLL)) AND $rect_aceptado ; Hasta que se pulse ENTER o se cancele
If _IsPressed("01", $UserDLL) Then ; Botón izquierdo de ratón
; Esperamos a que suelte el botón
_EsperaKeyOff("01", $UserDLL)
GUISetState(@SW_HIDE, $GUI_zoom)
SplashTextOn("Ayuda", "Mover: cursores" & @LF & "Tamaño: CTRL cursores" & @LF & "Aceptar: ENTER" & _
@LF & "Cancelar: ESC" & @LF & @LF & "(Click para continuar)",170,100,-1,-1,5,"",9,800)
_EsperaKeyOnOff("01", $UserDLL)
SplashOff()
GUISetState(@SW_SHOWNOACTIVATE, $GUI_zoom)
EndIf
If _IsPressed("25", $UserDLL) Then ; Cursor izquierda
If Not _IsPressed("11", $UserDLL) Then $lblX1 -= 1
$lblX2 -= 1
ElseIf _IsPressed("27", $UserDLL) Then ; Cursor derecha
If Not _IsPressed("11", $UserDLL) Then $lblX1 = 1
$lblX2 = 1
EndIf
If _IsPressed("26", $UserDLL) Then ; Cursor arriba
If Not _IsPressed("11", $UserDLL) Then $lblY1 -= 1
$lblY2 -= 1
ElseIf _IsPressed("28", $UserDLL) Then ; Cursor abajo
If Not _IsPressed("11", $UserDLL) Then $lblY1 = 1
$lblY2 = 1
EndIf
If _IsPressed("1B", $UserDLL) Then ; Escape
$rect_aceptado = False
EndIf
if $lblX2 <= $lblX1 Then $lblX2 = $lblX1
if $lblY2 <= $lblY1 Then $lblY2 = $lblY1
If ($controlX <> $lblX2 OR $controlY <> $lblY2) Then
$controlX = $lblX2
$controlY = $lblY2
$tamX = $lblX2 - $lblX1 1
$tamY = $lblY2 - $lblY1 1
ToolTip($tamX & " x " & $tamY, $lblX2 4, $lblY2 4, Default, Default, 4)
_DibujaRectan($lblX1, $lblY1, $tamX, $tamY)
EndIf
$aMouse_Pos = MouseGetPos()
$ratX = $aMouse_Pos[0]
$ratY = $aMouse_Pos[1]
; Actualización de zoom antes de mover su GUI para que vaya suave en Vista
If Not $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
If ($oldRatX <> $ratX OR $oldRatY <> $ratY) Then
; Sólo movemos el Gui de zoom si se mueve el ratón
$oldRatX = $ratX
$oldRatY = $ratY
If ($ratX 4 $GuiZoomAncho < @DesktopWidth) Then
$Xzoom = $ratX 4
Else
$Xzoom = $ratX-4-$GuiZoomAncho
EndIf
If ($ratY 30 $GuiZoomAlto < @DesktopHeight) Then
$Yzoom = $ratY 30
Else
$Yzoom = $ratY-35-$GuiZoomAlto
EndIf
WinMove($GUI_zoom, "", $Xzoom, $Yzoom)
; No hacemos zoom de zonas fuera de pantalla, aunque el ratón esté en el borde
If $ratX < $MidZoomW Then
$XSrc = 0
ElseIf $ratX $MidZoomW > @DesktopWidth Then
$XSrc = @DesktopWidth-$ZoomAncho
Else
$XSrc = $ratX-$MidZoomW
EndIf
If $ratY < $MidZoomH Then
$YSrc = 0
ElseIf $ratY $MidZoomH > @DesktopHeight Then
$YSrc = @DesktopHeight-$ZoomAlto
Else
$YSrc = $ratY-$MidZoomH
EndIf
EndIf
;En XP es más suave copiar después de mover
If $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
Sleep(20)
Wend
ToolTip("")
;Posición final
$iX1 = $lblX1
$iY1 = $lblY1
$iX2 = $lblX1 $tamX
$iY2 = $lblY1 $tamY
; Liberamos recursos bloqueados: handlers, dlls, Device Contexts, GUIs...
_WinAPI_ReleaseDC(0, $DeskDC)
_WinAPI_ReleaseDC($GUI_zoom, $ZoomDC)
GUIDelete($hRect_GUI)
GUIDelete($GUI_fondo)
GUIDelete($GUI_zoom)
DllClose($UserDLL)
DllClose($GdiDLL)
;_RestoreDefaultSystemCursor()
Sleep(10) ; Damos tiempo a que se reactive la ventana que había antes de nuestra capa transparente
return $rect_aceptado
EndFunc
; En _DibujaRectan pasamos (x0,y0,ancho,alto) de la zona de captura, el rectángulo hay que dibujarlo por fuera
Func _DibujaRectan($x, $y, $w, $h)
Local $Todo_Rgn, $Agujero_Rgn, $Rectan_Rgn
Local $rX2 = $w ($recAncho*2), $rY2 = $h ($recAncho*2) ;coordenadas finales del GUI (captura rectángulo)
$Todo_Rgn = _WinAPI_CreateRectRgn(0, 0, $rX2, $rY2)
$Agujero_Rgn = _WinAPI_CreateRectRgn($recAncho, $recAncho, $w $recAncho, $h $recAncho)
$Rectan_Rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_CombineRgn($Rectan_Rgn, $Todo_Rgn, $Agujero_Rgn, $RGN_DIFF)
_WinAPI_SetWindowRgn($hRect_GUI, $Rectan_Rgn)
WinMove($hRect_GUI, "", $x-$recAncho, $y-$recAncho, $rX2, $rY2)
WinSetOnTop($hRect_GUI, "", 1) ; Por si aparecen nuevas ventanas pop-up, recolocamos delante
EndFunc
Func _WAPI_StretchBlt($DestDC, $DestX, $DestY, $DestW, $DestH, $OrigDC, $OrigX, $OrigY, $OrigW, $OrigH, $RasterOP, $GdiDLL="GDI32.dll")
DllCall($GdiDLL, "int","StretchBlt", "int",$DestDC, "int",$DestX, "int",$DestY, "int",$DestW, "int",$DestH, _
"int",$OrigDC, "int",$OrigX, "int",$OrigY, "int",$OrigW, "int",$OrigH, "long",$RasterOP)
EndFunc
Func _chkIsChecked($chk)
return BitAnd(GUICtrlRead($chk),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Func _EsperaKeyOn($keycode, $UserDLL='user32.dll')
;Espera que se presione esta tecla (o botón de ratón)
While Not _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
EndFunc
Func _EsperaKeyOff($keycode, $UserDLL='user32.dll')
;Espera a que esta tecla (o botón de ratón) no esté presionada
While _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
EndFunc
Func _EsperaKeyOnOff($keycode, $UserDLL='user32.dll')
;Espera a que esta tecla (o botón de ratón) se presione y suelte
While Not _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
While _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
EndFunc
Func _SetStdCursor($i_idc_cursor, $i_cursor)
Local $newhcurs, $lResult
$newhcurs = DllCall("user32.dll", "hwnd", "LoadCursorA", "hwnd", 0, 'int', $i_idc_cursor)
If Not @error Then
$lResult = DllCall("user32.dll", "int", "SetSystemCursor", "int", $newhcurs[0], "int", $i_cursor)
If @error Then
MsgBox(0, "Error", "Failed SetSystemCursor")
EndIf
Else
MsgBox(0, "Error", "Failed LoadCursor")
EndIf
EndFunc
Func _RestoreDefaultSystemCursor()
Const $SPI_SETCURSORS = 0x57
DllCall("user32.dll", "int", "SystemParametersInfo", "int", $SPI_SETCURSORS, "int", 0, "int", 0, "int", 0)
EndFunc
Func _Dummy()
; No hace nada. Se utiliza para dejar sin función una tecla hotkey, tanto para el programa como para Windows
return
EndFunc
Func _AnimTrans($hWnd, $Desde, $Hasta, $Paso = 5, $Sleep = 5)
If $Desde > $Hasta Then $Paso = -$Paso
For $i = $Desde To $Hasta Step $Paso
WinSetTrans($hWnd, '', $i)
Sleep($Sleep)
Next
WinSetTrans($hWnd, '', $Hasta) ; Por si el paso del bucle no nos deja en el límite exacto
EndFunc
;================================================= ==============================
; Function Name: _IsAeroEnable
; Description: Checks if aero is enabled
; Parameter(s): None
; Requirement(s): dwmapi.dll, Windows Vista
; Return Value(s): 0 If disabled, 1 if enabled
; Author(s): GtaSpider
; Modificado por Ximo: No devolvía bien el valor (bug de AutoIt devolviendo 0)
;================================================= ==============================
Func _IsAeroEnable()
Local $asDll = DllCall("dwmapi.dll","int","DwmIsCompositionEnable d","str","")
If @error Then Return SetError(@error,0,False)
Return Asc($asDll[1]) = 1
EndFunc
Downloads
como deve ter aparecido aqueles emoticons....
download:[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Sabe oq ta em vermelho?parece q e sugestao pa qm crior o programa e so editar la...
o codigo n e meu n so to colocando aki pra quem quiser ai.
otros mirrors:
MultiUpload:Multiupload.com - upload your files to multiple file hosting sites!
2shared:[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Megauupload:[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Ou:
Citação:
dps eu do uma ajeitada aki
voce escolhe o metodo tipo a janela a tela toda.
ai vc aperta ativar e print screen ou Prt Scr q vai abrir o paint com a imagem....
bom ta aki o code e tbm tem o download do code exe pt.
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=camera.ico
#AutoIt3Wrapper_outfile=Capturador_nocomp.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Res_Comment=Software gratuito y email-ware: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
#AutoIt3Wrapper_Res_Description=Capturador de pantalla personalizable
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=XimorroSoft 2009
#AutoIt3Wrapper_Res_Language=1034
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include
#include
#include
#include
#include
#include
#include
#include
#include
;Opt("MustDeclareVars", 1) ;Lo quitamos para compilar
Opt("GUICloseOnESC", 0)
Global $WS_EX_COMPOSITED = 0x2000000 ;Un estilo que curiosamente no está en WindowsConstants.au3 ni otro parecido
; Constantes para cursores
Global Const $IDC_ARROW = 32512
Global Const $OCR_NORMAL = 32512
Global Const $OCR_CROSS = 32515
Global Const $OCR_APPSTARTING = 32650
Global Const $OCR_HAND = 32649
Global Const $OCR_IBEAM = 32513
Global Const $OCR_NO = 32648
Global Const $OCR_SIZEALL = 32646
Global Const $OCR_SIZENESW = 32643
Global Const $OCR_SIZENS = 32645
Global Const $OCR_SIZENWSE = 32642
Global Const $OCR_SIZEWE = 32644
Global Const $OCR_UP = 32516
Global Const $OCR_WAIT = 32514
; Fin constantes cursores
; Varibles para controlar el rectángulo en los métodos de captura de objeto o de rectángulo marcado por usuario.
;Es necesario hacerlas globales para poder utilizarlas en el evento capturado $WM_WINDOWPOSCHANGED, así como en las
;funciones que crean el agujero, pues ahí no podemos pasarlas como parámetros
Global $hCtrlOld, $recAncho = 5, $hRect_GUI
; Mensajes descriptivos de los modos de captura
Local $msgDesactivado = @LF & "Esperando activación"
Local $msgRectan = "Pulse y luego marque el rectángulo arrastrando con el ratón"
Local $msgObjeto = "Ponga el cursor" & @LF & "sobre el objeto y" & @LF & "pulse " & @LF & "( cancela )"
Local $msgVentana = @LF & "Active ventana y" & @LF & "pulse "
Local $msgPantalla = @LF & "Disponga entorno y pulse "
;Versión de S.O., porque algunas cosas son diferentes en XP o Vista (o superiores) con Aero, por ejemplo en
;el modo recuadro el zoom en Aero puede ver GUIs con transparencia, XP no. En Aero es más suave hacer el
;zoom y luego mover el GUI, en XP al revés. Cuando la función da error devuelve FALSE (además del error),
;es decir, es equivalente a "no hay Aero"
Global $MODO_XP = Not _IsAeroEnable() ;(@OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000")
;Formulario guardado en Koda en gui_principal.kxf
Local $GUI_Principal = GUICreate("Capturador", 359, 135)
Local $lblMail = GUICtrlCreateLabel("", 5, 120, 255, 17) ;Para poder pinchar dejando lblLicencia deshabilitada
GUICtrlSetCursor($lblMail, 0)
Local $lblLicencia = GUICtrlCreateLabel("Emailware XimorroSoft 2009 (ximo.soft@yahoo.es)", 5, 120, 270, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Serif")
GUICtrlSetState(-1, $GUI_DISABLE)
Local $lblMarco = GUICtrlCreateLabel("", 5, 44, 200, 70, $SS_SUNKEN)
GUICtrlSetState(-1, $GUI_DISABLE) ; Si no captura eventos de ratón aunque no haga nada y no pasan a los botones
Local $lblMarco2 = GUICtrlCreateLabel("", 213, 30, 139, 68, $SS_ETCHEDFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
Local $lblMetodo = GUICtrlCreateLabel("Método:", 10, 16, 43, 17)
Local $cbxMetodo = GUICtrlCreateCombo("", 53, 12, 151, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Rectángulo|Objeto|Interior ventana|Ventana|Toda la pantalla", "Rectángulo")
Local $btnCapturar = GUICtrlCreateCheckBox("&Activar", 9, 54, 74, 50, $BS_PUSHLIKE) ; Aspecto de botón bi-estado
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") ; Negrita
Local $lblActiv = GUICtrlCreateLabel($msgDesactivado, 86, 51, 112, 55, BitOR($SS_CENTER,$WS_BORDER))
GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x800000)
GUICtrlSetState(-1, $GUI_DISABLE)
Local $chkCursor = GUICtrlCreateCheckbox("&Capturar cursor", 220, 8, 97, 17)
Local $chkPortapapeles = GUICtrlCreateCheckbox("Copiar en &Portapapeles", 220, 35, 129, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
Local $chkPaint = GUICtrlCreateCheckbox("Abrir en &MSPaint", 242, 53, 105, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
Local $chkPNG = GUICtrlCreateCheckbox("&Guardar PNG", 220, 75, 97, 17)
Local $btnSalir = GUICtrlCreateButton("&Salir", 284, 104, 67, 25)
WinSetTrans($GUI_Principal, "", 0)
GUISetState(@SW_SHOW)
_AnimTrans($GUI_Principal, 1, 255)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $btnSalir
_AnimTrans($GUI_Principal, 255, 0)
Exit
Case $lblMail
;Abrimos la aplicación de correo por defecto
Local $prev = Opt("ExpandEnvStrings", 1)
Local $var = RegRead("HKCR\mailto\shell\open\command", "")
SplashTextOn("Capturador", "Abriendo correo...",170,80,-1,-1,35,"",9.5,800)
Run(StringReplace($var, "%1", "mailto: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]?subject=Capturador" & _
"&body====
Escribe aquí tus comentarios y sugerencias.
" & _
"Por favor indica desde dónde escribes (para saber cuánto ha viajado el programa)
" & _
"¡Gracias!
Atentamente, XimorroSoft.
==="))
Local $err = @error
Opt("ExpandEnvStrings", $prev)
Sleep(1000)
SplashOff()
If $err Then
MsgBox(48 8192, "Capturador", "Error abriendo mail." & @LF & "Códido de error de Windows: " & $err)
EndIf
Case $btnCapturar
If _chkIsChecked($btnCapturar) Then
_CapturaActivada()
Else
_CapturaDesactivada()
EndIf
; Copiar a portapapeles y guardar en PNG no deben estar desactivados a la vez, es casi como un
; RadioButton, pero no del todo porque pueden estar los dos activados simultáneamente
Case $chkPortapapeles
If NOT (_chkIsChecked($chkPortapapeles) OR _chkIsChecked($chkPNG)) Then
GUICtrlSetState($chkPortapapeles, $GUI_CHECKED)
EndIf
If _chkIsChecked($chkPortapapeles) Then
GUICtrlSetState($chkPaint, $GUI_ENABLE)
Else
GUICtrlSetState($chkPaint, $GUI_DISABLE)
EndIf
Case $chkPNG
If NOT (_chkIsChecked($chkPortapapeles) OR _chkIsChecked($chkPNG)) Then
GUICtrlSetState($chkPNG, $GUI_CHECKED)
EndIf
EndSwitch
WEnd
Func _CapturaActivada()
GUICtrlSetData($btnCapturar, "Des&activar")
GUICtrlSetState($cbxMetodo, $GUI_DISABLE)
GUICtrlSetState($lblActiv, $GUI_ENABLE)
Switch GUICtrlRead($cbxMetodo)
Case "Rectángulo"
GUICtrlSetData($lblActiv, $msgRectan)
HotKeySet("{PRINTSCREEN}", "_CapturaRectan")
Case "Objeto"
GUICtrlSetData($lblActiv, $msgObjeto)
_CapturaObjeto()
Case "Interior ventana"
GUICtrlSetData($lblActiv, $msgVentana)
HotKeySet("{PRINTSCREEN}", "_CapturaClienteVentana")
Case "Ventana"
GUICtrlSetData($lblActiv, $msgVentana)
HotKeySet("{PRINTSCREEN}", "_CapturaVentana")
Case "Toda la pantalla"
GUICtrlSetData($lblActiv, $msgPantalla)
HotKeySet("{PRINTSCREEN}", "_CapturaPantalla")
Case Else
MsgBox(48, "Operación no realizable", "Método '" & GUICtrlRead($cbxMetodo) & "' no implementado.")
_CapturaDesactivada()
EndSwitch
EndFunc
; Para mantener el mismo modo después de una captura
Func _CapturaReactivada()
Switch GUICtrlRead($cbxMetodo)
Case "Rectángulo"
HotKeySet("{PRINTSCREEN}", "_CapturaRectan")
Case "Objeto"
GUICtrlSetData($lblActiv, $msgObjeto)
_CapturaObjeto()
Case "Interior ventana"
HotKeySet("{PRINTSCREEN}", "_CapturaClienteVentana")
Case "Ventana"
HotKeySet("{PRINTSCREEN}", "_CapturaVentana")
Case "Toda la pantalla"
HotKeySet("{PRINTSCREEN}", "_CapturaPantalla")
EndSwitch
EndFunc
Func _CapturaDesactivada()
GUICtrlSetState($cbxMetodo, $GUI_ENABLE)
GUICtrlSetData($lblActiv, $msgDesactivado)
GUICtrlSetState($lblActiv, $GUI_DISABLE)
GUICtrlSetData($btnCapturar, "&Activar")
GUICtrlSetState($btnCapturar, $GUI_UNCHECKED) ; Por si no se ha desactivado desde el botón
HotKeySet("{PRINTSCREEN}") ; Devolvemos el control de la tecla a Windows
EndFunc
Func _CapturaRectan()
Local $iX1, $iY1, $iX2, $iY2
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
if _Marca_Rectan($iX1, $iY1, $iX2, $iY2) then
; Capturamos imagen y copiamos al portapapeles
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $iX1, $iY1, $iX2, $iY2, $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
Else
_CapturaReactivada()
EndIf
EndFunc
Func _CapturaObjeto()
Local $aceptado = True
$hCtrlOld = -1
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar el ScreenCopy de Windows
; Deshabilitamos controles que no queremos activos, pues el usuario aún puede interactuar con el GUI
GUICtrlSetState($btnSalir, $GUI_DISABLE)
; Rectángulo, es un GUI con un agujero en medio para "desrellenar" el rectángulo formado por su fondo
$hRect_GUI = GUICreate("", 0, 0, 10, 10, $WS_POPUP, BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
GUISetBkColor(0x00FF00)
WinSetTrans($hRect_GUI, "", 200)
_RecuadraObjeto() ; Colocamos bien el rectángulo antes de mostrarlo la primera vez
GUISetState(@SW_SHOWNOACTIVATE, $hRect_GUI)
; Para poder recuadrar mientras se mueve o redimensiona una ventana reseteo $hCtrlOld en el bucle principal
; cuando se presiona el ratón, pero esto no funciona cuando la ventana afectada es de nuestro propio GUI, pues
; en ese caso el script se detiene; en este caso lo que hago es capturar el mensaje del sistema WM_WINDOWPOSCHANGED.
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED") ; Para poder recuadrar cuando se mueva nuestro GUI
Local $UserDLL = DllOpen("user32.dll")
While (Not _IsPressed("2C", $UserDLL)) AND $aceptado ; Hasta que se pulse o se cancele con
If _IsPressed("1B", $UserDLL) Or Not _chkIsChecked($btnCapturar) Then ; Escape
$aceptado = False
ExitLoop
EndIf
Sleep(30)
_RecuadraObjeto()
If _IsPressed(1, $UserDLL) Then
$hCtrlOld = -1
EndIf
WEnd
; Realizamos limpieza
DllClose($UserDLL)
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "") ; Liberamos captura de evento
GUIDelete($hRect_GUI)
If $aceptado Then
; Tomamos extensión de la última ventana, mejor no usamos $hCtrlOld por si casualmente está a -1
Local $mPos = _WinAPI_GetMousePos()
Local $posObj = WinGetPos(_WinAPI_WindowFromPoint($mPos))
; Traducimos ancho y alto a coordenadas
$posObj[2] = $posObj[0] $posObj[2]
$posObj[3] = $posObj[1] $posObj[3]
Sleep(100)
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $posObj[0], $posObj[1], $posObj[2], $posObj[3], $concursor)
GUICtrlSetState($btnSalir, $GUI_ENABLE)
_CapturaDesactivada()
_ProcesaCaptura($Hbit)
Else
; Sólo restauramos controles
GUICtrlSetState($btnSalir, $GUI_ENABLE)
_CapturaDesactivada()
EndIf
EndFunc
Func _RecuadraObjeto()
Local $pos = _WinAPI_GetMousePos()
Local $hCtrl = _WinAPI_WindowFromPoint($pos)
If $hCtrl <> 0 And $hCtrlOld <> $hCtrl And $hRect_GUI <> $hCtrl Then
$hCtrlOld = $hCtrl
Local $i_W, $i_H, $Todo_Rgn, $Agujero_Rgn, $Rectan_Rgn
Local $aCtrlPos = WinGetPos($hCtrl)
$i_W = $aCtrlPos[2]
$i_H = $aCtrlPos[3]
$Todo_Rgn = _WinAPI_CreateRectRgn(0, 0, $i_W, $i_H)
$Agujero_Rgn = _WinAPI_CreateRectRgn($recAncho, $recAncho, $i_W - $recAncho, $i_H - $recAncho)
$Rectan_Rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_CombineRgn($Rectan_Rgn, $Todo_Rgn, $Agujero_Rgn, $RGN_DIFF)
_WinAPI_SetWindowRgn($hRect_GUI, $Rectan_Rgn)
WinMove($hRect_GUI, "", $aCtrlPos[0], $aCtrlPos[1], $i_W, $i_H)
WinSetOnTop($hRect_GUI, "", 1) ; Por si aparecen nuevas ventanas pop-up, recolocamos delante
EndIf
EndFunc
; Para seguir recuadrando mientras se mueve una de nuestras ventanas, excepto el propio rectángulo, claro
Func WM_WINDOWPOSCHANGED($hWndGUI, $MsgID, $WParam, $LParam)
If $hWndGUI = $hRect_GUI Then Return $GUI_RUNDEFMSG
_RecuadraObjeto()
$hCtrlOld = -1
EndFunc
Func _CapturaClienteVentana()
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
Local $hVentana = WinGetHandle("[ACTIVE]")
Local $pos = _WinGetClientPos($hVentana)
Local $tam = WinGetClientSize($hVentana)
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $pos[0], $pos[1], $pos[0] $tam[0], $pos[1] $tam[1], $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
EndFunc
Func _WinGetClientPos($hVent)
Local $Pos[2]
Local $tpoint = DllStructCreate("int X; int Y")
DllStructSetData($tpoint, "X", 0)
DllStructSetData($tpoint, "Y", 0)
_WinAPI_ClientToScreen($hVent, $tpoint)
$Pos[0] = DllStructGetData($tpoint, "X")
$Pos[1] = DllStructGetData($tpoint, "Y")
return $Pos
EndFunc
Func _CapturaVentana()
; ALT PrintScreen de Windows no nos sirve porque no captura cursor
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
Local $hVentana = WinGetHandle("[ACTIVE]")
Local $rectV = WinGetPos($hVentana)
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", $rectV[0], $rectV[1], $rectV[0] $rectV[2], $rectV[1] $rectV[3], $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
EndFunc
Func _CapturaPantalla()
; No nos sirve el PrintScreen de Windows porque no podemos controlar el cursor
HotKeySet("{PRINTSCREEN}", "_Dummy") ; Para evitar llamadas recursivas y evitar el ScreenCopy de Windows
Local $concursor = _chkIsChecked($chkCursor)
Local $Hbit = _ScreenCapture_Capture("", 0, 0, @DesktopWidth, @DesktopHeight, $concursor)
_ProcesaCaptura($Hbit)
_CapturaReactivada()
EndFunc
Func _ProcesaCaptura($hBMP)
If _chkIsChecked($chkPNG) Then _GuardaBMPenPNG($hBMP)
If _chkIsChecked($chkPortapapeles) Then
_BMPaPortapapeles($hBMP)
If _chkIsChecked($chkPaint) Then
_PegaEnPaint()
Else
; Si no se pega en Paint mostramos un mensaje para que el usuario tenga alguna respuesta visual
MsgBox(8192 64, "Capturador", "Imagen copiada en el portapapeles.")
EndIf
EndIf
_WinAPI_DeleteObject($HBMP)
EndFunc
Func _BMPaPortapapeles($img_handler)
_ClipBoard_Open($GUI_Principal)
_ClipBoard_Empty()
_ClipBoard_SetDataEx($img_handler, $CF_BITMAP)
_ClipBoard_Close() ; ¡Hay que cerrar o lo dejamos bloqueado!
EndFunc
Func _PegaEnPaint()
Local $clase = "[CLASS:MSPaintApp]"
Run("mspaint.exe")
If Not WinWait($clase, "", 5) Then
MsgBox(16, "Imposible conectar con MsPaint", "Error conectando con MsPaint, proceso no encontrado.")
Else
If Not WinActive($clase) Then
WinActivate($clase)
WinWaitActive($clase)
EndIf
Send("^v") ; ctrl v = pegar
EndIf
EndFunc
Func _GuardaBMPenPNG($HBitmap)
Local $fich = FileSaveDialog("Guardan en...", @WorkingDir , "Imagen PNG (*.png)", 18, "captura.png", $GUI_Principal)
If @error Then
MsgBox(48, "Capturador", "Proceso cancelado. Imagen descartada.")
Else
_GDIPlus_Startup()
Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($HBitmap)
_GDIPlus_ImageSaveToFile($hImage, $fich)
_GDIPlus_ImageDispose($hImage)
;_WinAPI_DeleteObject($HBitmap)
_GDIPlus_ShutDown()
EndIf
EndFunc
Func _Marca_Rectan(ByRef $iX1, ByRef $iY1, ByRef $iX2, ByRef $iY2)
; Permite dibujar un rectángulo sobre la pantalla, devuelve TRUE si se acepta el rectángulo y FALSE
; si se cancela. Si TRUE, las coordenadas del rectángulo se devuelven en los parámetros.
Local $UserDLL = DllOpen("user32.dll")
Local $GdiDLL = DllOpen("gdi32.dll")
;Extensión de la que se hace zoom y multiplicador
Local $ZoomAncho = 50, $ZoomAlto = 50, $ZoomX = 3
; GUI transparente ocupando toda la pantalla para capturar el ratón
Local $GUI_fondo = GUICreate("Fondo", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP,BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
WinSetTrans($GUI_fondo, "", 1) ; ¡Si se pone totalmente transparente no captura el ratón!
GUISetCursor(3, 1) ;Cursor de cruz, sólo cambia para GUI actual
;Con _SetStdCursor($OCR_CROSS, $IDC_ARROW) podríamos cambiar el cursor global, pero no hace falta. En
;ese caso hay que restaurarlo con _RestoreDefaultSystemCursor()
GUISetState(@SW_SHOW)
; Rectángulo, es un GUI con un agujero en medio para "desrellenar" el rectángulo formado por su fondo
; El agujero será la región a capturar
$hRect_GUI = GUICreate("", 0, 0, 10, 10, $WS_POPUP, BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
GUISetBkColor(0xFF5500)
GUISetCursor(3, 1) ;Cursor de cruz
If Not $MODO_XP Then WinSetTrans($hRect_GUI, "", 180)
GUISetState(@SW_SHOWNOACTIVATE, $hRect_GUI)
; Esperamos primer click
Local $rect_aceptado = True
While 1
If _IsPressed("1B", $UserDLL) Then ; Escape
$rect_aceptado = False
ExitLoop
EndIf
If _IsPressed("01", $UserDLL) Then ExitLoop ;Botón izdo
Sleep(10)
WEnd
;Posición inicial
Local $aMouse_Pos = MouseGetPos()
$iX1 = $aMouse_Pos[0]
$iY1 = $aMouse_Pos[1]
;Creamos la ventana de zoom
Local $GuiZoomAncho = $ZoomAncho * $ZoomX
Local $GuiZoomAlto = $ZoomAlto * $ZoomX
Local $MidZoomW = $ZoomAncho / 2, $MidZoomH = $ZoomAlto / 2
Local $Xzoom = $iX1 4, $Yzoom = $iY1 25 ;posición del GUI
Local $XSrc = $iX1-$MidZoomW, $YSrc = $iY1-$MidZoomH ;posición de la zona a "zoomear"
Local $GUI_zoom = GUICreate("Zoom", $GuiZoomAncho, $GuiZoomAlto, $iX1 4, $iY1 25, _
BitOR($WS_POPUP, $WS_THICKFRAME), BitOr($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW, $WS_EX_STATICEDGE))
GUISetState(@SW_SHOWNOACTIVATE)
Local $DeskDC = _WinAPI_GetDC(0) ;DC de la ventana Desktop
Local $ZoomDC = _WinAPI_GetDC($GUI_zoom)
; Empezamos a dibujar el rectángulo a copiar
Local $ratX, $ratY, $lblX1, $lblX2, $lblY1, $lblY2, $tamX, $tamY
Local $oldRatX = $iX1, $oldRatY = $iY1 ;Para saber si el rectángulo ha cambiado
While _IsPressed("01", $UserDLL)
$aMouse_Pos = MouseGetPos()
$ratX = $aMouse_Pos[0]
$ratY = $aMouse_Pos[1]
; Actualización de zoom antes de mover su GUI para que vaya suave en Vista
If Not $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
If ($oldRatX <> $ratX OR $oldRatY <> $ratY) Then
;Sólo procesamos si el ratón se ha movido
$oldRatX = $ratX
$oldRatY = $ratY
If $iX1 < $ratX Then
$lblX1 = $iX1
$lblX2 = $ratX
Else
$lblX1 = $ratX
$lblX2 = $iX1
EndIf
If $iY1 < $ratY Then
$lblY1 = $iY1
$lblY2 = $ratY
Else
$lblY1 = $ratY
$lblY2 = $iY1
EndIf
$tamX = $lblX2 - $lblX1 1
$tamY = $lblY2 - $lblY1 1
ToolTip($tamX & " x " & $tamY, $lblX2 4, $lblY2 4, Default, Default, 4)
_DibujaRectan($lblX1, $lblY1, $tamX, $tamY)
; Movemos la ventana de zoom para que no se salga por el borde
If ($lblX2 4 $GuiZoomAncho < @DesktopWidth) Then
$Xzoom = $lblX2 4
Else
$Xzoom = $lblX1-20-$GuiZoomAncho
EndIf
If ($lblY2 30 $GuiZoomAlto < @DesktopHeight) Then
$Yzoom = $lblY2 30
Else
$Yzoom = $lblY1-20-$GuiZoomAlto
EndIf
WinMove($GUI_zoom, "", $Xzoom, $Yzoom)
; No hacemos zoom de zonas fuera de pantalla, aunque el ratón esté en el borde
If $ratX < $MidZoomW Then
$XSrc = 0
ElseIf $ratX $MidZoomW > @DesktopWidth Then
$XSrc = @DesktopWidth-$ZoomAncho
Else
$XSrc = $ratX-$MidZoomW
EndIf
If $ratY < $MidZoomH Then
$YSrc = 0
ElseIf $ratY $MidZoomH > @DesktopHeight Then
$YSrc = @DesktopHeight-$ZoomAlto
Else
$YSrc = $ratY-$MidZoomH
EndIf
EndIf
;En XP es más suave copiar después de mover
If $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
Sleep(10)
WEnd
; Dejamos ajustar el recuadro de captura, se mueve con los cursores y se redimensiona con CTRL cursores
; Para finalizar se pulsa ENTER
; Tecla CONTROL = "11"
GUISetCursor(4, 1, $GUI_fondo) ; Cursor con interrogante, en fondo...
GUISetCursor(4, 1, $hRect_GUI) ; ...y en recuadro
;Ahora el control de si ha cambiado el rectángulo lo tenemos sobre la coordenada final
Local $controlX = $lblX2
Local $controlY = $lblY2
While (Not _IsPressed("0D", $UserDLL)) AND $rect_aceptado ; Hasta que se pulse ENTER o se cancele
If _IsPressed("01", $UserDLL) Then ; Botón izquierdo de ratón
; Esperamos a que suelte el botón
_EsperaKeyOff("01", $UserDLL)
GUISetState(@SW_HIDE, $GUI_zoom)
SplashTextOn("Ayuda", "Mover: cursores" & @LF & "Tamaño: CTRL cursores" & @LF & "Aceptar: ENTER" & _
@LF & "Cancelar: ESC" & @LF & @LF & "(Click para continuar)",170,100,-1,-1,5,"",9,800)
_EsperaKeyOnOff("01", $UserDLL)
SplashOff()
GUISetState(@SW_SHOWNOACTIVATE, $GUI_zoom)
EndIf
If _IsPressed("25", $UserDLL) Then ; Cursor izquierda
If Not _IsPressed("11", $UserDLL) Then $lblX1 -= 1
$lblX2 -= 1
ElseIf _IsPressed("27", $UserDLL) Then ; Cursor derecha
If Not _IsPressed("11", $UserDLL) Then $lblX1 = 1
$lblX2 = 1
EndIf
If _IsPressed("26", $UserDLL) Then ; Cursor arriba
If Not _IsPressed("11", $UserDLL) Then $lblY1 -= 1
$lblY2 -= 1
ElseIf _IsPressed("28", $UserDLL) Then ; Cursor abajo
If Not _IsPressed("11", $UserDLL) Then $lblY1 = 1
$lblY2 = 1
EndIf
If _IsPressed("1B", $UserDLL) Then ; Escape
$rect_aceptado = False
EndIf
if $lblX2 <= $lblX1 Then $lblX2 = $lblX1
if $lblY2 <= $lblY1 Then $lblY2 = $lblY1
If ($controlX <> $lblX2 OR $controlY <> $lblY2) Then
$controlX = $lblX2
$controlY = $lblY2
$tamX = $lblX2 - $lblX1 1
$tamY = $lblY2 - $lblY1 1
ToolTip($tamX & " x " & $tamY, $lblX2 4, $lblY2 4, Default, Default, 4)
_DibujaRectan($lblX1, $lblY1, $tamX, $tamY)
EndIf
$aMouse_Pos = MouseGetPos()
$ratX = $aMouse_Pos[0]
$ratY = $aMouse_Pos[1]
; Actualización de zoom antes de mover su GUI para que vaya suave en Vista
If Not $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
If ($oldRatX <> $ratX OR $oldRatY <> $ratY) Then
; Sólo movemos el Gui de zoom si se mueve el ratón
$oldRatX = $ratX
$oldRatY = $ratY
If ($ratX 4 $GuiZoomAncho < @DesktopWidth) Then
$Xzoom = $ratX 4
Else
$Xzoom = $ratX-4-$GuiZoomAncho
EndIf
If ($ratY 30 $GuiZoomAlto < @DesktopHeight) Then
$Yzoom = $ratY 30
Else
$Yzoom = $ratY-35-$GuiZoomAlto
EndIf
WinMove($GUI_zoom, "", $Xzoom, $Yzoom)
; No hacemos zoom de zonas fuera de pantalla, aunque el ratón esté en el borde
If $ratX < $MidZoomW Then
$XSrc = 0
ElseIf $ratX $MidZoomW > @DesktopWidth Then
$XSrc = @DesktopWidth-$ZoomAncho
Else
$XSrc = $ratX-$MidZoomW
EndIf
If $ratY < $MidZoomH Then
$YSrc = 0
ElseIf $ratY $MidZoomH > @DesktopHeight Then
$YSrc = @DesktopHeight-$ZoomAlto
Else
$YSrc = $ratY-$MidZoomH
EndIf
EndIf
;En XP es más suave copiar después de mover
If $MODO_XP Then
_WAPI_StretchBlt($ZoomDC, 0, 0, $GuiZoomAncho, $GuiZoomAlto, _
$DeskDC, $XSrc, $YSrc, $ZoomAncho, $ZoomAlto, $SRCCOPY, $GdiDLL)
EndIf
Sleep(20)
Wend
ToolTip("")
;Posición final
$iX1 = $lblX1
$iY1 = $lblY1
$iX2 = $lblX1 $tamX
$iY2 = $lblY1 $tamY
; Liberamos recursos bloqueados: handlers, dlls, Device Contexts, GUIs...
_WinAPI_ReleaseDC(0, $DeskDC)
_WinAPI_ReleaseDC($GUI_zoom, $ZoomDC)
GUIDelete($hRect_GUI)
GUIDelete($GUI_fondo)
GUIDelete($GUI_zoom)
DllClose($UserDLL)
DllClose($GdiDLL)
;_RestoreDefaultSystemCursor()
Sleep(10) ; Damos tiempo a que se reactive la ventana que había antes de nuestra capa transparente
return $rect_aceptado
EndFunc
; En _DibujaRectan pasamos (x0,y0,ancho,alto) de la zona de captura, el rectángulo hay que dibujarlo por fuera
Func _DibujaRectan($x, $y, $w, $h)
Local $Todo_Rgn, $Agujero_Rgn, $Rectan_Rgn
Local $rX2 = $w ($recAncho*2), $rY2 = $h ($recAncho*2) ;coordenadas finales del GUI (captura rectángulo)
$Todo_Rgn = _WinAPI_CreateRectRgn(0, 0, $rX2, $rY2)
$Agujero_Rgn = _WinAPI_CreateRectRgn($recAncho, $recAncho, $w $recAncho, $h $recAncho)
$Rectan_Rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_CombineRgn($Rectan_Rgn, $Todo_Rgn, $Agujero_Rgn, $RGN_DIFF)
_WinAPI_SetWindowRgn($hRect_GUI, $Rectan_Rgn)
WinMove($hRect_GUI, "", $x-$recAncho, $y-$recAncho, $rX2, $rY2)
WinSetOnTop($hRect_GUI, "", 1) ; Por si aparecen nuevas ventanas pop-up, recolocamos delante
EndFunc
Func _WAPI_StretchBlt($DestDC, $DestX, $DestY, $DestW, $DestH, $OrigDC, $OrigX, $OrigY, $OrigW, $OrigH, $RasterOP, $GdiDLL="GDI32.dll")
DllCall($GdiDLL, "int","StretchBlt", "int",$DestDC, "int",$DestX, "int",$DestY, "int",$DestW, "int",$DestH, _
"int",$OrigDC, "int",$OrigX, "int",$OrigY, "int",$OrigW, "int",$OrigH, "long",$RasterOP)
EndFunc
Func _chkIsChecked($chk)
return BitAnd(GUICtrlRead($chk),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Func _EsperaKeyOn($keycode, $UserDLL='user32.dll')
;Espera que se presione esta tecla (o botón de ratón)
While Not _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
EndFunc
Func _EsperaKeyOff($keycode, $UserDLL='user32.dll')
;Espera a que esta tecla (o botón de ratón) no esté presionada
While _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
EndFunc
Func _EsperaKeyOnOff($keycode, $UserDLL='user32.dll')
;Espera a que esta tecla (o botón de ratón) se presione y suelte
While Not _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
While _IsPressed($keycode, $UserDLL)
Sleep(10)
WEnd
EndFunc
Func _SetStdCursor($i_idc_cursor, $i_cursor)
Local $newhcurs, $lResult
$newhcurs = DllCall("user32.dll", "hwnd", "LoadCursorA", "hwnd", 0, 'int', $i_idc_cursor)
If Not @error Then
$lResult = DllCall("user32.dll", "int", "SetSystemCursor", "int", $newhcurs[0], "int", $i_cursor)
If @error Then
MsgBox(0, "Error", "Failed SetSystemCursor")
EndIf
Else
MsgBox(0, "Error", "Failed LoadCursor")
EndIf
EndFunc
Func _RestoreDefaultSystemCursor()
Const $SPI_SETCURSORS = 0x57
DllCall("user32.dll", "int", "SystemParametersInfo", "int", $SPI_SETCURSORS, "int", 0, "int", 0, "int", 0)
EndFunc
Func _Dummy()
; No hace nada. Se utiliza para dejar sin función una tecla hotkey, tanto para el programa como para Windows
return
EndFunc
Func _AnimTrans($hWnd, $Desde, $Hasta, $Paso = 5, $Sleep = 5)
If $Desde > $Hasta Then $Paso = -$Paso
For $i = $Desde To $Hasta Step $Paso
WinSetTrans($hWnd, '', $i)
Sleep($Sleep)
Next
WinSetTrans($hWnd, '', $Hasta) ; Por si el paso del bucle no nos deja en el límite exacto
EndFunc
;================================================= ==============================
; Function Name: _IsAeroEnable
; Description: Checks if aero is enabled
; Parameter(s): None
; Requirement(s): dwmapi.dll, Windows Vista
; Return Value(s): 0 If disabled, 1 if enabled
; Author(s): GtaSpider
; Modificado por Ximo: No devolvía bien el valor (bug de AutoIt devolviendo 0)
;================================================= ==============================
Func _IsAeroEnable()
Local $asDll = DllCall("dwmapi.dll","int","DwmIsCompositionEnable d","str","")
If @error Then Return SetError(@error,0,False)
Return Asc($asDll[1]) = 1
EndFunc
Downloads
como deve ter aparecido aqueles emoticons....
download:[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Sabe oq ta em vermelho?parece q e sugestao pa qm crior o programa e so editar la...
o codigo n e meu n so to colocando aki pra quem quiser ai.
otros mirrors:
MultiUpload:Multiupload.com - upload your files to multiple file hosting sites!
2shared:[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Megauupload:[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Ou:
Citação:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] Multiupload.com - upload your files to multiple file hosting sites! RapidShare: 1-CLICK Web hosting - Easy Filehosting 100% [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] MEGAUPLOAD - The leading online storage and file delivery service [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] Deposit Files 100% [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] Hotfile.com: One click file hosting 87% [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] zSHARE - Capturador.rar 100% [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] Capturador.rar - Powered by Multiupload.com - BADONGO [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] Download Capturador.rar for free on uploading.com [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] 2shared - download Capturador.rar [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem] |
dps eu do uma ajeitada aki
12/19/2017, 18:48 por MrViSiBLe
» MU LIVE SEASON 2 | INAUGURA DOMINGO 17/09
9/2/2017, 13:51 por MrViSiBLe
» Sorteio Perfumes - Forum ViSiBLe
8/25/2017, 08:27 por Convidado
» Novas Vagas Para Staff
8/24/2017, 15:20 por MrViSiBLe
» CSGO [Internal/External] Multi-Hack AIMBOT + TRIGGERBOT + ESP + BHOP
8/22/2017, 03:04 por MrViSiBLe
» REB00T 31/07/2017
8/22/2017, 03:01 por MrViSiBLe
» [CS:GO] HENTAIWARE 19/08/2017 | LEGIT | RAGE | ESP | GLOVES | FACEIT |
8/22/2017, 02:58 por MrViSiBLe
» DeviceCheats CS:GO Gratuito 31/07/2017
8/22/2017, 02:56 por MrViSiBLe
» [CS:GO] External - Glow ESP | Triggerbot | RCS | BunnyHop | Noflash
8/22/2017, 02:53 por MrViSiBLe
» [CS:GO] GLOW ESP 21/08/2017
8/22/2017, 02:49 por MrViSiBLe