能否请您解释一下我,什么是API函数AllocConsole
和AttachConsole(-1)
之间有什么不同?我的意思是如果AttachConsole
得到ATTACH_PARENT_PROCESS(DWORD)-1
。API函数AllocConsole和AttachConsole(-1)有什么不同?
6
A
回答
13
好,最根本的区别是:
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;
}
0
它已经有一段时间,因为我用的WINAPI,但我抬头the MSDN documentation,我没能找到CreateConsole API函数。所以我的猜测是CreateConsole是遗留的东西,并已被AttachConsole取代。所以可能没有区别,但CreateConsole可能已被弃用。
5
我不认为有一个名为CreateConsole
功能,但有AllocConsole
。
假设这就是你的意思,我认为不同的是AttachConsole(ATTACH_PARENT_PROCESS)
可以return ERROR_INVALID_HANDLE
如果父进程没有控制台。
尝试,无论从命令提示符并开始运行该代码 - >运行:
#include <windows.h>
#pragma comment (lib, "user32.lib")
int main()
{
BOOL b;
char msg[1024];
b = FreeConsole();
sprintf(msg, "%d", b);
MessageBox(NULL, msg, "FreeConsole", 0);
b = AttachConsole(ATTACH_PARENT_PROCESS);
sprintf(msg, "%d", b);
MessageBox(NULL, msg, "AttachConsole", 0);
return 0;
}
从命令提示符下运行时,将显示含有1
两个消息框,这意味着两个通话成功。从“开始” - >“运行”运行时,第一个框中包含1
,第二个框中包含0
,表示仅第一次调用成功。第二个失败,因为explorer.exe(它是从开始 - >运行启动的进程的父级)没有控制台。
相关问题
- 1. 函数nndist和kNNdist有什么不同?
- 2. 处理函数和回调函数有什么不同?
- 3. 静态成员函数和全局函数有什么不同?
- 4. 旧的和新的JavaScript函数语法有什么不同?
- 5. 在javascript中传递函数和函数调用本身有什么不同?
- 6. node.js中process.exit(1)和process.exit(0)方法有什么不同?
- 7. 同步函数和同步块之间有什么区别?
- 8. SAL(Source Annotation Language)的用途是什么?SAL 1和2有什么不同?
- 9. 什么是MongoDB的$ min?这与find()有什么不同。sort({the_field:1})。limit(1)?
- 10. WinAPI AttachConsole?
- 11. 为什么我的C++函数有不同的指针参数?
- 12. AllocConsole问题
- 13. 下面得到(1)函数做什么?
- 14. 在_proto_构造函数中,普通函数和箭头函数有什么不同?
- 15. 流利的API与其他API有什么不同?
- 16. 我不知道什么是argv和raw_input()有什么不同?
- 17. 同名继承函数和重载虚函数有什么区别?
- 18. NtFsControlFile()和DeviceIoControl()函数有什么区别?
- 19. lowByte()和highByte()函数有什么作用?
- 20. $ get和$ find函数有什么区别?
- 21. malloc()和虚函数有什么问题?
- 22. round()和trunc()函数有什么区别?
- 23. HTML和WML/WAP有什么不同?
- 24. Log4J 1.2和Log4J 2.0有什么不同?
- 25. oslo.config和oslo_config有什么不同?
- 26. Html.Label和Html.Display有什么不同?
- 27. iText,JasperReports和Adobe LC有什么不同?
- 28. 与%.1f和%.01f有什么不同?
- 29. Scala中Int和Integer有什么不同?
- 30. 使用“=”和“LIKE”有什么不同吗?
可以在C#.NET来创建编译成一个Windows程序(而不是一个控制台程序)可执行文件的控制台窗口? – configurator 2009-01-11 19:27:30