如何使控制台应用程序中的右键菜单出现?

5
当我在自己的控制台应用程序中右键单击控制台窗口时,如何使右键菜单出现,如下所示:

是的,我知道可以使用左上角的图标来显示菜单功能,但我正在寻找右键单击的解决方案!

(当我直接执行 .exe 文件而不是通过 CMD.EXE 运行时,问题似乎会出现)


你在调试器中运行它吗?http://stackoverflow.com/questions/1060240/what-happened-to-the-context-menu-in-my-console-application - Eric Petroelje
你可能想阅读这篇文章:https://dev59.com/s3I-5IYBdhLWcg3wQV8Z - Duke Hall
无论您是在 Visual Studio(调试)中运行应用程序还是在 Visual Studio 之外(直接执行应用程序),都没有关系。 - Birdman
3个回答

9

使用SetConsoleMode清除ENABLE_QUICK_EDIT_MODE模式。当您的程序退出时,恢复标志到其先前的设置是礼貌的。


语法长什么样子?谢谢! - Birdman
要访问此API,请从这里复制代码。不过,不确定如何获取控制台窗口句柄。 - sq33G
@sq33G 我们可以使用 GetStdHandle 对吧? - Sreenikethan I

2
“鼠标消息不会传递到您的程序,而是传递到命令提示符窗口。您的程序没有窗口。”
“因此,您可以通过某种方式从命令提示符窃取消息,如下所示:”
c++获取其他窗口消息

1

由于该问题没有直接的解决方案,因此采用以下解决方法进行修复:

string filelocation = Assembly.GetExecutingAssembly().Location;

string filename = Process.GetCurrentProcess().MainModule.ModuleName;
filename = filename.Replace(".exe", "");

Process[] processArray = Process.GetProcesses();

int processesExists = 0;


for (int i2 = 0; i2 < (processArray.Length - 1); i2++)
{
    if (processArray[i2].ProcessName.Contains(filename))
    {
        processesExists++;
    }
}

if (processesExists == 1 && !Console.Title.Contains("cmd"))
{
    Process.Start("cmd.exe", "/C " + "\"" + filelocation + "\"");
}

if (!Console.Title.Contains("cmd"))
{
    Process.GetCurrentProcess().Kill();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接