Windows API MoveWindow возвращает true, даже если функция не выполнена - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь переместить процесс на 2-й экран с помощью функции MoveWindow:

while (!process.HasExited)
{
     IntPtr id = process.MainWindowHandle;
     if (id != IntPtr.Zero)
     {                   
          var result = MoveWindow(id,
                                Convert.ToInt32(secondScreen.WorkingArea.X),
                                Convert.ToInt32(secondScreen.WorkingArea.Y),
                                Convert.ToInt32(secondScreen.WorkingArea.Width),
                                Convert.ToInt32(secondScreen.WorkingArea.Height),
                                true);

     Thread.Sleep(500);

     if (result == true)
     {
            break;
     }
}

[DllImport("user32.dll", SetLastError = true)]
public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

Поэтому у меня проблема в том, что иногда этот код работает, а иногда нет.

Причина в том, что MoveWindow возвращает true, и я выхожу из этого while l oop, используя break;, но MoveWindow не перемещает его на 2-й экран правильно.

Так что, если я уберу break;, он будет работать все время, но у меня будет while l oop, работающий все время, и это не то, что я хочу.

Вы знаете, как я мог решить эту проблему?

1 Ответ

0 голосов
/ 22 апреля 2020

Я полагаю, что вы пытались , должно работать, но поскольку это не так, попробуйте изменить условие, из которого вы выходите, или попробуйте использовать do l oop, как у меня ниже ,

IntPtr id = process.MainWindowHandle;
if (id != IntPtr.Zero)
{                   
    var result = false;
    do
    {
        result = MoveWindow(id,
            Convert.ToInt32(secondScreen.WorkingArea.X),
            Convert.ToInt32(secondScreen.WorkingArea.Y),
            Convert.ToInt32(secondScreen.WorkingArea.Width),
            Convert.ToInt32(secondScreen.WorkingArea.Height),
            true);

        Thread.Sleep(500); 
    } while (return != true && !process.HasExited)
} // This one was missing.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...