c ,c++,vc实现程序不在任务栏显示

 我来答
匿名用户
2013-08-26
展开全部
其实获得窗体的句柄然后 ShowWindow(hWnd, SW_HIDE ); 就可以了。

----

我在这里顺便解答“如何实现在C++中隐藏程序运行 ”的那个问题(因为变成了投票,而且写了出来不发又感到不爽)这里开始~

嗯,隐藏程序运行,说白了就是隐藏进程。要隐藏进程的话其实还是有很多种类的,底层的且不说,比较简单的实现方法是 创建远程线程(CreateRemoteThread),还有API Hook等。

我这里简略讲讲远程线程的实现原理。
首先枚举你想要创建远程线程的那个进程,其实哪个都不会太大关系的。举例如"smss.exe",不过这个是系统进程,所以需要有Debug权限才能创建远程线程,这个就迟点再说。ps.可以用Toolhelp32工具来枚举进程。用OpenProcess可以根据进程id得到hProcess

第二步导出你的代码需要的API liner address,用LoadLibrary,GetProcAddress就行了。然后把这所有的东东以及你的数据都保存在一个结构体内,如RemoteDataPara,这是为了在不同的进程地址空间读取你要运行的代码的数据。

跟着用VirtualAllocEx指定进程的虚拟空间保留或提交内存区域,划分一个数据区,一个代码区。分别保存这两个地址。然后用WriteProcessMemory将数据写入刚才的两个区域。

好了,调用CreateRemoteThread,你的这个代码就以线程的形式挂进别人的进程了。CreateRemoteThread需要一个函数的入口,就把你刚刚用VirtualAllocEx划分的代码区的地址传递。下面是RemoteThreadProc的形式,这个我自己用的,你可以参照其他MSDN的原型。

DWORD __stdcall ThreadProc(RemoteDataPara *lpPara)

里面的所有API函数原型要重新定义,所有的变量要在RemoteDataPara数据体给出。
建议用内联汇编使到程序变得简单。

ps.如果要挂进系统进程,在CreateRemoteThread前需要以下代码,跟关机权限的代码差不多,我就不一一讲述了

void EnableDebugPrivilege(void)
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
return;

if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&sedebugnameValue))
{
CloseHandle(hToken);
return;
}

tkp.PrivilegeCount =1;
tkp.Privileges[0].Luid =sedebugnameValue;
tkp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken,false,&tkp,sizeof(tkp),NULL,NULL))
{
CloseHandle(hToken);
return;
}
}

至于API Hook的实现形式有比较多种可以通过SEH实现API Hook,或者直接修改API头用Jmp跳进自己的代码空间,也是可行的,等等。
匿名用户
2013-08-26
展开全部
你建立程序的时候不用控制台来写(CONSLOE),选用WINMAIN做入口就可以了,不画窗口,别人就都看不见了.或者你写好了程序不想改了你就新建一个API程序,不要画窗口,然后用CreateProcess调用写好的控制台(console)程序,然后调用ShowWindow把属性设成SW_HIDE即可
如果完全不需要用户操作的话可以加一个预编译语句在main之前也可以隐藏程序
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-26
展开全部
实验一:指示灯控显示(要出现灯亮灯暗的效果)
#define N 10
main()
{
int i,j,k,light[N];
for(i=1;i<=N;i++)
light[i-1]=1;/* 1亮,0灭,开始都亮着*/
for(i=1;i<=N;i++)
{
j=i;
while(j<=N)
{light[j-1]+=1;j+=i;}
for(k=1;k<=N;k++)
printf("%d ",light[k-1]%2);
printf("\n");
}
}

其他的够麻烦了!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式