11

バックグラウンドで実行する必要のあるプログラムがあり、ユーザーがRDPセッションに接続すると、環境のセットアップを行ってからプログラムを起動します。プログラムが閉じられると、ハウスキーピングが実行され、セッションがログオフされます。

私が現在行っている方法は、ターミナルサーバーにこのアプリケーションを起動させることです。これは、コンソールウィンドウが表示されないようにするためのWindowsフォームアプリケーションとして構築されています。

public static void Main()
{
    //(Snip...) Do some setup work

    Process proc = new Process();
    //(Snip...) Setup the process
    proc.Start();
    proc.WaitForExit();

    //(Snip...) Do some housecleaning

    NativeMethods.ExitWindowsEx(0, 0);
}

タスクバーに項目がなく、alt-tabに何も表示されないので、私はこれが本当に好きです。ただし、これを行うために、次のような関数へのアクセスを断念しました。Windowsメッセージ(Likeまたは)をvoid WndProc(ref Message m) 聞くことができず、使用するハンドルがありません。コードをより堅牢にして、ハウスクリーニングを実行できるようにします。ユーザーがプログラムを閉じる前にログオフするか、セッションから切断した場合。WTS_REMOTE_DISCONNECTWTS_SESSION_LOGOFFbool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);

ケーキを食べて食べる方法についてのアドバイスはありますか?

4

3 に答える 3

11

メッセージの処理に使用する非表示のウィンドウを作成できます。

using System;
using System.Windows.Forms;

namespace WindowsApplication1
{
  class Program
  {
    [STAThread]
    static void Main(string[] args)
    {
      Application.Run(new MessageWindow());        
    }
  }

  class MessageWindow : Form
  {
    public MessageWindow()
    {
      this.ShowInTaskbar = false;
      this.WindowState = FormWindowState.Minimized;
      // added by MusiGenesis 5/7/10:
      this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
    }

    protected override void WndProc(ref Message m)
    {
      base.WndProc(ref m);
    }
  }
}  
于 2010-05-07T22:15:40.890 に答える
7

この質問を参照してください: Alt-Tabプログラムスイッチャーからウィンドウを非表示にする最良の方法は?

すべての解決策を試しましたが、何をしても、ウィンドウはAlt-Tabリストに表示されます(Vistaを実行しています)。

Windows Mobileでは、フォームのTextプロパティを空白に設定して、実行中のプログラムリスト(WinMoでalt-tabリストに相当)から除外します。おそらくこれはあなたのために働くでしょう、しかし私はそれを疑っています。

更新: OK、これ結局機能します。FormBorderStyleに設定されFixedToolWindow、にShowInTaskbar設定されたフォームを作成して表示すると、Alt-Tabリストに表示され falseません。

于 2010-05-07T22:47:36.123 に答える
7

これをコードに貼り付けます。

protected override CreateParams CreateParams
        {
            get
            {
                CreateParams pm = base.CreateParams;
                pm.ExStyle |= 0x80;
                return pm;
            }
        }

そのような単純な。win7 64ビットで完全に動作し、さらに重要なこと-フォームの境界線スタイルを変更する必要はありません(ウィジェットのようなアプリケーションを作成したため、fixedToolWindowにスタイルを設定することはできませんでした。このソリューションでは、境界線がなく、alt-タブ)。

于 2013-06-19T21:33:49.347 に答える