Я работаю над обработчиком windows Я новичок от sh до C# У меня есть большая часть кода, но я не могу понять, как это сделать, чтобы вы могли использовать любой заголовок окна, например это в настоящее время или имя процесса, например, «блокнот». Я пробовал a для каждого l oop, но затем он пытался изменить мою stati c main на IntPtr main.
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace TP_WinState
{
class Program
{
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
static void Main(string[] args)
{
if (args.Length < 2)
{
return;
}
String window = args[0];
Dictionary<string, int> dictionary = new Dictionary<string, int>
{
{ "Hide", 0 },
{ "Show Normal", 1 },
{ "Show Minimized", 2 },
{ "Show Maximized", 3 },
{ "Show Active", 4 },
{ "Restore", 9 },
{ "Show Default", 10 },
{ "Close", 98 },
{ "Force Close", 99 }
};
IntPtr hWnd = FindWindowByCaption(IntPtr.Zero, window);
if (hWnd == IntPtr.Zero) { Console.WriteLine("Window not found"); return; }
if (!Int32.TryParse(args[1], out int nCmdShow))
nCmdShow = dictionary[args[1]];
if (nCmdShow > 10)
{
UInt32 message = 0x0000;
switch (nCmdShow)
{
case 98:
message = 0x0010; break;
case 99:
message = 0x0002; break;
default: break;
}
SendMessage(hWnd, message, IntPtr.Zero, IntPtr.Zero);
}
else
ShowWindowAsync(hWnd, nCmdShow);
}
}
}