关于窗口前端显示和置顶


//根据进程名获取进程ID
DWORD GetPidByProcessName(TCHAR *pProcess)
{
 HANDLE hSnapshot;
 PROCESSENTRY32 lppe;
 //创建系统快照
 hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); //#include<Tlhelp32.h>

 if (hSnapshot == NULL)
  return 0;

 //初始化 lppe 的大小
 lppe.dwSize = sizeof(lppe);

 //查找第一个进程
 if (!::Process32First(hSnapshot, &lppe))
  return false;
 do
 {
  if(StrCmp(lppe.szExeFile, pProcess) == 0)
  {
   return lppe.th32ProcessID;
  }  
 }
 while (::Process32Next(hSnapshot, &lppe)); //查找下一个进程 

 return 1;
}

//根据进程ID获取窗口ID
HWND GetHwndByPid(DWORD dwProcessID)
{
 //返回Z序顶部的窗口句柄
 HWND hWnd = ::GetTopWindow(0);

 while ( hWnd )
 {
  DWORD pid = 0;
  //根据窗口句柄获取进程ID
  DWORD dwTheardId = ::GetWindowThreadProcessId( hWnd,&pid);

  if (dwTheardId != 0)
  {
   if ( pid == dwProcessID )
   {
    return hWnd;
   }
  }
  //返回z序中的前一个或后一个窗口的句柄
  hWnd = ::GetNextWindow(hWnd , GW_HWNDNEXT);

 }
 return hWnd;
}

//前端显示并置顶窗口
void ShowForeGround(HWND hWnd)
{

 if (hWnd)
 {
  //显示窗口
  ::ShowWindow(hWnd, SW_NORMAL);

  //前端显示
  ::SetForegroundWindow(hWnd);

  //窗口置顶
  ::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
 }
 else
 {
  ::MessageBox(NULL, _T("未找到窗口"), _T("提示"),MB_OK);
 }
}

void CMFCApplication1Dlg::OnBnClickedMfcbutton1()
{
 DWORD dwPid = GetPidByProcessName(_T("notepad.exe"));
 HWND hWnd = GetHwndByPid(dwPid);
 ShowForeGround(hWnd);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值