IE上で開いたpdfを連続で印刷したく、その際に印刷設定を変えたいため印刷ダイアログを操作したいです。
以下の質問を参考にしました。
https://teratail.com/questions/282475
該当のソースコード
VBA
1Dim oyaHwnd As LongPtr 2oyaHwnd = FindWindowA (vbNullString, "印刷") 3 4Dim i As LongPtr, dic as new Dictionary 5i = EnumChildWindows (hwnd, AddressOf getCombos, dic) 6Dim keys 7keys = dic.keys 8Dim cbHwnd As LongPtr 9cbHwnd = keys(1) 10 11Dim itm as String 12itm = "プリンター名" 13 14Call SendMessageA (cbHwnd, &H6, 1, 0) 15Call SendMessageA (cbHwnd, &H14D, -1, itm) 16 17Dim cb_id As LongPtr 18cb_id = GetWindowLongA (cbHwnd, -12) 19 20Dim wp As LongPtr 21wp = &H10000 Or (cb_id And &HFFFF) 22 23Call PostMessage (oyaHwnd, &H111, wp, cbHwnd)
補足情報
・親ハンドルとして、キャプションが「印刷」のウィンドウを探しています。
・EnumChildWindowsで親ウィンドウ内のコンボボックスのハンドルをすべてDictionaryに格納しています。
・2番目に出てくるコンボボックスのハンドルをkeys(1)として取得し、cbHwndに格納しています。
コンボボックスをアクティブにして項目を選択するところまでは動作しています。
しかし、コンボボックスの文字が変わっているだけで、SELCHANGEが起きていません。
どこか問題がありますでしょうか?
変数wpについては参考にした質問の中にあったコードをそのまま持ってきただけで、何をしているのか理解できておらず、そこに間違いがあるような気がしております。
また、印刷ダイアログの中でプロパティボタンを押下して出てきたプロパティウィンドウの方では、上記と同じようなコードでコンボボックスの操作ができているため、親ハンドルが間違っているのかもしれないとも考えております。
参考先(https://teratail.com/questions/282475)の自己解決結果の中では
下記のように修正していましたが、
PostMessage oyahundle, WM_COMMAND, wp, 0
質問者さんのコードは下記になっています。
Call PostMessage (oyaHwnd, &H111, wp, cbHwnd)
第4パラメータに差があるように感じました。
内容は検証などせず、ただ比較しただけですが。。。
ありがとうございます。
返信が遅くなり大変失礼いたしました。
おっしゃる通り参考にしたコードと同じように第4引数に0を入れてみましたが、やはりコンボボックスのSELCHANGEは起きていませんでした。
参考コードがなぜ0になっているのかがわかりません。
この引数にはコンボボックスのハンドルを渡すと認識しておりますが、そういうわけでもないのでしょうか。

回答1件
あなたの回答
tips
プレビュー