大部分软件都会有这样一个需求,软件在运行中,再次点击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);