Python を使用してC:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dllで見つけた AutoIt dll から関数を呼び出したいです。使用できることはわかっていますwin32com.client.Dispatch("AutoItX3.Control")
が、アプリケーションをインストールしたり、システムに何かを登録したりできません。
これまでのところ、これは私がいる場所です:
from ctypes import *
path = r"C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX3.dll"
autoit = windll.LoadLibrary(path)
動作するメソッドは次のとおりです。
autoit.AU3_WinMinimizeAll() # windows were successfully minimized.
autoit.AU3_Sleep(1000) # sleeps 1 sec.
これが私の問題です。このような他のメソッドを呼び出すと、python がクラッシュします。Windowsからpython.exeが機能しなくなった...
autoit.AU3_WinGetHandle('Untitled - Notepad', '')
また、他のいくつかの方法はPythonをクラッシュさせていませんが、機能していません。これはウィンドウを閉じず、0 を返します。
autoit.AU3_WinClose('Untitled - Notepad', '')
そして、この他のものは1を返しますが、ウィンドウはまだ最小化されています:
autoit.AU3_WinActivate('Untitled - Notepad', '')
で例をテストしましたがDispatch("AutoItX3.Control")
、すべてが期待どおりに機能しています。
文字列以外を返す必要があるメソッドが python をクラッシュさせているようです。しかし、それでも、他のようなWinClose
ものは機能していません...
よろしくお願いします。
編集:
これらのメソッドは、Unicode 文字列を使用するときに機能するようになりました。
autoit.AU3_WinClose(u'Untitled - Notepad', u'')
autoit.AU3_WinActivate(u'Untitled - Notepad', u'')
そして、私はのプロトタイプを見つけましたAU3_WinGetHandle
:
AU3_API void WINAPI AU3_WinGetHandle(const char szTitle, / [in,defaultvalue("")]*/const char *szText, char *szRetText, int nBufSize);
これで、次のコードを使用して戻り値を取得できます!
from ctypes.wintypes import LPCWSTR
s = LPCWSTR(u'')
print AU3_WinGetHandle(u'Untitled - Notepad', u'', s, 100) # prints 1
print s.value # prints '000705E0'!
私を助けてくれた人に感謝します!