使用下面这个函数,后面有一段简单的示例,是用消息提示做的例子,图片也一样,case下面跟的代码不同就是了
GUIGetCursorInfo ( [窗口句柄] )
成功: 返回一个5个元素的数组来表示鼠标的坐标信息:
$array[0] = X 坐标 (水平轴)
$array[1] = Y 坐标(垂直轴)
$array[2] = 鼠标左键被按下 (1 为按下, 0 为未按下)
$array[3] = 鼠标右键被按下 (1 未按下, 0 为未按下)
$array[4] = 鼠标下面的控件的控件ID( 0 为没有或者无法获取)
#include <GuiConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 120, 350, 192, 114)
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
$t=10;定义需要批量产生的按钮个数
Dim $Button[999999];批量产生的按钮个数上限为999999
GUISetState()
#EndRegion ### END Koda GUI section ###
For $i = 1 To $t
$Button[$i] = GUICtrlCreateButton("Button" & $i, 30, 30*($i)-15, 60, 25, 0)
GUICtrlSetOnEvent($Button[$i], "main")
Next
_ReduceMemory(@AutoItPID);释放内存
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
For $i = 1 To $t
$mouse = GUIGetCursorInfo()
$pos = MouseGetPos()
Switch $mouse[4]
Case $Button[$i]
ToolTip('这是自动生产的第'&$i&'按钮', $pos[0] + 10, $pos[1] + 25)
EndSwitch
Next
Sleep(100)
_ReduceMemory(@AutoItPID);释放内存
WEnd
Func main()
For $i = 1 To $t
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $Button[$i]
MsgBox(0, "第"&$i&"个", "button" & $i)
_ReduceMemory(@AutoItPID);释放内存
EndSwitch
Next
EndFunc ;==>main
Func _ReduceMemory($i_PID = -1);内存释放函数
If $i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
Return $ai_Return[0]
EndFunc ;==>_ReduceMemory
[ 本帖最后由 298311657 于 2009-2-17 00:12 编辑 ] |