none
プリンタプロパティ画面を閉じる方法 RRS feed

  • 質問

  • お世話になります。

    起動したプリンタのプロパティ画面をC#プログラムから閉じたいのですが、どのように行えばいいのでしょうか?

    タスクマネージャーで確認すると「アプリケーション」タブに「My Printerのプロパティ」タスクとして表示されています。

    プロセスを確認すると「explorer.exe」プロセスになっています。

    2017年10月16日 1:09

回答

  • Win32API を使うと下記のようなコードで閉じることができると思います。

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("user32.dll")]
            static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                IntPtr hPrinterPropertyWindow = FindWindow(null, "My Printerのプロパティ");
                SendMessage(hPrinterPropertyWindow, 0x0010 /*WM_CLOSE*/, 0, 0);
            }
        }
    }
    

    • 回答としてマーク y-ske 2017年10月18日 0:20
    2017年10月16日 4:32

すべての返信

  • 以下のページを参考にされてはいかがでしょうか?

    他のプログラムのウィンドウを閉じる


    2017年10月16日 1:23
  • 早速試して見ましたが、

    proc.MainWindowsTitleに"My Printerのプロパティ"が入ってこないため、

    proc.CloseMainWindow();を実行して閉じることが出来ませんでした。

    processes = Process.GetProcesses();
    foreach (Process proc in processes)
    {
          var title = proc.MainWindowTitle;
    }

    2017年10月16日 3:16
  • Win32API を使うと下記のようなコードで閉じることができると思います。

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("user32.dll")]
            static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                IntPtr hPrinterPropertyWindow = FindWindow(null, "My Printerのプロパティ");
                SendMessage(hPrinterPropertyWindow, 0x0010 /*WM_CLOSE*/, 0, 0);
            }
        }
    }
    

    • 回答としてマーク y-ske 2017年10月18日 0:20
    2017年10月16日 4:32