使用SetParent将窗口嵌入外部进程的各种问题
Various issues using SetParent to embed window into external process
可能的重复项:
使用 SetParent 将 HWND 嵌入到外部进程中
我正在尝试使用 SetParent
函数将进程中的一个窗口嵌入到外部进程的窗口中,并遇到了一些问题,我希望有人可以帮助我解决。首先,以下是我目前正在将窗口嵌入应用程序的概述:
WND myWindow; //Handle to my application window
HWND externalWindow; //Handle to external application window
SetParent(myWindow,externalWindow);
//Remove WS_POPUP style and add WS_CHILD style
DWORD style = GetWindowLong(myWindow,GWL_STYLE);
style = style & ~(WS_POPUP);
style = style | WS_CHILD;
SetWindowLong(myWindow,GWL_STYLE,style);
此代码有效,我的窗口出现在其他应用程序中,但引入了以下问题:
- 当我的窗口获得输入焦点时,外部进程的主应用程序窗口失去焦点(即标题栏改变颜色)。
- 当我的窗口具有焦点时,主应用程序的键盘快捷键命令不起作用。
有谁知道这些问题的解决方法?我希望我的窗口被视为主应用程序的另一个子窗口。
谢谢。
当我的窗口获得输入焦点时,外部进程的主应用程序窗口失去焦点(即标题栏改变颜色)。
您需要使用 AttachThreadInput
将进程的线程附加到主机进程的输入队列。 除了在所有附加的线程之间同步消息处理之外,这还会导致它们共享焦点、异步键状态、激活和其他与输入相关的属性。
当我的窗口具有焦点时,主应用程序的键盘快捷键命令不起作用。
当窗口具有键盘焦点时,拥有窗口的线程将从系统接收所有键盘消息。 如果需要主窗口的 UI 线程来处理加速器,则必须以某种方式将键盘输入路由到该线程进行预处理。 如何执行此操作在很大程度上取决于您用于应用程序的 UI 技术以及需要如何处理加速器。
构建一个跨越不同进程中的多个线程的用户界面是困难的,并且存在许多陷阱。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 父进程意外被子 cmd 杀死.exe运行 java jar 的进程 - WINDOWS 7 问题 - C++
- 使用管道从 STDIN 读取分叉进程时出现问题
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 在 c++ 中等待一个子进程与另一个子进程时遇到问题
- 使用boost进程间库的phpexec共享内存和Cloudfoundry容器问题
- 从导致问题的java进程附加到外部c++进程
- 使用SetParent将窗口嵌入外部进程的各种问题
- 读取进程内存问题未更新
- C++创建进程 - 系统错误#2找不到文件 - 我的文件路径有什么问题?
- 从另一个进程访问STA对象时出现问题
- COM进程中DLL中的DllMain出现问题
- 打开带有DEBUG标志的进程的问题
- 创建读取面向互联网的套接字的守护进程有什么安全问题?
- Q执行带参数的exe时出现进程问题
- 枚举进程句柄,奇怪的问题
- Q进程::执行(“清除”)问题
- 在Qt中使用windows进程时的问题