一 subsystem和可执行文件的启动
LINK的时候需要指定/subsystem,这个链接选项告诉Windows如何运行可执行文件。
我们知道用VC编写的程序,运行的时候是需要 C/C++运行库支持的当我们运行一个C/C++程序的时候
链接器会首先寻找应用程序的启动函数,例如:
如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式
/subsystem:"console" /entry:"mainCRTStartup" (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)
将 subsystem 选成"console"后,Windows在进入可执行文件的代码前(如mainCRTStartup),就会产生一个控制台窗口。之后mainCRTStartup 或 wmainCRTStartuup 会调用main或wmain。
如果你建立了一个win32 application,编译器得链接开关则会是一下形式
/subsystem:"windows" /entry:"WinMainCRTStartup" (ANSI)
/sbusystem:"windows" /entry:"wWinMainCRTStartup" (UINCODE)
将 subsystem 选成"console"后, *** 作系统就不产生console窗口,该类型应用程序的窗口由用户自己创建。WinMainCRTStartup 或 wWinMainCRTStartup 会调用 WinMain 或 wWinMain。
值得一提的是,在进入应用程序的Entry Point前,Windows的装载器已经做过C变量的初始化,有初值的全局变量拥有了它们的初值,没有初值的变量被设为0。
二 隐藏console窗口
有两种方法:
1 在默认情况下/subsystem 和/entry开关是匹配的,也就是:
"console"对应"mainCRTStartup"或者"wmainCRTStartup "
"windows"对应"WinMainCRTStartup "或者"wWinMainCRTStartup "
我们可以通过手动修改的方法使他们不匹配。例如:
#include "windowsh"
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" ) // 设置入口地址
void main(void)
{
MessageBox(NULL, "hello", "Notice", MB_OK);
}
这个Console程序就不会显示Console窗口。
上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的
project->setting->link->project option中手工改动!
2 还有一个更直接的方法:那就是直接在EXE文件中将PE文件头的Subsystem从3改成2。在EXE文件中,PE文件头的偏移地址是0x3c,Subsystem是一个WORD,它在PE文件头中的偏移是0x5c。
在程序开始写\x0d\ShowWindow(GetConsoleWindow(), SW_HIDE);\x0d\\x0d\注意要包含windowsh。\x0d\\x0d\但这样依然会有控制台的窗口一闪而过。完美的方法是写WinMain入口的Win32程序,不产生窗口只建立消息循环,这样就完全没有窗口。
一般情况下随系统启动的程序都可以在“系统配置”中找到;
我们可以通过开始→运行在其中输入 msconfigexe
在“启动”栏中就可以找到随系统启动的程序了;
如果依然没有找到,那么我们依然在“运行”窗口中输入 regeditexe
再到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]主键中查找,如果依然未能找到,就再到[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]主键中查找,如果还是未能找到那么我们可以通过开始→控制面板→管理工具→服务,打开系统服务控制面板,在其中查找启动类型为自动的服务项目,如果不是病毒程序应该会在这几处找到。
控制面板的图标一般在“C:\windows\system32”目录下,以“cpl”形式存在。如要隐藏多余图标,请单击“开始->运行”,输入“gpeditmsc”打开组策略对话框。依次选择“用户配置->管理模板->控制面板”
如果找不到“控制面板”,请在点击了“管理模板”之后点击菜单栏的“动作”->“添加/删除模板”->“添加”->点击“systemadm”,然后点击“打开”
双击“隐藏指定的控制面板程序”,选择“已启用”,并单击“不允许的控制面板程序的列表”后的“显示”按钮,然后单击“添加”,输入要隐藏的图标在控制面板中对应的文字,比如要隐藏“鼠标”图标,输入“鼠标”,然后一路确定即可或者输入要隐藏的图标对应的cpl文件名(如telephoncpl),一路确定即可如不清楚应该选择哪个cpl文件,只需在system32文件夹里依次双击那些cpl文件,然后视d出窗口情况确定(如双击telephoncpl便会d出“电话和调制解调器选项”)。删除cpl文件则会彻底将它清出控制面板门外。
在运行中输入regedit,进入注册表,然后在hkey_current_user\software\microsoft\windows\currentversion\Policies中,在该项下新建项“Uninstall”,然后在该项下新DWORD值项“NoWindowsSetupPage”。将其数值数据设置为“1”表示隐藏“添加/删除组件”图标,设备为“0”肯定表示显示该图标嘛!
当然这是在windows
9x、windows2000及windowsXP下才有用哦!
隐藏控制面板
修改注册表的键值
单击“开始--运行,然后输入regedit
(打开注册表)
2、依次展开:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
右键新建dword值
名为NoControlPanle
其值为1即可
数值1为隐藏所有程序,数值0为显示所有程序,重新登录或启动后生效!
另一种解决办法:
1、进入
开始-运行后,输入regedit后进入注册表;
2、在左边依次打开:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall;
3、备份HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
(备份方法:将鼠标放在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion中的Uninstall上点右键,选择导出,保存在电脑里)
4、在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall中找到需要隐藏的项目()后,选中点右键将其删除!
5、打开控制面板--添加删除程序后你会发现你需要隐藏的程序不见了。
6、如果想在添加删除程序里出现,只要双击你导出来的注册表即可。
三种:
1-如何使不想被删除的软件名从“控制面板”中消失?
单击“开始”菜单,选择“运行”,在输入框中键入“regedit”,点按“确定”按钮,打开“注册表编辑器”,然后依次展开“HKEY_LOCAL-MACHINE\ SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL”,在下拉菜单中显示的都是“添加/删除程序”中的项目,你查看你要删除的软件的名称内容,找到后用鼠标右键点击该项,先点击“导出”,在“导出注册表文件”对话框中输入文件名并选择保存位置,再点击“保存”(这是备份注册表文件,以后要恢复时要使用,这一步千万不要忘了)。接下去再用鼠标右键点击该项,点击“删除”。这样 *** 作以后该软件就不在控制面板上出现了。
如果以后你想删除的话你也不能找到这个程序进行删除了怎么办?没关系,你找到上面所说的保存的备份注册表文件,用鼠标右键点击该文件,再点击“合并”即可。这样你会发现原来在控制面板没有的软件名称又有了,就能进行卸载了。这里再次提醒一下:这个备份的注册表文件要保存好!
如果你以前用手工方法卸载了,在“添加/删除程序”中总会留下残留信息,那怎样把它清除干净呢?还是用注册表的方法:
单击“开始”菜单,选择“运行”,在输入框中键入“regedit”,点按“确定”按钮,打开“注册表编辑器”,然后依次展开“HKEY_LOCAL-MACHINE\ SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL”,在下拉菜单中显示的都是“添加/删除程序”中的项目,选中要删除的残留信息内容,按“DEL”就可以了。
这个办法麻烦了一点,所以呢,不是很支持。
2-开始 运行 gpeditmsc
进入组策略
用户配置 管理摸版 控制面版 添加与删除程序 选择你需要的设置 选择已启动 就可以了
3(不全)-在C:\Windows\Inf下找到Sysocinf文件,用记事本程序打开 进行编辑
以上就是关于如何隐藏win32控制台应用程序的窗口全部的内容,包括:如何隐藏win32控制台应用程序的窗口、做Windows控制台程序,可以隐藏当前窗口吗、怎样关闭系统隐藏开启的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)