C#で開いているすべてのウィンドウを最小化
質問
私は開いているすべてのウィンドウを最小化し、フォーラムにこの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の種類にアクセスすることができますか?
解決
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);
}
}
}
他のヒント
サイトwww.pinvoke.netは必要な情報をたくさん持っています。例えば、のSendMessageとFindWindowをこの記事ます:
http://www.pinvoke.net/default.aspx/user32.SendMessage http://www.pinvoke.net/default.aspx/user32.FindWindowする
もちろん - -これはかなり技術的だが、基本的には、pは/あなたが欲しいものを達成するためのFindWindowとのSendMessage API関数を呼び出すために呼び出します。 =)
同様の結果は、タスクバーのポップアップメニューを持参し、それを文字「M」を送信するためにこれらのキーボードイベントを送信することによって達成することができます:
public class DesktopHelper
{
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
/// <summary>
/// Shows the desktop.
/// </summary>
public static void ShowDesktop()
{
keybd_event(0x5B, 0, 0, 0);
keybd_event(0x4D, 0, 0, 0);
keybd_event(0x5B, 0, 0x2, 0);
}
}
私は以前に最小化&Cの#からP /呼び出しを使用して最大化する方法についてブログしました: http://improve.dk/minimizing-and-maximizing-windows/する
最も簡単な方法が、マニュアルの方法ではない正確にはC ++の実装を呼び出すことです。 http://pinvoke.net のに役立ちます:
のFindWindow検索結果: http://pinvoke.net/search.aspx ?検索= FindWindowを&名前空間= [すべて] の
約第四の結果ダウンは、あなたの場合に役立ちます。