#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=6.ico
#AutoIt3Wrapper_outfile=jietu.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=Am电脑吧
#AutoIt3Wrapper_Res_Description=截图工具
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=@copyright 2012
#AutoIt3Wrapper_Res_Field=CompanyName|www.ampc8.com
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <GDIPlus.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <GUIConstantsEx.au3>
#include <StructureConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>
Global _
$MyDocsFolder1 = @MyDocumentsDir, _
$MyDocsFolder2 = @MyDocumentsDir, _
$MyDocsFolder3 = @MyDocumentsDir, _
$MyDocsFolder4 = @MyDocumentsDir, _
$A = 0, $_B = 0, $C = 0, $D = 0, $hBitmap, _
$Untitled = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
Global $HHook, $WM_LBUTTON_TEST = 0, $START_X, $START_Y, $MouseGui, _
$LF_RI_SIZE = 0, $TO_BO_SIZE = 0, $IMGE_L = 0, $IMGE_T = 0, $IMGE_W = 0 _
, $IMGE_H = 0, $hBitmap
$GUI = GUICreate("鼠标截图 V1.0", 250, 100, @DesktopWidth / 3, @DesktopHeight / 3)
$Button_1 = GUICtrlCreateButton("开始截图", 10, 8, 105, 60)
$Button_2 = GUICtrlCreateButton("保存图像", 135, 8, 105, 60)
$hStatus = _GUICtrlStatusBar_Create($GUI, -1, " AM电脑吧", -1, 0x00000000)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $Button_1
If ($hBitmap) Then _WinAPI_DeleteObject($hBitmap)
$hBitmap = Mouse_Capture($GUI)
;MsgBox(64,"提示:","图像已截取,请选择保存图像。如要重新截取,请选择开始截图!")
Case $msg = $Button_2
if ($hBitmap) Then SaveImage($hBitmap, $GUI)
EndSelect
WEnd
Func SaveImage($hBitmap, $GUI)
GUISetState(@SW_HIDE, $GUI)
$GUI2 = GUICreate("保存图像", 250, 100, @DesktopWidth / 3, @DesktopHeight / 3)
GUISetFont(12, 400, 0, "MS Sans Serif")
GUICtrlCreateGroup("图像格式", 10, 10, 230, 80)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Button_3 = GUICtrlCreateButton("BMP", 16, 33, 50, 50)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Button_4 = GUICtrlCreateButton("PNG", 72, 33, 50, 50)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Button_5 = GUICtrlCreateButton("GIF", 128, 33, 50, 50)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Button_6 = GUICtrlCreateButton("JPG", 184, 33, 50, 50)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW, $GUI2)
GUISwitch($GUI2)
$Save_error = True
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_3
$var = FileSaveDialog("选择一个名字.", $MyDocsFolder1, "IMAGE (*.BMP)", 2, $Untitled & $A)
$Save_error = @error
If Not ($Save_error) Then
$MyDocsFolder1 = ""
$Split = StringSplit($var, "\")
For $J = 1 To $Split[0] - 1
$MyDocsFolder1 &= $Split[$J]
$MyDocsFolder1 &= "\"
Next
$A += 1
If StringUpper(StringRight($var, 4)) <> ".BMP" Then $var &= ".BMP"
EndIf
ExitLoop
Case $msg = $Button_4
$var = FileSaveDialog("选择一个名字.", $MyDocsFolder2, "IMAGE (*.PNG)", 2, $Untitled & $_B)
$Save_error = @error
If Not ($Save_error) Then
$MyDocsFolder2 = ""
$Split = StringSplit($var, "\")
For $J = 1 To $Split[0] - 1
$MyDocsFolder2 &= $Split[$J]
$MyDocsFolder2 &= "\"
Next
$_B += 1
If StringUpper(StringRight($var, 4)) <> ".PNG" Then $var &= ".PNG"
EndIf
ExitLoop
Case $msg = $Button_5
$var = FileSaveDialog("选择一个名字.", $MyDocsFolder3, "IMAGE (*.GIF)", 2, $Untitled & $C)
$Save_error = @error
If Not ($Save_error) Then
$MyDocsFolde3 = ""
$Split = StringSplit($var, "\")
For $J = 1 To $Split[0] - 1
$MyDocsFolder3 &= $Split[$J]
$MyDocsFolder3 &= "\"
Next
$C += 1
If StringUpper(StringRight($var, 4)) <> ".GIF" Then $var &= ".GIF"
EndIf
ExitLoop
Case $msg = $Button_6
$var = FileSaveDialog("选择一个名字.", $MyDocsFolder4, "IMAGE (*.JPG)", 2, $Untitled & $D)
$Save_error = @error
If Not ($Save_error) Then
$MyDocsFolde4 = ""
$Split = StringSplit($var, "\")
For $J = 1 To $Split[0] - 1
$MyDocsFolder4 &= $Split[$J]
$MyDocsFolder4 &= "\"
Next
$D += 1
If StringUpper(StringRight($var, 4)) <> ".JPG" Then $var &= ".JPG"
EndIf
ExitLoop
EndSelect
WEnd
If Not ($Save_error) Then
_GDIPlus_Startup()
$Bitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_GDIPlus_ImageSaveToFile($Bitmap, $var)
_WinAPI_DeleteObject($Bitmap)
_GDIPlus_Shutdown()
EndIf
GUIDelete($GUI2)
GUISetState(@SW_SHOW, $GUI)
GUISwitch($GUI)
EndFunc ;==>SaveImage
Func Mouse_Capture($GUI = 0, $BORDER_LF_RI_SIZE = 3, $BORDER_TO_BO_SIZE = 3, $BORDCOLOR = 0xFF0000)
$LF_RI_SIZE = $BORDER_LF_RI_SIZE ;Global $LF_RI_SIZE,$TO_BO_SIZE
$TO_BO_SIZE = $BORDER_TO_BO_SIZE ;Global $LF_RI_SIZE,$TO_BO_SIZE
If $GUI <> 0 Then GUISetState(@SW_HIDE, $GUI)
$MouseGui = GUICreate("", 1, 1, 1, 1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS), _
BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
GUISetBkColor($BORDCOLOR, $MouseGui)
$RegMouseProc = DllCallbackRegister("LowLevelMouseProc", "long", "int;wparam;lparam")
$HMod = _WinAPI_GetModuleHandle(0)
$HHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($RegMouseProc), $HMod)
While 1
If $WM_LBUTTON_TEST = 2 Then
$hBitmap = BitmapCreate()
If $GUI <> 0 Then GUISetState(@SW_SHOW, $GUI)
If $GUI <> 0 Then GUISwitch($GUI)
_WinAPI_UnhookWindowsHookEx($HHook)
DllCallbackFree($RegMouseProc)
$WM_LBUTTON_TEST = 0
ExitLoop
EndIf
WEnd
Return $hBitmap
EndFunc ;==>Mouse_Capture
Func LowLevelMouseProc($nCode, $wParam, $lParam)
If $nCode < 0 Then _
Return _WinAPI_CallNextHookEx($HHook, $nCode, $wParam, $lParam)
Select
Case $wParam == $WM_LBUTTONDOWN And $WM_LBUTTON_TEST = 0
$POINT = DllStructCreate($tagPOINT, $lParam)
$START_X = DllStructGetData($POINT, 1)
$START_Y = DllStructGetData($POINT, 2)
$WM_LBUTTON_TEST = 1
Return 1
Case $wParam == $WM_MOUSEMOVE And $WM_LBUTTON_TEST = 1
$POINT = DllStructCreate($tagPOINT, $lParam)
$MOVE_X = DllStructGetData($POINT, 1)
$MOVE_Y = DllStructGetData($POINT, 2)
If $START_X >= $MOVE_X Then
$L = $MOVE_X
$R = $START_X
Else
$R = $MOVE_X
$L = $START_X
EndIf
If $START_Y >= $MOVE_Y Then
$B = $START_Y
$T = $MOVE_Y
Else
$T = $START_Y
$B = $MOVE_Y
EndIf
$W = $R - $L
$H = $B - $T
;Global $IMGE_L = 0 , $IMGE_T = 0,$IMGE_W = 0 _$IMGE_H = 0
Global $IMGE_L = ($L + $LF_RI_SIZE), $IMGE_T = ($T + $TO_BO_SIZE), $IMGE_W = $W, $IMGE_H = $H
DrawGuiRgn($LF_RI_SIZE, $TO_BO_SIZE, $W, $H, $L, $T) ;Global $LF_RI_SIZE $TO_BO_SIZE
Case $wParam == $WM_LBUTTONUP And $WM_LBUTTON_TEST = 1
GUIDelete($MouseGui)
$WM_LBUTTON_TEST = 2
Return 1
EndSelect
Return _WinAPI_CallNextHookEx($HHook, $nCode, $wParam, $lParam)
EndFunc ;==>LowLevelMouseProc
Func DrawGuiRgn($BORDER_LF_RI_SIZE, $BORDER_TO_BO_SIZE, $WIDTH, $HEIGHT, $LEFT, $TOP)
$W = $BORDER_LF_RI_SIZE * 2 + $WIDTH
$H = $BORDER_TO_BO_SIZE * 2 + $HEIGHT
_WinAPI_SetWindowPos($MouseGui, 0, $LEFT, $TOP, $LEFT + $W, $TOP + $H, 0)
Sleep(20)
$hREG1 = _WinAPI_CreateRectRgn(0, 0, $W, $H)
$hREG2 = _WinAPI_CreateRectRgn($BORDER_LF_RI_SIZE, $BORDER_TO_BO_SIZE, $BORDER_LF_RI_SIZE + $WIDTH, $BORDER_TO_BO_SIZE + $HEIGHT)
$hREG3 = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_CombineRgn($hREG3, $hREG1, $hREG2, $RGN_DIFF)
_WinAPI_DeleteObject($hREG1)
_WinAPI_DeleteObject($hREG2)
_WinAPI_SetWindowRgn($MouseGui, $hREG3)
_WinAPI_DeleteObject($hREG3)
GUISetState(@SW_SHOW, $MouseGui)
EndFunc ;==>DrawGuiRgn
Func BitmapCreate()
;Global $IMGE_L = 0 , $IMGE_T = 0,$IMGE_W = 0 , $IMGE_H = 0
$DC = _WinAPI_GetDC(0)
$CompatibleDC = _WinAPI_CreateCompatibleDC($DC)
$hBitmap = _WinAPI_CreateCompatibleBitmap($DC, $IMGE_W, $IMGE_H)
_WinAPI_SelectObject($CompatibleDC, $hBitmap)
_WinAPI_BitBlt($CompatibleDC, 0, 0, $IMGE_W, $IMGE_H, $DC, $IMGE_L, $IMGE_T, $SRCCOPY)
Return $hBitmap
EndFunc ;==>BitmapCreate
成品:
jietu.rar
(361.08 KB, 下载次数: 415)
|