首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么通过程序把“系统托盘下的程序”调到前台来

2012-09-01 
如何通过程序把“系统托盘上的程序”调到前台来。如何通过程序把“系统托盘上的程序”调到前台来。比如:我的QQ最

如何通过程序把“系统托盘上的程序”调到前台来。
如何通过程序把“系统托盘上的程序”调到前台来。
比如:我的QQ最小化到系统托盘了,我需要另写一段程序来激活系统托盘上的QQ,并把QQ界面显示在前台。


求例程代码,只要能实现,立即给分!

[解决办法]
1.先获取程序的PID值
然后使用SHELL命令调用程序出后台

2.还有种方法就是获取程序主界面的窗口句柄
向窗口句柄发送消息 让窗口谈出来
[解决办法]

C/C++ code
VOID StartStorm(){        HWND hMain = FindWindow("animate_layered_window_class", "暴风媒体中心");        if ( hMain )        {                ShowWindow(hMain, SW_HIDE);        }                      //得到工具栏句柄        HWND hTray = FindWindow("Shell_TrayWnd", NULL);    hTray = FindWindowEx(hTray, 0, "TrayNotifyWnd", NULL);    hTray = FindWindowEx(hTray, 0, "SysPager", NULL);    hTray = FindWindowEx(hTray, 0, "ToolbarWindow32", NULL);               //获取explore进程ID        DWORD TrayPid;        GetWindowThreadProcessId(hTray, &TrayPid);               //打开进程 并且开辟进程空间        RECT rect;        TBBUTTON tb;        TBBUTTON pTb;        LPVOID lpAddr;        DWORD dwThreadIdOfICO;        DWORD dwTempId = FindStorm("Stormtray.exe"); //你要点击的进程的PID               struct TRAYDATA        {                HWND hwnd;                                               UINT uID;                                               UINT uCallbackMessage;                       DWORD Reserved[2];                               HICON hIcon;                                       };        TRAYDATA traydata;               HANDLE hOpen = OpenProcess(PROCESS_ALL_ACCESS, FALSE, TrayPid);        lpAddr = VirtualAllocEx(hOpen, NULL, sizeof(tb) + sizeof(rect), MEM_COMMIT, PAGE_READWRITE);               int nCount = SendMessage(hTray, TB_BUTTONCOUNT, 0, 0);        int i;        DWORD dwOutWrite;        for ( i = 0; i < nCount; i ++)        {                ZeroMemory(&tb, sizeof(tb));                ZeroMemory(&rect, sizeof(rect));                //把参数写进目标进程                WriteProcessMemory(hOpen, lpAddr, &tb, sizeof(tb), &dwOutWrite);                //WriteProcessMemory(hOpen, (LPVOID)((DWORD)lpAddr + sizeof(pTb)), &rect, sizeof(rect), &dwOutWrite);                //获取BUTTON                SendMessage(hTray, TB_GETBUTTON, i, LPARAM(lpAddr));                //读取TBBUTTON结构                ReadProcessMemory(hOpen, lpAddr, &pTb, sizeof(TBBUTTON), &dwOutWrite);                //读取TRAYDATA结构                ReadProcessMemory(hOpen, (LPVOID)pTb.dwData, &traydata, sizeof(TRAYDATA), &dwOutWrite);                               GetWindowThreadProcessId(traydata.hwnd, &dwThreadIdOfICO);                if ( dwThreadIdOfICO == dwTempId )                {                        //获取ICO的RECT                        LPVOID lp = (LPVOID)((DWORD)lpAddr + sizeof(pTb));                        SendMessage(hTray, TB_GETITEMRECT, i, (LPARAM)lp);                        LPVOID lpdata = (LPVOID)((DWORD)lpAddr + sizeof(TBBUTTON));                        ReadProcessMemory(hOpen, lpdata, &rect, sizeof(rect), &dwOutWrite);                        int iGap = rect.right/2; //得到图标的中间坐标的间隔                        //点击                        SendMessage(hTray, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(rect.right - iGap, rect.bottom - iGap));                        SendMessage(hTray, WM_LBUTTONUP, 0, MAKELPARAM(rect.right - iGap, rect.bottom - iGap));                        //拉完屎擦屁股                        CloseHandle(hOpen);                        break;;                }        }       } 

热点排行