如何做到如下操作?

jianmuyan 2009-02-25 05:00:12
例如:对话框a.exe和对话框b.exe,我在a上点击按钮可以呼出b,在此期间可能我去进行别的操作,b已经被最小化或置后了。如果再点击a上的此按钮时可以使已经运行的b对话框置前显示,b是个单独的程序,不是本人所写。这一步不知道怎么做:再点击a上的此按钮时可以使已经运行的b对话框置前显示。
...全文
97 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianmuyan 2009-02-26
  • 打赏
  • 举报
回复
完成了。谢谢各位。。结贴
youhao1999 2009-02-26
  • 打赏
  • 举报
回复
1用FindWindowEx查找窗口
2用GetWindowThreadProcessId获取窗口所属的进程
3GetModuleFileNameEx获取进程名
jyh_baoding 2009-02-26
  • 打赏
  • 举报
回复
帮顶
逸萌 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cnzdgs 的回复:]
循环用FindWindowEx查找窗口,找到后用GetWindowThreadProcessId获取窗口所属的进程ID,再OpenProcess、GetModuleFileNameEx、CloseHandle获取进程名称,根据进程名确定是不是要找的窗口,然后用ShowWindow控制显示。
[/Quote]
也对,但上面的code应该可以满足你的要求了哈
逸萌 2009-02-25
  • 打赏
  • 举报
回复
怎么不搜搜以前的贴子呢? http://topic.csdn.net/t/20020907/19/1005057.html
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam)
{
DWORD ProcId;
DWORD ThreadId;
ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)
if(ProcId==your process ID)
{
HWND targetWin; //进程主窗口
targetWin=hwnd;
while(true)
{
HWND hTemp;
hTemp=GetParent(targetWin);
if(hTemp==NULL)
break;
else
targetWin=hTemp;
}
return FALSE;
}
else
return true;
}

EnumWindows(EnumWindowsProc,0);
jianmuyan 2009-02-25
  • 打赏
  • 举报
回复
循环用FindWindowEx如何用?
逸萌 2009-02-25
  • 打赏
  • 举报
回复
或者通过进程的ID得到一个进程的主窗体句柄
逸萌 2009-02-25
  • 打赏
  • 举报
回复
枚举出所有窗口标题,然后对它们进行判断.

或者通过窗口的类来寻找
beyonld 2009-02-25
  • 打赏
  • 举报
回复
最小化后要ShowWindow(pWndPrev, SW_SHOWNORMAL)再置前
cnzdgs 2009-02-25
  • 打赏
  • 举报
回复
循环用FindWindowEx查找窗口,找到后用GetWindowThreadProcessId获取窗口所属的进程ID,再OpenProcess、GetModuleFileNameEx、CloseHandle获取进程名称,根据进程名确定是不是要找的窗口,然后用ShowWindow控制显示。
lllsui 2009-02-25
  • 打赏
  • 举报
回复
mark
jianmuyan 2009-02-25
  • 打赏
  • 举报
回复
前几个字母不变。后几位有可能变化
jianmuyan 2009-02-25
  • 打赏
  • 举报
回复
b的标题栏名字是可变的,FindWindow怎么进行查找
逸萌 2009-02-25
  • 打赏
  • 举报
回复
在a中启动b前加入
CWnd *pWndPrev = NULL;
CWnd *pWndChild = NULL;

pWndPrev = CWnd::FindWindow(NULL, _T("b"));//应用程序的名字:b.exe->b
if (NULL != pWndPrev)
{
// If so, does it have any popups?
pWndChild = pWndPrev->GetLastActivePopup();

// If iconic, restore the main window
if (pWndPrev->IsIconic())
pWndPrev->ShowWindow(SW_RESTORE);

// Bring the main window or its popup to the foreground
if (pWndChild != NULL)
{
pWndChild->SetForegroundWindow();
}
else
{
pWndPrev->SetForegroundWindow();
}
}
else
{
//启动b
}
在wince 及 PC上都没有问题
  • 打赏
  • 举报
回复
学习。。帮顶

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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