windows窗口如何在软件已经运行了的情况下再次点击exe,该窗口置顶。

    大部分软件都会有这样一个需求,软件在运行中,再次点击exe或者快捷方式让该软件窗口置顶。

     最简单的方法就是调用windows api:

            HWND hWnd = ::FindWindow(NULL, _T("你的软件名称")); //通过窗口名称找到句柄
            if(hWnd != NULL)
                ::SetForegroundWindow(hWnd); //置顶

     以上方法有个缺点:软件最小化以后再双击exe无效。

BOOL CALLBACK EnumWindowsProc(
    _In_ HWND   hwnd,
    _In_ LPARAM lParam
    )
{
    wchar_t pwszWndText[MAX_PATH] = { 0 };
    GetWindowText(hwnd, pwszWndText, MAX_PATH);
    if (!wcscmp(pwszWndText, L"你的软件名称")) 
    {
        HANDLE  hFalg =  GetPropW(hwnd, L"你设置的属性字符串");
        if (hFalg == (HANDLE)666)
        {
            *(HANDLE*)lParam = hwnd;
            return FALSE;
        }
    }
    return TRUE;
}

HWND GetCBMainWnd()
{
    HWND hWndAomei = NULL;
    EnumWindows(EnumWindowsProc, (LPARAM)&hWndAomei);
    return hWndAomei;
}

 

在main最开头写: HWND hWnd = GetCBMainWnd();
            if(hWnd != NULL)
            { 
                ::ShowWindow(hWnd, SW_SHOWNORMAL);
                ::SetForegroundWindow(hWnd); //置顶                  
            }

在窗口实例化以后获取句柄并设置:

HWND mainWnd = (HWND)mainWdg.winId();  //mainWnd 主窗口
SetPropW(mainWnd, L"你设置的属性string", (HANDLE)666); 

 

 

 

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值