【问题标题】:How to disable the close button in C?如何禁用C中的关闭按钮?
【发布时间】:2012-08-17 08:06:13
【问题描述】:

有谁知道如何使用从 C 程序创建的 .exe 可执行文件禁用 Windows 控制台窗口上的关闭按钮?

【问题讨论】:

  • 你不能。控制台窗口是一个单独的组件。唯一的方法是构建您可以控制自己的窗口的 GUI 程序。
  • 另外,你为什么要这样做?
  • 我只是想对我的兄弟开玩笑。但我必须确保他会发疯。你知道我可以用其他方法吗?顺便说一句,我知道的唯一编程语言是 c,不幸的是
  • @Mysticial 它可能是单独的组件,但只要你能得到它的窗口句柄,你就可以做很多事情。
  • 不敢相信人们仍在投票赞成说你不能这样做的评论。看看下面的人的答案!

标签: c windows console-application exe application-close


【解决方案1】:

来自here:

#define _WIN32_WINNT 0x0500
#include <stdio.h>
#include <windows.h>

int main(int argc, _TCHAR* argv[]){
  HWND h;   
  HMENU sm;
  int i, j, c; 
  LPTSTR buf;  
  // get the handle to the console
  h = GetConsoleWindow(); 
  // get handle to the System Menu
  sm = GetSystemMenu(h, 0);  
  // how many items are there?  
  c = GetMenuItemCount(sm);   
  j = -1;  
  buf = (TCHAR*) malloc (256 *sizeof(TCHAR));  
  for (i=0; i<c; i++) {
    // find the one we want   
    GetMenuString(sm, i, buf, 255, MF_BYPOSITION);   
    if (!strcmp(buf, "&Close")) {        
      j = i;        
      break;      
    }
  }
  // if found, remove that menu item  
  if (j >= 0)
    RemoveMenu(sm, j, MF_BYPOSITION); 
  return 0;
}

【讨论】:

  • 我没有设置来测试这个,所以 +1 假设它有效。我不知道你可以这样抓住控制台窗口的句柄。
  • 没用,在在线编译器上试试这个:cmpe150-1.cmpe.boun.edu.tr/
  • 对不起,它有效。我只是为此写了其他代码
  • @user1590836 很好,它在那个在线编译器上对我有用,很好的链接,谢谢。不要双击exe,先运行控制台窗口再运行exe。
  • @user1590836 如果可行,您可以接受这个作为答案。由于您是新手,请花点时间查看faq,欢迎来到 Stack Overflow!
【解决方案2】:

如果您想禁用正在运行的程序中的按钮,有一些方法可以做到这一点。

原理是找到窗口,然后找到窗口里面的按钮,然后给按钮发送WM_DISABLE消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多