Call functions in AutoIt DLL using Python ctypes

Posted by Josh on Stack Overflow See other posts from Stack Overflow or by Josh
Published on 2013-11-13T02:10:54Z Indexed on 2013/11/13 3:53 UTC
Read the original article Hit count: 824

Filed under:
|
|

I want to call functions from an AutoIt dll, that I found at C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dll using Python. I know I could use win32com.client.Dispatch("AutoItX3.Control") but I can't install the application or register anything in the system.

So far, this is where I am:

from ctypes import *
path = r"C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dll"
autoit = windll.LoadLibrary(path)

Here are the methods that works:

autoit.AU3_WinMinimizeAll() # windows were successfully minimized.
autoit.AU3_Sleep(1000) # sleeps 1 sec.

Here is my problem, python is crashing when I call other methods like this one. I get python.exe has stopped working from windows...

autoit.AU3_WinGetHandle('Untitled - Notepad', '')

And some other methods are not crashing python but are just not working. This one doesn't close the window and return 0:

autoit.AU3_WinClose('Untitled - Notepad', '')

And this other one return 1 but the window is still minimized:

autoit.AU3_WinActivate('Untitled - Notepad', '')

I've tested the examples with with Dispatch("AutoItX3.Control") and everything is working like expected.

It seems like methods that should return something other than a string are crashing python. But still, others like WinClose are not even working...

Thank you in advance for your help!

EDIT:

These methods are now working when using unicode strings:

autoit.AU3_WinClose(u'Untitled - Notepad', u'')
autoit.AU3_WinActivate(u'Untitled - Notepad', u'')

And I found the prototype for AU3_WinGetHandle:

AU3_API void WINAPI AU3_WinGetHandle(const char szTitle, /[in,defaultvalue("")]*/const char *szText, char *szRetText, int nBufSize);

Now I see that I should get the handle from szRetText but I am not sure how... I tried the following without success:

from ctypes.wintypes import LPCWSTR, INT, POINTER

AU3_WinGetHandle.argtypes = (LPCWSTR, LPCWSTR, POINTER(LPCWSTR), INT)

s = c_wchar_p()
print AU3_WinGetHandle(u'Untitled - Notepad', u'', byref(s), 100) # prints 1
print s # prints c_wchar_p(u'')

Any idea how to retrive the handle from szRetText?

© Stack Overflow or respective owner

Related posts about python

Related posts about Windows