gpt4 book ai didi

winapi - Win32 控制台应用程序能否检测到它是否已从资源管理器中运行?

转载 作者:行者123 更新时间:2023-12-03 08:03:08 26 4
gpt4 key购买 nike

我必须创建一个需要某些参数的控制台应用程序。如果它们丢失或错误,我会打印出一条错误消息。

现在的问题是:如果有人通过双击控制台窗口从资源管理器启动程序会立即消失。 (但该应用程序在资源管理器中并非完全无用,您可以将文件拖到它上面,它就可以工作了)

我总是可以等待按键,但如果用户确实从命令行启动它,我不希望这样。

有什么办法可以区分这些情况吗?

最佳答案

http://support.microsoft.com/kb/99115 , “信息:防止控制台窗口消失”。

这个想法是使用 GetConsoleScreenBufferInfo 来确定光标没有从初始 0,0 位置移动。

来自@tomlogic 的代码示例,基于引用的知识库文章:

// call in main() before printing to stdout
// returns TRUE if program is in its own console (cursor at 0,0) or
// FALSE if it was launched from an existing console.
// See http://support.microsoft.com/kb/99115
#include <stdio.h>
#include <windows.h>
int separate_console( void)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;

if (!GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE), &csbi))
{
printf( "GetConsoleScreenBufferInfo failed: %lu\n", GetLastError());
return FALSE;
}

// if cursor position is (0,0) then we were launched in a separate console
return ((!csbi.dwCursorPosition.X) && (!csbi.dwCursorPosition.Y));
}

关于winapi - Win32 控制台应用程序能否检测到它是否已从资源管理器中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/510805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com