Простой хук на изменение размеров и положения окна - C#
Формулировка задачи:
Как можно сделать так, чтобы моя программа C# могла реагировать на изменение размеров и положения некоего стороннего окна? Я знаю хэндл этого окна (IntPtr hWnd), например, это блокнот. Когда пользователь подвинул окно, моя программа должна тоже что-либо сделать, например, вывести сообщение или тоже изменить размеры и т.п. Как я понял, нужно установить хук, осталось узнать как это сделать наиболее простым способом. Спасибо)
Решение задачи: «Простой хук на изменение размеров и положения окна»
textual
Листинг программы
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace ConsoleApplicationMy { class Program { [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr hmodWinEventProc, WinEventDelegate lpfnWinEventProc, uint idProcess, uint idThread, uint dwFlags); [DllImport("user32.dll")] static extern bool UnhookWinEvent(IntPtr hWinEventHook); delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime); const uint EVENT_OBJECT_LOCATIONCHANGE = 0x800B; const uint WINEVENT_OUTOFCONTEXT = 0; static IntPtr myHandle; static WinEventDelegate procDelegate; static IntPtr hhook; static void Main(string[] args) { myHandle = FindWindow("Notepad", "Безымянный — Блокнот"); if (myHandle == IntPtr.Zero) { return; } procDelegate = new WinEventDelegate(WinEventProc); hhook = SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE, EVENT_OBJECT_LOCATIONCHANGE, IntPtr.Zero, procDelegate, 0, 0, WINEVENT_OUTOFCONTEXT); MessageBox.Show(""); UnhookWinEvent(hhook); } static void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime) { if (myHandle == hwnd) { Console.WriteLine(DateTime.Now.ToString()); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д