- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
能否请您解释一下,API 函数 AllocConsole
和 AttachConsole(-1)
之间有什么不同?我的意思是如果 AttachConsole
得到 ATTACH_PARENT_PROCESS(DWORD)-1
。
最佳答案
嗯,根本的区别是:
AllocConsole()
将创建一个新控制台(并附加到它)AttachConsole( ATTACH_PARENT_PROCESS/* -1 */)
不会创建新的控制台,它会附加到父进程的现有控制台。在第一种情况下,您将获得一个全新的控制台窗口,在第二种情况下,您将使用现有的控制台窗口。
当然,如果您已经连接到控制台(即,您是从 cmd.exe 启动的控制台模式程序),则没有太大区别 - 使用任一 API 都会出错。
另请注意,仅仅因为您从控制台分离并不意味着分离的控制台会有用 - 例如,如果您是从 cmd 窗口启动的控制台进程,该窗口基本上会阻塞,直到您的进程结束。
一些可玩的代码:
int main( int argc, char* argv[])
{
int ch;
BOOL bResult;
printf( "default console\n");
ch = getchar();
bResult = FreeConsole();
bResult = AllocConsole();
printf( "AllocConsole()\n");
ch = getchar();
bResult = FreeConsole();
bResult = AttachConsole( ATTACH_PARENT_PROCESS);
printf( "AttachConsole( ATTACH_PARENT_PROCESS)\n");
ch = getchar();
return 0;
}
关于c# - API 函数 AllocConsole 和 AttachConsole(-1) 之间有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/432832/
我正在尝试启动 bash.exe,以交互模式运行,作为子进程。我发现这样做的唯一方法是从控制台程序启动 bash.exe,或者将 AllocConsole() 启动到非控制台程序,然后启动它。似乎如果
我有一个 cpp dll,我想在注入(inject)后将文本打印到控制台。我使用 AllocConsole() 创建控制台,因为它是最简单的方法,但我无法在控制台中编写。 当我尝试 printf()
我有一个调用 native C++ DLL 的 C# 应用程序(我控制两者的源代码)。我从托管端使用了 AllocConsole(),然后调用 native 端。但是 native 代码不会输出到控制
我有一个 DLL,我在其中使用 AllocConsole() 和 cout 来显示数据以进行调试。 它曾经可以正常工作,但由于我将编译器 (Visual Studio 2012) 更新到最新版本,因此
团队成员添加了 following code在我们的 GUI Ogre 项目中添加一个控制台(以便我们能够在调试时看到 cout... 我们现在落后于时间,我们需要与游戏进行文本交互,我本来打算制作一
我想要发生的是控制台窗口消失,或者更好的是它被隐藏,但我希望我的应用程序继续运行。那可能吗?我希望能够使用 Console.WriteLine 并将控制台用作输出窗口。我希望能够隐藏和显示它,我不希望
我试图让一个控制台寡妇与主应用程序窗口一起运行,显然这应该可以工作,并且控制台窗口确实会显示,但以“freopen”开头的 3 行代码停止编译,并出现“缺少”等错误类型说明符”。 #include
好吧,当需要 Winform 时,我总是使用 AllocConsole() 方法进行控制台输出,因为在写入控制台时我使用多种颜色. 使用 VS 2015 及以下版本, Debug模式下的 AllocC
我有一个第三方 dll,我加载到不是我的软件中,我正在使用 AllocConsole() 创建标准的 Windows CLI 窗口,所以我有一种输出调试消息的简单方法。 但我的问题是,它会忽略任何类型
我一直在尝试获取控制台的输出句柄,但它似乎不起作用。我得到它来设置我的文本的颜色,但它没有改变。 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetC
我有一个 WinForms 项目,如果用户想要一个调试控制台,我会使用 AllocConsole() 分配一个控制台。 所有控制台输出在目标体系结构设置为“Any CPU”时正常工作,但是当我将其更改
我想创建一个控制台窗口并在调试我的程序时在上面打印一些信息。 VS 2010 没有给我设置不同输出类型的选项,具体取决于它是处于 Debug模式还是 Release模式,所以我求助于手动创建一个控制台
当线程更改为不同的桌面时,使用 AllocConsole() 创建的新控制台将出现在原始桌面中。创建的消息框和其他窗口会按预期出现在新桌面中,但控制台窗口不会。下面的代码是windows应用程序的例子
这可能吗?我希望 AllocConsole(或一组行为相同的函数调用)分配一个 PowerShell 窗口而不是一个普通的控制台窗口。 如果不可能,我可以 CreateProcess 并将我的输入和输
我在将 Python IO 重定向到我为 Win32 应用程序分配的控制台时遇到了一些问题。是否有我需要重定向的特定于 Python 的流? 这或多或少是我现在正在做的事情(删除了错误检查等): in
我知道有类似的问题,但我解决这个问题的努力没有成功。我想重定向Python解释器I/O,但我只成功重定向了stdout。我对 stdin 和 stderr 仍然有问题。基于Redirect Embed
能否请您解释一下,API 函数 AllocConsole 和 AttachConsole(-1) 之间有什么不同?我的意思是如果 AttachConsole 得到 ATTACH_PARENT_PROC
我正在尝试使用经典的 RedirectIOToConsole 函数在 Windows Visual 2012、Linker/Subsystem = Windows (/SUBSYSTEM:WINDOW
出于多种目的,我想在我的 WPF 应用程序中包含控制台窗口功能,包括: 屏幕记录 显示应用程序执行的控制台命令的结果 诊断 我使用的两种技术是: 创建一个 TextBox 并通过赋值或数据绑定(bin
我是一名优秀的程序员,十分优秀!