ShowWindow后窗体最小化按钮失效的问题

robbierong 2007-08-09 10:54:07
各位大侠,请看以下代码:
HWND hWnd = ::FindWindow(NULL, TEXT("PM Control Panel"));
LONG l = ::GetWindowLong(hWnd, GWL_HINSTANCE);
if (hWnd) {
::ShowWindow(hWnd, SW_NORMAL);
::SetForegroundWindow(hWnd);
}

我用FindWindow找的另一个程序的主窗口,而这个程序是用VCL编制的,没有源代码,我发现这段代码运行后那个主窗口的最小化按钮失效了,
我在网上搜了下,有个解决方案,但我看不懂, 如下:

基于VCL的应用程序主窗体不会最小化,当主窗体接收到最小化消息时,它会传递到应用程序窗口。
使用Findwindow函数找到的是主窗体的句柄,而不是应用程序句柄(Application.Handle),所以建议用GetWindowLon函数进一步获得应用程序句柄,就可以避免最小化按钮失效的现象。

怎么扯到GetWindowLong上面去了,我是用VC的,特地请教各位C++ Builder高手。
...全文
375 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
HikerLive 2007-09-11
  • 打赏
  • 举报
回复
帮顶一下robbierong,我最近也碰到类似问题,也看到那个GetWindowLong()方法,试啦也没有成功,郁闷很久啦,现仍在苦苦寻觅解决方法。有请大侠帮忙啊!
Waiting4you 2007-08-16
  • 打赏
  • 举报
回复
要找到BCB编的程序的Application,不要找主窗口, 直接用:
HWND hWnd= ::FindWindow(_T("TApplication"), _T("PM Control Panel程序运行后任务栏上的标题"));

向它发最小化消息.
daily66 2007-08-16
  • 打赏
  • 举报
回复
GetWindowLong函数功能描述:
用这个函数能够获得指定窗口的信息。得到后必须使用CallWindowProc函数来调用 GWL_HINSTANCE 得到应用程序运行实例的句柄GWL_HWNDPARENT 得到父窗口的句柄GWL_ID 得到窗口的标识符GWL_USERDATA 得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位 的值)得到后必须使用CallWindowProc函数来调用 DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值DWL_USER 得到额外的应用程序私有信息,如一些句柄和指针等。
希望对楼主有点帮助
zhaoyangokok 2007-08-09
  • 打赏
  • 举报
回复
关注,有空帮你看看
现在午睡时间

13,869

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧