找回密码
 加入
搜索
楼主: gapkiller

[AU3基础] 如何指定message box的坐标

 火... [复制链接]
发表于 2010-3-13 17:37:39 | 显示全部楼层
不是把  这么好  呵呵
发表于 2010-3-13 17:37:53 | 显示全部楼层
内置MsgBox函数实际是调用了User32.dll中的MessageBoxW函数,这个API的原型中没有哪个参数是指定坐标用的。 ...
pusofalse 发表于 2010-3-13 00:48



    P大,你这几天干嘛去拉?我还在等你修正版的SetupApi.au3呀!!
发表于 2010-3-13 21:07:37 | 显示全部楼层
回复 14# gapkiller
我的理解:当鼠标指针经过message 窗口时,第二个窗口会在中间  貌似是激活作用!
发表于 2010-3-15 13:20:08 | 显示全部楼层
回复 14# gapkiller

因为可能会注册多个计时器,每个计时器管司不同的功能,而它们的回调函数地址可能都是一样的,IdEvent的作用就是一个计时器标识,用来区分多个计时器;如果一个计时器对应一个回调函数,那么除了可以传递到KillTimer销毁外,IdEvent将没有多大意义。
IdEvent的值取决于SetTimer函数,如果SetTimer函数执行失败,回调函数将不会被调用;如果成功,再看SetTimer的第一个参数hWnd(计时器关联到的窗口句柄),如果此参数为NULL,SetTimer将返回一个计时器标识,也就是IdEvent的值;如果设为一个有效的窗口句柄,那么函数返回非零,计时器标识采用SetTimer函数的第2个参数IDEvent的值。
在13#的例子中,SetTimer的hWnd参数为0,说明TimerDll[0]是一个有效的Timer标识。

回调函数中,每个参数的含义如下:
$hwnd - 发生计时器事件的窗口句柄,同SetTimer hWnd参数。
$uiMsg - $WM_TIMER
$idEvent - 计时器标识。
$dwTime - 系统自启动后所运行的时间,单位ms。

参考:SetTimer

评分

参与人数 2金钱 +90 收起 理由
gapkiller + 40 很强大, 看得很迷糊
afan + 50 学习专业语法~

查看全部评分

发表于 2010-3-18 10:28:20 | 显示全部楼层
是不是message box 里的函数, 可以., 就象程序函数,从而画出坐标.hahaha
shit.
发表于 2010-3-18 11:39:34 | 显示全部楼层
回复 19# pusofalse
能否用先激活msg,在用按下鼠标的窗口Mdown函数,,将窗口托到指定的坐标呢,?
发表于 2010-3-19 15:01:08 | 显示全部楼层
sdfasdfsdgfsdhgsfdhgsdfgsdf

评分

参与人数 1金钱 -10 贡献 -1 收起 理由
afan -10 -1 恶意灌水,扣分警告!

查看全部评分

发表于 2010-3-19 17:14:09 | 显示全部楼层
以上代码无法直接运行。  须修改。
如下:
#include <GUIConstantsEx.au3>
$Guititle="12333"
Global $__title,$__text,$__x, $__y
Global $Timer
Global $TimerDLL
$Form1 = GUICreate($Guititle, 220, 100, 80, 100)
$Button1 = GUICtrlCreateButton('test', 150, 35, 60, 20)
GUISetState()
While 1
        Switch GUIGetMsg()
                Case -3
                        Exit
                Case $Button1
                        MsgboxM(0, 'test', '我将跟随主窗口~')
                        MsgboxM(0, 'test', '我将定位到500,200的位置', 500, 200)
        EndSwitch
WEnd

Func MsgboxM($flag, $title, $text, $x = '', $y = '')
        $__title = $title
                $__text = $text
                $__x = $x
                $__y = $y
                $Timer = DllCallbackRegister('Timer', 'int', 'hwnd;uint;uint;dword')
                $TimerDLL = DllCall('user32.dll', 'uint', 'SetTimer', 'hwnd', 0, 'uint', _
                        0, 'int', 1, 'ptr', DllCallbackGetPtr($Timer))

        Sleep(3)
        MsgBox($flag, $title, $text)
EndFunc   ;==>MsgboxM

Func Timer($hwnd, $uiMsg, $idEvent, $dwTime)
        If $idEvent = $TimerDLL[0] Then
                $Wpos = WinGetPos($Guititle)
                Local $x = $Wpos[0] + 60, $y = $Wpos[1] + 10
                If StringIsDigit($__x) And StringIsDigit($__y) Then Local $x = $__x, $y = $__y
                If WinMove($__title, $__text, $x, $y) <> 0 Then
                        DllClose($TimerDLL)
                        DllCallbackFree($Timer)
                EndIf
        EndIf
EndFunc   ;==>Timer
发表于 2010-3-19 17:36:04 | 显示全部楼层
以上代码无法直接运行。  须修改。
如下:
lanfengc 发表于 2010-3-19 17:14



    怎么就你有这问题……
发表于 2010-3-19 17:42:25 | 显示全部楼层
回复 24# afan


    你不加载这个库文件怎么创建GUI?#include <GUIConstantsEx.au3>

还有,, 全局变量在子程序内定义, 编译器提示错误。。我也没办法。 只好程序运行的时候定义了一个。
发表于 2010-3-19 17:49:07 | 显示全部楼层
回复 25# lanfengc

具体哪个参数需要GUIConstantsEx.au3?
如果你是在scite里面运行提示变量的错误可不必理会,那是它的Bug。
你直接运行au3文件或编译后运行都试试~
发表于 2010-3-19 17:53:16 | 显示全部楼层
回复 26# afan


   还可以这样! 。  汗一个。
发表于 2010-3-19 17:57:28 | 显示全部楼层
回复 27# lanfengc


    脚本程序最终应该是能够编译后运行。

你在编辑器里运行无错误提示,编译却有问题,或者
你在编辑器里运行有错误提示,编译却无问题,你怎样选择?
发表于 2010-3-20 11:35:37 | 显示全部楼层
呵呵我这里正常哦
发表于 2010-4-5 15:57:36 | 显示全部楼层
学到了.....................
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 21:30 , Processed in 0.199520 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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