Я работаю над проектом, в котором я должен сначала разбить, а затем изменить размер окна на рабочем столе. Я могу разделить экран рабочего стола, используя службу pinvoke TileWindows
. Но я застрял в другой части, чтобы изменить размер окон на рабочем столе. Потому что сначала я должен поймать событие, что какое-то окно размером на рабочем столе. Чтобы поймать это событие, я использовал код this, полученный в SO.события изменения размера окна окна C#
[DllImport("user32.dll", SetLastError = true)]
internal static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr hmodWinEventProc, WinEventProc lpfnWinEventProc, int idProcess, int idThread, uint dwflags);
[DllImport("user32.dll")]
internal static extern int UnhookWinEvent(IntPtr hWinEventHook);
internal delegate void WinEventProc(IntPtr hWinEventHook, uint iEvent, IntPtr hWnd, int idObject, int idChild, int dwEventThread, int dwmsEventTime);
const uint WINEVENT_OUTOFCONTEXT = 0;
const uint EVENT_SYSTEM_FOREGROUND = 3;
private IntPtr winHook;
private WinEventProc listener;
public void StartListeningForWindowChanges()
{
listener = new WinEventProc(EventCallback);
//setting the window hook
winHook = SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, IntPtr.Zero, listener, 0, 0, WINEVENT_OUTOFCONTEXT);
}
public void StopListeningForWindowChanges()
{
UnhookWinEvent(winHook);
}
private static void EventCallback(IntPtr hWinEventHook, uint iEvent, IntPtr hWnd, int idObject, int idChild, int dwEventThread, int dwmsEventTime)
{
MessageBox.Show("I am here");
}
проблема, которую я получаю, - это событие увольняется, даже если я не изменил размер окна на экране. И, как вы можете видеть, я положил messageBox
в функцию eventCallback
, и она всплывает, но интересно, что она ничего не показывает на своей кнопке ok
.
Это потому, что вы не слушаете для изменения размера событий, EVENT_SYSTEM_FOREGROUND говорит вам, когда окно перемещается на передний план. Вместо этого используйте EVENT_SYSTEM_MOVESIZEEND или EVENT_OBJECT_LOCATIONCHANGE. –
спасибо, я изменил его на MOVESIZEEND, и теперь он стреляет с изменением размера, но все еще стреляет непрерывно, даже когда я ничего не изменил. И в этом поле сообщения ничего не отображается. –
откровенно говоря, я использую pinvoke в первый раз, поэтому мои вопросы могут выглядеть глупыми вопросами. –