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

わんくま同盟

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

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

■99460 / 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 での操作も検討してみてください。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←印刷ダイアログでプリンターを指定する方法を探しています /MIU 返信無し
 
上記関連ツリー

印刷ダイアログでプリンターを指定する方法を探しています / MIU (22/04/14(Thu) 13:21) #99457
印刷ダイアログでプリンターを指定する方法を探しています / 魔界の仮面弁士 (22/04/14(Thu) 16:31) #99460 ←Now

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信