如何在pywin32程序中使用autoit中的DllCall函数访问user32.dll?

时间:2014-07-08 19:21:26

标签: python automation autoit pywin32

我正在尝试编写一个代码来通过Windows GUI的Tab面板访问,为此我想在我的python代码中创建一个DllCall到user32.dll,我使用Pywin32来访问autoit' s函数,我想我可以调用DllCall,这就是我的工作方式。

TabID = autoit.DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", hTab)
TabID = autoit.TabID[0]

但每次我运行此代码时,它都会给我以下错误 - :

    raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: AutoItX3.Control.DllCall

整个代码如下所示:

import time
import LogIt
import datetime
import win32con
import win32gui
import win32com.client

# this makes use of the AutoITX.dll that we registered with the Windows OS
autoit = win32com.client.Dispatch("AutoItX3.Control")

autoit.DllCall("user32.dll", "int", "GetDlgCtrlID")

有人可以帮我解决这个错误吗,我在网上找不到多少。

1 个答案:

答案 0 :(得分:0)

DllCall未出现在AutoItX的功能列表中,因此出现错误,因为它不可用。这通常是因为在技术上难以在dll中实现,就像HotkeySet这样的函数一样。 AutoItX是AutoIt的一个非常小的项目,所以如果需要花费很多精力来移植,那么它往往不会发生。

另一种方法是实现与DllCall相同的机制:

通常在Windows中,您使用GetModuleHandle获取user32.dll的句柄,然后使用GetProcAddress获取该函数的地址。在python中,大多数代码片段都是使用ctypes或win32api中的kernel32完成的。