窗口前端显示和置顶,发送消息

来源:互联网 发布:制作vpn客户端软件 编辑:程序博客网 时间:2024/06/06 18:05

首先根据进程名获取到进程的ID(这里只是测试,所以只需要得到其中一个ID就行了)GetPidByProcessName
然后根据进程ID获取窗口句柄 GetHwndByPid
最后将窗口前端显示并置顶 ShowForeGround

//根据进程名获取进程IDDWORD 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获取窗口IDHWND 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);    //发送按键F1消息,等同F1被按下    ::PostMessage(m_hwnd, WM_KEYDOWN, VK_F1, 0);    ::PostMessage(m_hwnd, WM_KEYUP, VK_F1, 0);}
原创粉丝点击