首页
社区
课程
招聘
[求助]VC如何隐藏运行程序的界面?
发表于: 2010-11-5 17:01 6549

[求助]VC如何隐藏运行程序的界面?

2010-11-5 17:01
6549
我想隐藏正在运行的程序,比如QQ,暴风。
任何人在屏幕上都看不到,用鼠标卡也点不出来,只能通过热键或者别的方式显现。

这如何实现?可否给个思路?

难道要用OD调,自己改它的程序,把ShowWindow这样的函数改掉?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2
system权限下运行,通过热键的时候,切换到用户权限。。。。
2010-11-5 17:35
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
我的这个不太完美   在隐藏后右下角会有一个空白    我不知道是为什么   希望你能完善下
然后告诉我
ps。这样的问题  最好发到求助问答区。。。
#include <atlbase.h>
#include <atlconv.h>
#include <CommCtrl.h>

void HideWindow(HWND h, BOOL bHide)
{
	ShowWindow(h, bHide? SW_HIDE:SW_SHOW);
}

void HideTrayIcon(char szIcon[],BOOL show)
{
    HWND hWnd,hWndPaper;
    unsigned long lngPID;
    long lngButtons;
    HANDLE hProcess;
    LPVOID lngAddress;
    long lngHwndAdr,lngHwnd;
    char strBuff[1024]={0};
	TBBUTTON  tbButton;

    hWnd = FindWindow("Shell_TrayWnd", NULL);
    hWnd = FindWindowEx(hWnd, 0, "TrayNotifyWnd", NULL);
    hWndPaper = FindWindowEx(hWnd, 0, "SysPager", NULL);
    if(!hWndPaper)
        hWnd = FindWindowEx(hWnd, 0, "ToolbarWindow32", NULL);
    else
        hWnd = FindWindowEx(hWndPaper, 0, "ToolbarWindow32", NULL);
    GetWindowThreadProcessId(hWnd, &lngPID);
    hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, 0, lngPID);
    lngAddress = VirtualAllocEx(hProcess, 0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
    lngButtons = SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);
	

    for(int i=0 ;i<lngButtons;i++)
    {
        SendMessage(hWnd,TB_GETBUTTON, i, long(lngAddress));
        ReadProcessMemory(hProcess, LPVOID(long(lngAddress)), &tbButton, sizeof(tbButton),0);
        ReadProcessMemory(hProcess, LPVOID(tbButton.iString),strBuff,1024,0);
        ReadProcessMemory(hProcess, LPVOID(tbButton.dwData),&lngHwndAdr,4,0);
        ReadProcessMemory(hProcess, LPVOID(lngHwndAdr),&lngHwnd, 4,0);

        USES_CONVERSION;
        char *str = OLE2T((LPOLESTR)(strBuff));
        if(strstr(str,szIcon))
		{
			SendMessage(hWnd,TB_HIDEBUTTON, tbButton.idCommand, MAKELONG (show, 0));
			break;
		}
    }
    VirtualFreeEx( hProcess,  lngAddress,  0X4096, MEM_RELEASE);
    CloseHandle(hProcess);
}

int main(int argc, char* argv[])
{
	//隐藏TM(我电脑上是tm,如果你电脑上是qq那就类似的设置一下)
	HideWindow(FindWindow(0, "TM2009"), TRUE);
	HideTrayIcon("TM", TRUE);

	for (int i=0; i<5; i++)
	{
		printf("%d秒之后恢复。。。\r\n", 5-i);
		Sleep(1000);
	}

	//恢复
	HideWindow(FindWindow(0, "TM2009"), FALSE);
	HideTrayIcon("TM", FALSE);
	return 0;
}
2010-11-5 20:22
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
在 SendMessage(hWnd,TB_HIDEBUTTON, tbButton.idCommand, MAKELONG (show, 0));
后面加一句
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
2010-11-5 20:58
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真是太牛了!
2010-11-8 18:29
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
6
不错 学习了。。
2010-11-8 20:19
0
游客
登录 | 注册 方可回帖
返回
//