Используйте либо заголовок окна, либо имя процесса - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над обработчиком 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...