我想调用AutoIt dll中的函数,我在C:\ Program Files(x86)\ AutoIt3\AutoItX\AutoItX3.dll中找到了使用Python的函数.我知道我可以使用,win32com.client.Dispatch("AutoItX3.Control")但我不能安装应用程序或在系统中注册任何东西.
到目前为止,这就是我所在的地方:
from ctypes import *
path = r"C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dll"
autoit = windll.LoadLibrary(path)
Run Code Online (Sandbox Code Playgroud)
以下是有效的方法:
autoit.AU3_WinMinimizeAll() # windows were successfully minimized.
autoit.AU3_Sleep(1000) # sleeps 1 sec.
Run Code Online (Sandbox Code Playgroud)
这是我的问题,当我调用像这样的其他方法时,python崩溃了.我得到python.exe已停止从Windows 工作 ...
autoit.AU3_WinGetHandle('Untitled - Notepad', '')
Run Code Online (Sandbox Code Playgroud)
而其他一些方法不会崩溃python但只是不起作用.这个没有关闭窗口并返回0:
autoit.AU3_WinClose('Untitled - Notepad', '')
Run Code Online (Sandbox Code Playgroud)
而另一个返回1但窗口仍然最小化:
autoit.AU3_WinActivate('Untitled - Notepad', '')
Run Code Online (Sandbox Code Playgroud)
我用with测试了这些例子,Dispatch("AutoItX3.Control")一切都像预期的那样工作.
似乎应该返回除字符串以外的东西的方法正在崩溃python.但仍然,其他人WinClose甚至没有工作......
预先感谢您的帮助!
编辑:
使用unicode字符串时,这些方法现在正在工作:
autoit.AU3_WinClose(u'Untitled - Notepad', u'')
autoit.AU3_WinActivate(u'Untitled - Notepad', u'')
Run Code Online (Sandbox Code Playgroud)
我找到了原型AU3_WinGetHandle:
AU3_API void WINAPI AU3_WinGetHandle(const char …
当使用IDLE提示执行以下行时,执行将在最后一行永远阻塞.
>>> class Foo(unicode):
pass
>>> foo = Foo('bar')
>>> print str(foo) # prints bar
>>> print repr(foo) # prints u'bar'
>>> print foo # blocks forever!!
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为它从python.exe控制台执行时按预期工作.这可能与这个问题有关,但我不确定.我在Windows 7 x64上使用32位32位python 2.7.5.谁能解释一下这里发生了什么?谢谢!
编辑:一些更多的测试......
如果我将该类保存Foo(unicode): pass在C:\ Python27\Lib\site-packages\mymodule.py中
现在IDLE不会阻塞以下代码:
>>> from mymodule import Foo
>>> print Foo('bar') # prints bar like expected.
Run Code Online (Sandbox Code Playgroud)