[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] disableX.exe - 禁用 cmd 窗口的关闭按钮(并移除右键的“关闭”菜单)

发现论坛里 DisableExit 和 CWnd 都只是禁用了关闭按钮,却没有移除标题栏右键的“关闭”菜单。

网上找到的 C 源代码,用 Dev-C++ 4.9.9.2 编译成功。
  1. @echo off
  2. disableX.exe
  3. echo 关闭按钮已禁用
  4. pause
复制代码
2012-11-14 更新:
使用 TDM-GCC 中的 gcc 命令 gcc -Os -s disableX.c -o disableX.exe 重新编译,体积由原来的 16.4 KB 减小到 8.5 KB。

注:13 楼 的 disableX.exe 体积只有 1.5 KB。

http://bcn.bathome.net/s/tool/index.html?key=disableX
2

评分人数

    • flaven: 这个用alt+F4还是可以退技术 + 1
    • Hello123World: 支持一下,wallpaperchanger一直在用!技术 + 1

说一下 disableX 的编译方法。

不是直接编译保存好的 c 源代码,而是:
    在菜单栏选择 File -> New -> Project -> Console Application,
    之后将源代码复制进去,保存,
    最后点击菜单栏的 Execute -> Compile,就完成了。

TOP

回复 4# Batcher


是的,是那个 DisableExit。

gray.exe 要常驻。

TOP

2012-11-14 更新:
使用 TDM-GCC 中的 gcc 命令 gcc -Os -s disableX.c -o disableX.exe 重新编译,体积由原来的 16.4 KB 减小到 8.5 KB。

TOP

回复 9# Demon


尝试过。但提示:
disableX.c:7: warning: assignment makes pointer from integer without a cast
disableX.c:8: warning: assignment makes pointer from integer without a cast
tcc: undefined symbol 'GetConsoleWindow'
tcc: undefined symbol '_GetSystemMenu@8'
tcc: undefined symbol '_DeleteMenu@12'
tcc: undefined symbol '_DrawMenuBar@4'

TOP

回复 11# Demon
  1. #define _WIN32_WINNT    0x0500
  2. #include <Windows.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6.     DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
  7.     DrawMenuBar(GetConsoleWindow());
  8. }
复制代码

TOP

回复 13# Demon


    感谢! 可以说下怎么编译的吗?

TOP

本帖最后由 tmplinshi 于 2012-11-16 19:16 编辑
用tiny_impdef.exe生成新的def文件。
Demon 发表于 2012-11-16 18:32



    谢谢!成功了。

E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>tiny_impdef.exe kernel32.dll
--> C:\WINDOWS\system32\kernel32.dll
<-- kernel32.def

E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>tiny_impdef.exe USER32.dll
--> C:\WINDOWS\system32\USER32.dll
<-- USER32.def

E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>tiny_impdef.exe msvcrt.dll
--> C:\WINDOWS\system32\msvcrt.dll
<-- msvcrt.def


E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>md lib\bak

E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>copy lib\*.def lib\bak\
lib\gdi32.def
lib\kernel32.def
lib\msvcrt.def
lib\USER32.def
已复制         4 个文件。


E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>copy /y *.def lib\
kernel32.def
msvcrt.def
USER32.def
已复制         3 个文件。


E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>tcc -lUSER32 disableX.c -o disableX.exe
disableX.c:7: warning: assignment makes pointer from integer without a cast
disableX.c:8: warning: assignment makes pointer from integer without a cast


E:\Program Files\Tools\tcc-0.9.25-win32-bin\tcc>

TOP

发现用Alt+F4还是可以退
flaven 发表于 2013-1-21 21:35



你是用什么系统测试的?在 XP 系统,正常情况下用 Alt+F4 都不能关闭 CMD 窗口的。

TOP

本帖最后由 tmplinshi 于 2013-1-22 00:43 编辑

回复 21# flaven


    哦。多谢提供测试结果。XP 系统运行 disableX 之后不会显示关闭菜单。

TOP

如果想恢复关闭按钮,请用这个版本。方法是加任意参数,比如 disableX /r。之所以是任意参数,是因为我不懂 C 语言。C 源码我改成了:
  1. #define _WIN32_WINNT    0x0500
  2. #include <Windows.h>
  3. #include <stdio.h>
  4. int main( int argc )
  5. {
  6. DeleteMenu(GetSystemMenu(GetConsoleWindow(), (argc == 2) ? TRUE : FALSE), SC_CLOSE, MF_BYCOMMAND);
  7. DrawMenuBar(GetConsoleWindow());
  8. }
复制代码

TOP

返回列表