16

開いているすべてのウィンドウを最小化するこの C++ コードをフォーラムで見ました

#define MIN_ALL        419
#define MIN_ALL_UNDO   416

int main(int argc, char* argv[])
{
    HWND lHwnd = FindWindow("Shell_TrayWnd",NULL);
    SendMessage(lHwnd,WM_COMMAND,MIN_ALL,0);
    Sleep(2000);
    SendMessage(lHwnd,WM_COMMAND,MIN_ALL_UNDO,0);
    return 0;
}

C#.net で FindWindow および SendMessage API 関数と HWND 型にアクセスするにはどうすればよいですか?

4

4 に答える 4

32

PInvoke.net はあなたの友達です :-)

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1 {
class Program {
    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)]
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);

    const int WM_COMMAND = 0x111;
    const int MIN_ALL = 419;
    const int MIN_ALL_UNDO = 416;

    static void Main(string[] args) {
        IntPtr lHwnd = FindWindow("Shell_TrayWnd", null);
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero); 
        System.Threading.Thread.Sleep(2000);
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero);
    }
}
}
于 2009-04-24T09:15:43.673 に答える
5

サイト www.pinvoke.net には、必要な情報がたくさんあります。たとえば、SendMessage と FindWindow に関するこの記事:

http://www.pinvoke.net/default.aspx/user32.SendMessage http://www.pinvoke.net/default.aspx/user32.FindWindow

もちろんかなり技術的な話ですが、基本的には p/invoke を使用して FindWindow および SendMessage API 関数を呼び出し、目的を達成します。=)

于 2009-04-24T09:06:56.800 に答える
2

以前、C# から P/Invoke を使用して最小化および最大化する方法についてブログを書きました: http://improve.dk/minimizing-and-maximizing-windows/

于 2009-04-24T09:11:35.603 に答える
1

最も簡単な方法ではありませんが、手動で C++ 実装を呼び出す方法があります。 http://pinvoke.netが役立ちます:

findwindow 検索結果: http://pinvoke.net/search.aspx?search=findwindow&namespace=[すべて]

あなたの場合、約4番目の結果のダウンが役立ちます。

于 2009-04-24T09:08:34.050 に答える