autoIt DllCall 如何获得句柄和对窗口操作
来源:互联网 发布:亿乐彩软件下载 编辑:程序博客网 时间:2024/04/30 23:09
DllCall (部分引用他人blog)
调用指定DLL(动态链接库)文件里面的函数。
DllCall ( "dll", "返回值类型", "函数名称" [, "类型1", 参数1[, "类型n", 参数n]] )
参数
dll要使用的 DLL 文件名,例如 "user32.dll"。也可使用由 DllOpen 获得的句柄(请查看下面的注意部分)。返回值类型函数的返回值类型(请查看下面的注意部分)。函数名称调用DLL文件里面的函数名称, 如. "MessageBox" 或者使用序号, 如. 62类型[可选] 参数的数据类型(请查看下面的注意部分).参数[可选] 实参(请查看下面的注意部分)。
返回值
成功:@error = 0.失败:@error = 1 不能使用 DLL 文件,@error = 2 未知的 "返回值类型",
@error = 3 没有在DLL文件里面找到所指定的"函数名称".
查看下面的注意.
若调用函数失败则 @error 将被设为 1,否则将返回一个含有函数返回值及参数副本(包括函数已修改的参数)的数组。
$return[0] = 函数的返回值
$return[1] = 参数1
$return[2] = 参数2
...
$return[n] = 参数n
注意
若给定的是 DLL 文件名则在调用函数时该 DLL 文件将被自动加载并在结束调用后被关闭。若需自己控制 DLL 的加载及卸载,请使用 DllOpen 和 DllClose 函数(执行相应操作)并在调用本函数时使用句柄而不是文件名。
默认状态下, AutoIt 使用 'stdcall' 调用方法. 要使用 'cdecl' 调用方法,请在返回值类型后面加上 ':cdecl'.
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long_ptr", 0).
获得最前端活动窗口的句柄:
Func _My_WinAPI_GetForegroundWindow()
Local $aResult
$aResult = DllCall("User32.dll", "hwnd", "GetForegroundWindow")
Return $aResult[0]
EndFunc ;====>get the top windows
Func _My_WinAPI_IsWindowEnabled($hWnd)
Local $iResult
$iResult = DllCall("user32.dll", "int", "IsWindowEnabled", "hwnd", $hWnd)
If @error Or Not IsArray($iResult) Then Return SetError(-1, -1, False)
If $iResult[0] = 0 Then
Return False
Else
Return True
EndIf
EndFunc ;=====>check if window is enabled
向dll文件发送消息, 如单击,双击等对控件进行操作
Func WbxUtilClickButton($hBtnWnd, $hTargetWnd = 0, $nNotifyCmd = 0) ; BN_CLICKED = 0
Const $WM_COMMAND = 0x0111
Local $nBtnId = _WinAPI_GetWindowLong ($hBtnWnd,$GWL_ID)
If $hTargetWnd = 0 Then
$hTargetWnd = _WinAPI_GetParent($hBtnWnd)
If $hTargetWnd = 0 Then
$hTargetWnd = _My_WinAPI_GetActiveWindow()
EndIf
EndIf
If $hTargetWnd = 0 Then
Return SetError(-1,-1,-1)
EndIf
Local $wParam = $nNotifyCmd * 0x10000 + $nBtnId
Return _My_WinAPI_SendMessage($hTargetWnd,$WM_COMMAND,$wParam,$hBtnWnd)
EndFunc
Func _My_WinAPI_SendMessage($hWnd, $iMsg, $iwParam, $ilParam)
; Maybe we should call _SendMessage directly
Local $aResult
$aResult = DllCall("User32.dll", "int", "SendMessageA", "hwnd", $hWnd, "int", $iMsg, "int", $iwParam, "int", $ilParam)
Return $aResult[0]
EndFunc
;你也可以调用下面函数来对控件发送操作消息
Func _My_WinAPI_SendMessageW($hWnd, $iMsg, $iwParam, $ilParam)
Local $aResult
$aResult = DllCall("User32.dll", "int", "SendMessageW", "hwnd", $hWnd, "int", $iMsg, "int", $iwParam, "int", $ilParam)
Return $aResult[0]
EndFunc
您可以按需传递不限数量的"类型"和"参数"。请参考下面的示例。
有效的类型为:
- autoIt DllCall 如何获得句柄和对窗口操作
- 如何获得窗口句柄(HWND )和改变窗口属性
- 如何获得窗口句柄(HWND )和改变窗口属性
- BCB如何获得当前所有可视窗口的窗口标题和窗口句柄
- 通过指点操作获得窗口句柄
- 通过指点操作获得窗口句柄
- 如何安全获得一个窗口句柄指针
- WPF窗口如何获得一个句柄?
- 【C++】获得窗口和控件的句柄
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 窗口句柄的获得
- 获得窗口句柄方法
- 窗口句柄的获得
- vc获得窗口句柄
- 获得窗口句柄
- 绑定数据的一些复杂写法
- 项目估算
- Oracle存储过程详解(一)
- joomla 1.0.x database tables's Guide 【转】
- 企业为什么要有工作经验的人
- autoIt DllCall 如何获得句柄和对窗口操作
- native2ascii的使用及j2ee字符编码[深刻]
- Qt编程之旅(二)
- iframe 父窗口和子窗口相互的调用方法集锦 zz
- CreateProcess和AfxBeginThread的区别
- 类的static成员
- ORA-01031: insufficient privileges
- TurboC 2.0 配置
- ZJUT_OJ1175