移动窗口(),跳过,躲避或绕过消息传递

MoveWindow(), skip, dodge or bypass messaging?

本文关键字:消息传递 躲避 跳过 窗口 移动      更新时间:2023-10-16

我正在使用MoveWindow()调整窗口大小,但我不拥有该窗口。我只是从不同的进程中偷走了它,现在我正在弄乱它的 hWindow。

然而,我从中窃取它的过程是运行一个消息循环,处理其中一些消息(WM_MOVEWM_SIZEWM_GETMINMAXINFO等),这基本上阻止了我用它做任何我想做的事情。有时,它甚至不会让我将其大小调整到超过给定的最大值,这是使其全屏运行的关键。

除了使用 asm,还有什么方法可以绕过消息传递吗?

SetWindowPos有一个标志,不告诉窗口你正在用它做某事:

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

正如注释中提到的,在代码中依赖这种行为,你将使用更多的乐趣是不好的,对其他窗口也不公平,而且你很容易遇到问题。Raymond Chen对此有一些特别有趣的博客文章,即"如果两个程序这样做会怎样?