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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■52318  Re[1]: フォームを画面左上に
□投稿者/ Hongliang -(2010/08/05(Thu) 16:49:36)
    StartPosition プロパティは設定していますか?
記事No.52317 のレス /過去ログ88より / 関連記事表示
削除チェック/

■79555  Re[5]: 顧客別オプションのうまいやりかた
□投稿者/ 作業着プログラマ -(2016/04/14(Thu) 11:04:17)
    No79551 (Jitta さん) に返信

    おお!これはすぐに実行できそうな内容です。
    ソリューションごとコピーして顧客別に作り変えてましたが、
    よく考えたらプロジェクトの追加で十分ですね。
    共通部分のバグ修正も、ソリューションが1つなので一度で
    直せますし。

    なぜこんな簡単で効果的な事が思いつかなかったのか・・・・

    大変勉強になりました。有難うございました。
記事No.79190 のレス / END /過去ログ135より / 関連記事表示
削除チェック/

■99457  印刷ダイアログでプリンターを指定する方法を探しています
□投稿者/ MIU -(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)

    方法わかりましたら教えてください
親記事 /過去ログ173より / 関連記事表示
削除チェック/

■99460  Re[1]: 印刷ダイアログでプリンターを指定する方法を探しています
□投稿者/ 魔界の仮面弁士 -(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 での操作も検討してみてください。
記事No.99457 のレス /過去ログ173より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -