Function Reference |
首页 后退 前进 |
DllCall
调用 DLL 文件中的函数.
DllCall ( "dll", "return type", "function" [, type1, param1 [, type n, param n]] ) 参数
类型值:
Windows API 类型转换为 AutoIt 类型:
要在结构中使用嵌套结构,必须重新定义嵌套结构. 例如, 一个结构包含 2 POINT ("long;long"), 必须定义为 "long;long;long;long". 前两个 long 值对应的第一个 POINT; 后两个 long 值对应的第二个 POINT. 了解更多的 Windows API 类型, 请参考 MSDN.
返回值
备注 如果指定 dll 文件名, DLL 将会被自动加载, 并在调用结束后关闭. 如果要手动控制 DLL 的加载和卸载, 则应使用 DllOpen() 与 DllClose() 函数, 并使用句柄代替文件名.
默认 AutoIt 使用 'stdcall' 的调用约定. 要使用 'cdecl' 调用方式, 在返回值类型后面加上 ':cdecl'. 例如: DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0).
默认 AutoIt 使用 ANSI 的函数名, 例如 MessageBoxA 使用 MessageBox 给出的函数名. 要调用 unicode 版本, 使用 MessageBoxW.
如果函数调用失败, 将设置 @error 为非 0 值 否则返回包含函数返回值和所有参数副本的数组 (包括可能被传递参数修改的函数参数). $return[0] = 函数返回值 $return[1] = 参数1 $return[2] = 参数2 ... $return[n] = 参数n
该函数可以通过exect命令调用.
相关 DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllClose, DllOpen, DllStructCreate, DllStructGetPtr 函数示例 示例 1 ; Calling the MessageBox API directly. 示例 2 #include <MsgBoxConstants.au3> 示例 3 #include <MsgBoxConstants.au3> -----------------
该函数可以通过命令调用 exect
exect=DllCall('user32.dll','int','MessageBox','hwnd',0,'str','文本test','str','标题','int',0) exect=$var_i=DllCall('user32.dll','int','GetSystemMetrics','int',4)||_ViewValues($var_i) - 获得窗口标题的高度
"exect=$var_h=DllCall('user32.dll','hwnd','GetDesktopWindow')[0]||_ViewValues('16:~~'&'$var_h'&@CRLF&'10:~~'&$var_h,'描述~~窗口~~工作~~表')" - 获取桌面窗口描述符
exect=$var_i=DllCall('user32.dll','int','GetSystemMetrics','int',4)||_ViewValues($var_i) ;; 获得窗口标题的高度
exect=$var_hdll=DllOpen('user32.dll')||$var_res=DllCall($var_hdll,'int','MessageBox','hwnd',0,'str','Текст','str','Заголовок','int',0)||$var_hdll=DllClose(($var_hdll)||_ViewValues($var_res) ;;DLL调用的例子
exect=$var_0=Assign('STRUCT_1',create.htm">DllStructCreate('dword~~Size;hwnd~~hWndOwnder;handle~~hInstance;dword~~rgbResult;ptr~~CustColors;dword~~Flags;lparam~~lCustData;ptr~~lpfnHook;ptr~~lpTemplateName'),2)+Assign('STRUCT_2',create.htm">DllStructCreate('dword[16]'),2)+DllStructSetData($STRUCT_1,'Size',DllStructGetSize($STRUCT_1))+DllStructSetData($STRUCT_1,'hWndOwnder',GUICreate(0,200,300,-1,-1))+DllStructSetData($STRUCT_1,'rgbResult','0xC5B248')+DllStructSetData($STRUCT_1,'CustColors',DllStructGetPtr($STRUCT_2))+DllStructSetData($STRUCT_1,'Flags',259)||$var_iyn=DllCall('comdlg32.dll','bool','ChooseColor','struct*',$STRUCT_1)[0]||$var_0=$var_iyn=0?_Exit():1||$var_num=DllStructGetData($STRUCT_1,'rgbResult')||$var_ibrg=Hex($var_num,6)||_ViewValues('$var_ibrg','BRG~~Color') ;; 创建并运行颜色选择窗口
exect=$var_handle=WinGetHandle('[CLASS:TTOTAL_CMD]')||$var_0=Assign('STRUCT_RECT',create.htm">DllStructCreate(':tagRECT:'),2)+DllCall('user32.dll','bool','GetWindowRect','hwnd',Eval('var_handle'),'struct*',$STRUCT_RECT)||$var_s='Координаты~~углов~~TC:'&@CRLF&'X1:~~'&DllStructGetData($STRUCT_RECT,'Left')&@CRLF&'X2:~~'&DllStructGetData($STRUCT_RECT,'Right')&@CRLF&'Y1:~~'&DllStructGetData($STRUCT_RECT,'Top')&@CRLF&'Y2:~~'&DllStructGetData($STRUCT_RECT,'Bottom')||_ViewValues('$var_s') ;; 获取Total Commander窗口的坐标
exect=$var_h=DllCall('user32.dll','hwnd','GetDesktopWindow')[0]||_ViewValues('16:~~'&'$var_h'&@CRLF&'10:~~'&$var_h,'Дескриптор~~окна~~рабочего~~стола') ;; 获取桌面窗口描述符
exect=$var_0=Assign('STRUCT_ICON',create.htm">DllStructCreate('int'),2)+Assign('STRUCT_STRING',create.htm">DllStructCreate('wchar[260]'),2)+DllStructSetData($STRUCT_STRING,1,@SystemDir&'\shell32.dll')||$var_iyn=DllCall('shell32.dll','int',62,'hwnd',GUICreate(0,400,400,-1,-1),'struct*',$STRUCT_STRING,'int',DllStructGetSize($STRUCT_STRING)/2,'struct*',$STRUCT_ICON)[0]||$var_0=$var_iyn=0?_Exit():1||$var_s=DllStructGetData($STRUCT_STRING,1)&','&DllStructGetData($STRUCT_ICON,1)||_ViewValues('$var_s','Путь~~и~~номер~~значка') ;; 在系统对话框中选择一个图标
"exect=$var_htc=WinGetHandle('[CLASS:TTOTAL_CMD]')||_ViewValues('$var_htc') exect=$var_hss=DllCall('user32.dll','handle','SendMessage','hwnd',$var_htc,'uint',1074,'wparam',7,'lparam',0)[0]||_ViewValues('$var_hss') exect=$var_sss=DllCall('user32.dll','int','GetWindowTextW','hwnd',$var_hss,'wstr','''','int',4096)[2]||_ViewValues('$var_sss')" - 获取Total Commander左面板状态栏的文本
|