AdobeAcrobatReaderDC の印刷ダイアログのリスト情報の取得について
■目的
AdobeAcrobatReaderDCで既に開かれている状態にあるPDFファイルを操作して
印刷ダイアログにおいてプリンターの指定して印刷する処理を考えており、いろいろ試しています。
■状況
WinActorのライブラリ「04_自動記録アクション」にある[リスト取得(WIN32)]ノードで値を取得したところ
頭2文字分しか取得できませんでした。(上記画面の場合は「Mi」が取得されます。)
[リスト選択(WIN32)]ノードでその2文字を設定するとた確かに選択できる事は確認できました。
■問題になっている点
Test1,Test2,Test3のダミープリンタを用意して
自動記録でTest2若しくはTest3を選択する記録を取ると[リストの選択(WIN32)]ノードの値設定で[Te]の値が記録されるのですが
テスト実行を行うと必ず[Test1]が選択される事を確認しています。
■知りたい点
・表示されている正確な名前のリスト取得する方法は存在するのか
・リスト選択を用いたプリンタのフルネーム設定で選択する方法は存在するのか
実行環境
===================================
Windows 7 Professional SP1(32bit)
WinActor(rev.4.3.2)
AdobeAcrobatReaderDC(2019.010.20069)
===================================
同様の問題を解決された方がいらっしゃいましたらアドバイスお願いいたします。
****************************************************************
とりあえず、下記のVBSノードで解決いたしましたので、記録しておきます。
基本的に本解決方法は推奨いたしません。
環境が違う場合は動作しない恐れもあります。
■AdobeAcrobatDCの印刷画面プリンタの設定
※Excelがインストールされていない動作しません。※
AdobeAcrobatReaderDCの印刷画面でプリンタを設定します。
設定プリンタに設定したいプリンタ名(完全一致)を入力。
動作結果は
空 若しくは -1の場合は失敗(何らかの理由で設定できなかったり、対象画面の存在が検知できなかった場合)
その他の整数は成功のはずです。
=========================================================
SetPrinter = !設定プリンタ!
With CreateObject("Excel.Applicatoin")
'AdobeAcrobatReaderDCにおいて印刷画面のハンドラを取得
hWnd = .ExecuteExce4Macro("CALL(""user32"", ""FindWindowA"", ""JCC"", ""#32770"", ""印刷"")")
'対象ウインドウが可視状態であれば実行
if .ExecuteExce4Macro("CALL(""user32"", ""IsWindowVisible"", ""AJ"", " & hWnd & ")") Then
'対象の孫ハンドラを探し出して取得
hWnd2 = .ExecuteExce4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & hWnd & ", ""0"", ""GroupBox"", """")")
hWnd3 = .ExecuteExce4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & hWnd2 & ", ""0"", ""Button"", """")")
hWnd4 = .ExecuteExce4Macro("CALL(""user32"", ""GetWindow"", ""JJJ"", " & hWnd3 & ", ""2"")")
hWnd5 = .ExecuteExce4Macro("CALL(""user32"", ""FindWindowExA"", ""JJJCC"", " & hWnd4 & ",""0"", ""ComboBoxEx32"", """")")
'コンボボックス内のアイテム個数を取得
Count = .ExecuteExce4Macro("CALL(""user32"", ""SendMessageA"", ""JJJJJ"", " & hWnd5 & ",""326"", ""0"", ""0"")")
'全プリンタと合致するか確認(SELECTSTRINGが親ハンドルに更新を通知しても微動だにしない為、こんな実装)
For Index = 0 to Count - 1
'プリンタ名取得処理
Length = .ExecuteExce4Macro("CALL(""user32"", ""SendMessageA"", ""JJJJJ"", " & hWnd5 & ", ""329"", " & Index & ", ""0"")")
PrinterName = Space(Length) & ""
PrinterName = .ExecuteExce4Macro("CALL(""user32"", ""SendMessageA"", ""4JJJC"", " & hWnd5 & ", ""328"", " & Index & ", " & PrinterName & ")")
PrinterName = Left(PrinterName, Length)
'設定プリタと合致したら設定
If PrinterName = SetPrinter then
ret = .ExecuteExce4Macro("CALL(""user32"", ""SendMessageA"", ""JJJJJ"", " & hWnd5 & ", ""334"", " & Index & ", ""0"")")
End If
Next
End If
End With
SetUMSVariable $設定結果$, ret
=========================================================
おまけ 通常使うプリンター取得(とりあえず版なのでワンライナーで諸々の考慮を入れず)
=========================================================
SetUMSVariable $プリンター名$, Left(CreateObject("Excel.Applicatoin").ActivePrinter,InStrRev(CreateObject("Excel.Applicatoin").ActivePrinter," on ") - 1
=========================================================