6

デスクトップ ガジェットを作成していますが、問題が発生しています。ウィンドウは「デスクトップを表示」コマンドで非表示になります - やめてください、あなたが何を考えているかはわかります。デスクトップ ガジェットの要点は、結局のところ、それがデスクトップにくっつくことです。

明確にするために-TopMostウィンドウは必要ありません。「デスクトップの表示」コマンドを実際に停止したくないので、無視してください。私が望むのは、デスクトップ ガジェットがデスクトップ上に表示されたままになり、通常の機能を通常どおり中断しないようにすることだけです。

何か案は?私の現在のメソッドは、Google で見つけた P/Invoke スニペットで、フォームの親を Progman などに設定しています。問題は、これによりタスクバーにウィンドウが強制的に表示されるように見えることです。これは望ましくありません。

4

2 に答える 2

8

あなたの質問への回答には少し遅れているかもしれませんが、それにもかかわらず、ここに私が見つけたように見える答えがあります:

    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hP, IntPtr hC, string sC, string sW);

    void MakeWin()
    {
        IntPtr nWinHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", null);
        nWinHandle = FindWindowEx(nWinHandle, IntPtr.Zero, "SHELLDLL_DefView", null);
        SetParent(Handle, nWinHandle);
    }

「MakeWin」は、「InitializeComponent」の前に、フォームのコンストラクターで呼び出す必要があります。少なくともWin7ではうまくいきます。

于 2015-09-15T14:59:18.783 に答える