找回密码
 加入
搜索
查看: 3220|回复: 12

放大镜增加十字架做指针问题

[复制链接]
发表于 2008-12-12 06:47:17 | 显示全部楼层 |阅读模式
想了2天都没搞定   只好上来求高手帮忙了
下面是我修改的的放大镜+读取坐标和颜色的代码
目前的的情况如(图1)
出现状况没看到鼠标指的地方

我想把
指针点的地方显示在(图2)十字架中心   (图2是用画图软件做成的)

请问 代码要怎么修改 请高手帮改一下  如果可以的话 指出错误与修改原理 谢谢
Global $SRCCOPY = 0x00CC0020 
Global $leave = 0 

HotKeySet("","leave") 
HotKeySet("`","shijian")
GUICreate("主窗口", 195 ,230)
$MyhWnd = WinGetHandle("主窗口")
GuiCtrlCreateLabel("相对X坐标:", 5, 215)
$X=GuiCtrlCreateInput("0000", 63, 215, 35, 20)
GuiCtrlCreateLabel("相对Y坐标:", 102, 215)
$Y=GuiCtrlCreateInput("0000", 165, 215, 35, 20)
GuiCtrlCreateLabel("16位颜色代码:", 5, 195)
$S=GuiCtrlCreateInput("000000", 90, 193, 80, 20)

WinSetOnTop("主窗口","",1)
GUISetState()
While Not $leave 
  Sleep(25) 
   MAG() 
WEnd 

Func MAG() 
  $MyHDC = DLLCall("user32.dll","int","GetDC","hwnd",$MyhWnd) 
  If @error Then Return 
  $DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0) 
  If Not @error Then 
     $xy = MouseGetPos() 
     If Not @error Then 
        $l = $xy[0]-19 
        $t = $xy[1]-19 
        DLLCall("gdi32.dll","int","StretchBlt","int",$MyHDC[0],"int",0,"int",0,"int",195,"int",190,"int",$DeskHDC[0],"int",  $l,"int",$t,"int",19,"int",19,"long",$SRCCOPY) 
     EndIf 
     DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0) 
  EndIf 
  DLLCall("user32.dll","int","ReleaseDC","int",$MyHDC[0],"hwnd",$MyhWnd) 
    Sleep(25) 
   

AutoItSetOption ("PixelCoordMode",0)  ;;设置用于象素函数的坐标参照,相对当前激活窗口的坐标位置 
AutoItSetOption ("MouseCoordMode",0);;设置用于鼠标函数的坐标参照,可以是相对当前激活窗口的坐标位置
$array1=MouseGetPos();;
$var = PixelGetColor($array1[0],$array1[1]);;
GUICtrlSetData($X,$array1[0])
GUICtrlSetData($Y,$array1[1]);;
GUICtrlSetData($S,"0x"&Hex($var, 6));;
GUICtrlSetBkColor ($S,$var )
EndFunc 

Func leave() 
  $leave = 1 
EndFunc 
Func shijian()
sleep(50)

                  IniWrite("C:\Documents and Settings\User\桌面\suzhi.ini","dizhi","x",$array0[0])
                  IniWrite("C:\Documents and Settings\User\桌面\suzhi.ini","dizhi","y",$array1[1])
                  IniWrite("C:\Documents and Settings\User\桌面\suzhi.ini","dizhi","16wys","0x"&Hex($var, 6))
MsgBox(0,0,"保存成功,请进行下步操作")
Exit

EndFunc


[ 本帖最后由 askask150 于 2008-12-15 00:30 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 -2 收起 理由
sanhen -2 标题模糊

查看全部评分

发表于 2008-12-12 08:40:18 | 显示全部楼层
牛人,我都不会做呢,只会些简单的东西
发表于 2008-12-12 10:16:03 | 显示全部楼层

Global $pos[2], $var

Opt("PixelCoordMode", 0) ;;设置用于象素函数的坐标参照,相对当前激活窗口的坐标位置
Opt("MouseCoordMode", 0);;设置用于鼠标函数的坐标参照,可以是相对当前激活窗口的坐标位置

HotKeySet("", "leave")
HotKeySet("`", "shijian")
$hwd = GUICreate("主窗口", 200, 240, 0, 0, BitXOR(0x80880000, 0x00800000), 0x00000080 + 0x00000008)
GUICtrlCreateLabel("坐标颜色代码:", 12, 203, 90, 15)
$S = GUICtrlCreateInput("", 102, 201, 80, 18)
GUICtrlCreateLabel("相对X坐标:", 3, 223, 66, 16)
$X = GUICtrlCreateInput("", 63, 220, 30, 18)
GUICtrlCreateLabel("相对Y坐标:", 98, 223, 66, 16)
$Y = GUICtrlCreateInput("", 160, 220, 35, 18)

GUISetState()

While 1
        Sleep(25)
        MAG()
WEnd

Func MAG()
        $MyHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $hwd)
        If @error Then Return
        $DeskHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
        If Not @error Then
                $pos = MouseGetPos()
                If Not @error Then
                        DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", 200, "int", 200, "int", $DeskHDC[0], "int", $pos[0] - 25, "int", $pos[1] - 25, "int", 50, "int", 50, "long", 0x00CC0020)
                EndIf
                DllCall("user32.dll", "int", "ReleaseDC", "int", $DeskHDC[0], "hwnd", 0)
        EndIf
        DllCall("user32.dll", "int", "ReleaseDC", "int", $MyHDC[0], "hwnd", $hwd)
        Sleep(25)

        $var = PixelGetColor($pos[0], $pos[1]);;
        GUICtrlSetData($X, $pos[0])
        GUICtrlSetData($Y, $pos[1]);;
        GUICtrlSetData($S, "0x" & Hex($var, 6));;
        GUICtrlSetBkColor($S, $var)
EndFunc   ;==>MAG

Func leave()
        Exit
EndFunc   ;==>leave
Func shijian()
        FileWrite(@DesktopDir & '\MOUSEPOS.LOG', @CRLF & '记录生成时间:' & @YEAR & '年' & @MON & '月' & @MDAY &'日' & _
                        '  ' & @HOUR & '时' & @MIN & '分' & @SEC & '秒' & @CRLF & '鼠标X坐标:' & $pos[0] & @CRLF & _
                        '鼠标Y坐标:' & $pos[1] & @CRLF & '颜色代码:' & "0x" & Hex($var, 6) & @CRLF)
        If MsgBox(262212, '选择', "保存成功,是否继续?") = 6 Then Return
        Exit
EndFunc   ;==>shijian

评分

参与人数 1金钱 +5 收起 理由
askask150 + 5 谢谢 雄师大哥提供代码

查看全部评分

发表于 2008-12-12 10:18:20 | 显示全部楼层
如要移动显示窗口,点一下窗口然后--ALT+SPACE M 方向键
 楼主| 发表于 2008-12-13 00:42:30 | 显示全部楼层
老大   你改的太牛了  

$pos[0] - 25, $pos[1] - 25            
这两个相对偏移是怎么算出来的呢????

$pos[2]   这是用来做什么的 没见你调用啊??

图片十字架该怎么做?
我想把一张十字图片放进窗口弄透明  
结果十字图片被“放大”的窗口|盖住了  
并且把整个窗口透明了
有没有把控件放在窗口内的顶层的这个函数  
把十字图片放在顶层应该可以了吧
或者把那显示图片放在下面

[ 本帖最后由 askask150 于 2008-12-13 04:16 编辑 ]
发表于 2008-12-13 21:27:29 | 显示全部楼层
自己画一个十字线上去并置顶显示应该可以出十字线了,$pos[2]是定义数组的大小的,[0]是一个,[1]是一个,已经用完了!-25是我估计那个位置是准的就编进去的!
 楼主| 发表于 2008-12-14 05:01:15 | 显示全部楼层
原帖由 liongodmien 于 2008-12-13 21:27 发表
自己画一个十字线上去并置顶显示应该可以出十字线了,$pos[2]是定义数组的大小的,[0]是一个,[1]是一个,已经用完了!-25是我估计那个位置是准的就编进去的!

置顶的函数是什么??
具体该怎么做?
查了帮助 好像没这个函数

[ 本帖最后由 askask150 于 2008-12-14 08:32 编辑 ]
发表于 2008-12-14 18:28:17 | 显示全部楼层
拷回去看看,以后应该能用得着!
发表于 2008-12-14 19:16:27 | 显示全部楼层
                        $csx=50
                        $csy=50
                        $l = $l - $csx/2
                        $t = $t - $csy/2
                        ;前段:显示的位置,显示的大小区域;后段:截屏的位置,截屏的大小区域
                        ;两个大小区域的比例就是放大比例
                        DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 330, "int", 10, "int", 100, "int", 100, "int", $DeskHDC[0], "int", $l, "int", $t, "int", $csx, "int", $csy, "long", $SRCCOPY)
 楼主| 发表于 2008-12-15 00:31:18 | 显示全部楼层
谢谢楼上的大哥解释
发表于 2008-12-15 21:28:56 | 显示全部楼层
程序不错,收藏了
发表于 2009-2-7 12:13:07 | 显示全部楼层
程序不错,收藏了

具体该怎么画一个十字线上去并置顶显示 ???
发表于 2017-1-21 14:14:40 | 显示全部楼层
如果在放大镜区域内能有鼠标指示位置就好了.....
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 05:46 , Processed in 0.087286 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表