```csharp
using System;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace PCListener
{
static class Program
{
static bool _IsExit = false;
//展示窗口API
[DllImport("User32.dll", EntryPoint = "ShowWindow")] //
private static extern bool ShowWindow(IntPtr hWnd, int type);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
//获取窗体位置 最小化 最大化 隐藏 api
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
static UInt32 SW_HIDE = 0;
static UInt32 SW_SHOWNORMAL = 1;
static UInt32 SW_NORMAL = 1;
static UInt32 SW_SHOWMINIMIZED = 2;
const UInt32 SW_SHOWMAXIMIZED = 3;
static UInt32 SW_MAXIMIZE = 3;
static UInt32 SW_SHOWNOACTIVATE = 4;
static UInt32 SW_SHOW = 5;
static UInt32 SW_MINIMIZE = 6;
static UInt32 SW_SHOWMINNOACTIVE = 7;
static UInt32 SW_SHOWNA = 8;
static UInt32 SW_RESTORE = 9;
static IntPtr ParenthWnd = new IntPtr(0);
static void Main()
{
Console.Title("窗体标题")
ParenthWnd = FindWindow(null, "窗体标题");
//ShowWindow(ParenthWnd, 0);//隐藏本dos窗体, 0: 后台执行;1:正常启动;2:最小化到任务栏;3:最大化
Thread checkMiniMinimizedThread=new Thread(new ThreadStart(checkMiniMinimized));
checkMiniMinimizedThread.Start();
while (true)
{
Application.DoEvents();
if (_IsExit)
{
break;
}
Thread.Sleep(1000);
}
}
//检测窗体是否被最小化了
static void checkMiniMinimized()
{
while (true)
{
var proc = Process.GetProcessesByName("程序进程名字");
if (proc.Length > 0)
{
bool isNotepadMinimized = GetMinimized(proc[0].MainWindowHandle);
if (isNotepadMinimized)
{
Console.WriteLine("窗口被最小化了");
}
}
Thread.Sleep(1000);
}
}
private struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public System.Drawing.Point ptMinPosition;
public System.Drawing.Point ptMaxPosition;
public System.Drawing.Rectangle rcNormalPosition;
}
public static bool GetMinimized(IntPtr handle)
{
WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
placement.length = Marshal.SizeOf(placement);
GetWindowPlacement(handle, ref placement);
return placement.showCmd == SW_SHOWMINIMIZED;
//1 = normal
//2 = minimized
//3 = maximized
}
}
}
C# 控制台程序检测程序窗体最大最小化
最新推荐文章于 2024-05-29 19:43:56 发布