AM电脑吧 - Win10精简版系统_Win11精简版_Win7旗舰版

Yes
查看: 7422|回复: 8
收起左侧

[其它] 全AU3鼠标截图 工具——源码

[复制链接]
ampc8110

签到天数: 3 天

[LV.2]二兆带宽

id fuldho 发表于 2012-08-26 08:02:53
#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)

评分

参与人数 1硬盘 +10 收起 理由
ampc85 水铃 + 10 论坛有年老会更精彩!

本文地址: https://www.ampc8.com/thread-8531-1-1.html
上一篇:监控u盘并清空u盘
下一篇:能ping通不能上网! 不是一般的!
回复

举报

ampc839210

签到天数: 271 天

[LV.8]八秒开机

id trhy1234567 发表于 2016-10-28 19:54:08
值得学习,感谢分享
回复

举报

ampc826036

签到: Lazy

id zhb 发表于 2015-02-07 10:11:36
下载测试一下
回复

举报

ampc822327

签到天数: 2 天

[LV.1]一个记事本

id nqawen 发表于 2014-08-19 07:39:29
顶起来
回复

举报

ampc88884

签到天数: 1 天

[LV.1]一个记事本

id zhaozhigang 发表于 2013-10-09 09:40:27
收场了。。。
回复

举报

ampc810336

签到天数: 3776 天

[LV.Master]顶级配置

id leo 发表于 2013-07-10 08:32:04
收藏备用。
回复

举报

ampc85191

签到天数: 8 天

[LV.3]三流显示器

id xz00311 发表于 2013-07-09 13:47:59
看一下是什么先
回复

举报

ampc810606

签到: Lazy

id xuyuanjun 发表于 2013-02-08 09:59:13
这个支持触摸么?
回复

举报

ampc85

签到: Lazy

id 水铃 发表于 2012-08-26 09:02:51
鼠标截图 工具不错,有时间研究一下。谢谢年老的分享。
回复

举报

您需要登录后才可以回帖 登录 | 验证注册

Powered by AMpc8.Com (晋ICP备13003365号ghs 晋公网安备 14090202000112号 |GMT+8, 2024/3/29 16:05 |
快速回复 返回顶部 返回列表