前提・実現したいこと
実現したいことはpythonによりSAPのGUI制御をおこなうことです。
そのために、当質問はwin32.GetObject("SAPGUI")
発生している問題・エラーメッセージ
SAPにログイン後、SAP easy accessのウィンドウを表示した状態で、以下のコードを実行したらオブジェクトが取得できずにエラーメッセージが表示されます。
→いくつか試してみて、Windows側の設定に問題があるのではないか、までは調べられたのですがそれより先は解決できなかったので質問させていただきました。
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\AAAAA\AppData\Roaming\Python\Python37\site-packages\win32com\client\__init__.py", line 72, in GetObject return Moniker(Pathname, clsctx) File "C:\Users\AAAAA\AppData\Roaming\Python\Python37\site-packages\win32com\client\__init__.py", line 87, in Moniker moniker, i, bindCtx = pythoncom.MkParseDisplayName(Pathname) pywintypes.com_error: (-2147221020, '構文が無効です', None, None)
該当のソースコード
python3
1import sys,os,time,datetime,subprocess,re 2import pywintypes 3import pywinauto 4from pywinauto.application import Application 5from pywinauto import Desktop 6import win32com.client as win32 7 8obj = win32.GetObject("SAPGUI") 9
試したこと
①Anaconda3を入れて他の端末でも同様の環境構築を行い、プログラムを実行した際には同様のエラーが起こる
②SAP GUI Configurationの、スクリプト→ユーザ設定よりスクリプト有効化の項目にチェックがあることを確認
③Excelを開いた際に win32.GetObject('Excel Application')を試した
→ほかのオブジェクトなら問題なく取得できていることを確認
④powershell で以下のコマンドレッドにより取得可能オブジェクトを表示
→結果一覧中に SAPGUIのオブジェクトは存在せず
$a = dir REGISTRY::HKEY_CLASSES_ROOT\CLSID -Include PROGID -Recurse $a | foreach {$_.GetValue("")} | sort
⑤以下のURLより、win32com の参照変数を設定するコードの後にオブジェクトを取得しても同様のエラーが起こります。
http://blog.livedoor.jp/blackcode/archives/python-win32api-import-error.html
⑥Scripting Tracker for SAP GUIを入れて、該当画面をanalyzerで調べたところ何も表示されなかったことを確認
https://tracker.stschnell.de/
⑦windowsのイベントビューアー より、アプリケーションとサービスログ→Micosoft→Windows→Applocker→MSI and Scriptにて、lockがかかっているアプリケーションは設定されていないことは確認済
補足情報(FW/ツールのバージョンなど)
使用環境(ライブラリのバージョンも追記)
OS:Windows10(64bit)
python:3.7.3
Anaconda3使用
SAP GUI for window:740
pywin32:223
pypiwin32:223
pywinauto:0.6.8