1

最小化されたプロセスを開始するのは簡単なはずだと思いますが、見通しがよくありませんでした。Outlookを最小化するにはどうすればよいですか?

私の試みはこれでした:

[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

static void Main(string[] args)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = "OUTLOOK.EXE";

    IntPtr hWnd = Process.Start(startInfo).Handle;

    bool state = false;
    if (!hWnd.Equals(IntPtr.Zero))
        state = ShowWindowAsync(hWnd, 2);

    // window values: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx

    Console.WriteLine(state.ToString());
    Console.Read();
}
4

4 に答える 4

2

を使ってみProcessStartInfo.WindowStyleましたProcessWindowStyle.Minimizedか?

于 2012-08-01T16:28:04.470 に答える
0

Outlookが起動するまで待って、ウィンドウの下にコマンドを送信すると、トレイに最小化されることがわかりました。今、見通しを最小限に抑えるために達成する唯一のことは、準備ができるまでループすることです:-)

var hWnd = Process.Start(startInfo);
ShowWindowAsync(hWnd.MainWindowHandle, 2);
于 2012-08-01T18:37:24.543 に答える
0

私はそれを解決しましたが、あなたが解決策を改善できると思うなら、あなたのコメントを聞きたいです。また、解決策をブログに投稿しました。詳細については、http://jwillmer.de/blog/2012/08/01/how-to-start-outlook-minimized-with-c/をご覧ください。

[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

// console application entry point
static void Main()
{
    // check if process already runs, otherwise start it
    if(Process.GetProcessesByName("OUTLOOK").Count().Equals(0))
        Process.Start("OUTLOOK");

    // get running process
    var process = Process.GetProcessesByName("OUTLOOK").First();

    // as long as the process is active
    while (!process.HasExited)
    {
        // title equals string.Empty as long as outlook is minimized
        // title starts with "öffnen" (engl: opening) as long as the programm is loading
        string title = Process.GetProcessById(process.Id).MainWindowTitle;

        // "posteingang" is german for inbox
        if (title.ToLower().StartsWith("posteingang"))
        {
            // minimize outlook and end the loop
            ShowWindowAsync(Process.GetProcessById(process.Id).MainWindowHandle, 2);
            break;
        }

        //wait awhile
        Thread.Sleep(100);

        // place for another exit condition for example: loop running > 1min
    }
}
于 2012-08-01T21:02:18.090 に答える
0

これを使用できますthis.Application.ActiveExplorer().WindowState = Outlook.OlWindowState.olMinimized;

それはあなたの現在の見通しウィンドウを最小化します(this = ThisAddInクラス)

于 2017-11-12T11:44:33.517 に答える