2012-06-15 3 views
0

Я изменяю размер окна с MoveWindow(), но у меня нет этого окна. Я просто украл его из другого процесса, и теперь я возился с его hWindow.MoveWindow(), пропускать, обманывать или обходить сообщения?

Однако процесс, который я украл его из бегал цикл обработки сообщений, обработку некоторых из этих сообщений (WM_MOVE, WM_SIZE, WM_GETMINMAXINFO и т.д.), которые в основном мешают мне делать то, что я хочу с ним. Иногда это даже не позволяет мне оценить его за определенный максимум, что является ключом к его запуску в полноэкранном режиме.

За исключением использования asm, есть ли способ обойти обмен сообщениями?

+2

[SetWindowPos] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545 (v = vs.85) .aspx) может работать с 'SWP_NOSENDCHANGING'. Я никогда не пробовал. – chris

+1

Почему вы возитесь с окном другого процесса? Это не твоя игра. –

+0

@AdamRosenfield держишься за своих лошадей, я просто закручиваю вокруг него. (* = создание полноэкранного режима) –

ответ

1

SetWindowPos имеет флаг, чтобы не сказать окно, что вы делаете что-то с ним:

SetWindowPos (hwnd, 0, x, y, width, height, SWP_NOZORDER | SWP_NOSENDCHANGING); 

Как упоминалось в комментариях, опираясь на это поведение в коде вы будете использовать для более, чем с немного веселья - это не хорошо, не справедливо для других окон, и вы можете очень легко столкнуться с проблемами. Raymond Chen имеет некоторые особенно интересные сообщения в блоге об этом, а именно такие вещи, как «Что делать, если две программы сделали это?»