C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 印刷ダイアログでプリンターを指定する方法を探しています


(過去ログ 173 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■99457 / inTopicNo.1)  印刷ダイアログでプリンターを指定する方法を探しています
  
□投稿者/ MIU (1回)-(2022/04/14(Thu) 13:21:51)

分類:[VB.NET/VB2005 以降] 

いつも参考にさせてもらっています

user32.dllを利用して印刷時に表示される印刷ダイアログのプリンターを指定したいのですが方法がわからずに困っています

一覧のビューまでは下記コードで取得できましたがその後がわかりません

        Dim hWnd1 As IntPtr = FindWindow("#32770", "印刷")
        Dim hWnd2 As IntPtr = FindWindowEx(hWnd1, IntPtr.Zero, "#32770", "全般")
        Dim hWnd3 As IntPtr = FindWindowEx(hWnd2, IntPtr.Zero, "SHELLDLL_DefView", String.Empty)
        Dim hWnd4 As IntPtr = FindWindowEx(hWnd3, IntPtr.Zero, "SysListView32", "FolderView")

ここでプリンターを指定したい

        '印刷
        Dim hButton As IntPtr = FindWindowEx(hWnd1, IntPtr.Zero, "Button", "印刷(&P)")
        SendMessage(hButton, &HF5, 0, Nothing)

方法わかりましたら教えてください

引用返信 編集キー/
■99460 / inTopicNo.2)  Re[1]: 印刷ダイアログでプリンターを指定する方法を探しています
□投稿者/ 魔界の仮面弁士 (3318回)-(2022/04/14(Thu) 16:31:50)
No99457 (MIU さん) に返信
> user32.dllを利用して

わざわざ API を使うということは、他アプリのダイアログを制御したいといった事情なのでしょうか。
(要件によっては、UIAutomation や IAccessible という選択肢もあるかもしれません)


> 印刷時に表示される印刷ダイアログのプリンターを指定したいのですが方法がわからずに困っています
印刷ダイアログには複数の種類があって、プリンター選択が
ComboBox なものもあれば、ListView なものもあったりしますね。


> Dim hWnd4 As IntPtr = FindWindowEx(hWnd3, IntPtr.Zero, "SysListView32", "FolderView")
> ここでプリンターを指定したい
LVITEM 構造体の state メンバーに LVIS_SELECTED のビットフラグを建てて
stateMask のマスクと共に、LVM_SETITEMSTATE メッセージに載せて SendMessage してみてはどうでしょう。
https://docs.microsoft.com/en-us/windows/win32/controls/lvm-setitemstate

LVITEM は、Unicode 版/ANSI 版の違いや、32bit/64bit のサイズ差などがあるのでご注意を。
また、OS 環境によって構造体サイズが徐々に拡張されており
 (1) UINT mask〜 LPARAM lParam まで
 (2) int iIndent を追加
 (3) int iGroupId〜PUINT puColumns を追加
 (4) int* piColFmt〜int iGroup を追加
などの遷移を辿っています。今時は (4) 固定で良いとは思いますが。
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/ns-commctrl-lvitemw

もしも自プロセスではなく他のプロセスが相手の場合は、
LVITEM をシェアードメモリ上に用意する必要があると思います。
それが面倒なら、UI Automation か MSAA での操作も検討してみてください。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -