C++ WinAPI - GetConsoleScreenBufferInfo always fails by invalid handle (Returns 0)
I'm writing a simple program to output the correct (and current) width and height of the console in chars/lines.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_INPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
However, while GetStdHandle doesn't return INVALID_HANDLE_VALUE, GetConsoleScreenBufferInfo fails (returning 0), with error code 0x6 (invalid handle)
I've also tried using GetConsoleWindow(); in place of GetStdHandle to no avail.
I'm using windows 10 and VS2017. I get the feeling I might be either in over my head, or pushing to do something too system-specific.
Thanks in advance for any solutions/alternatives.
c++ windows winapi
add a comment |
I'm writing a simple program to output the correct (and current) width and height of the console in chars/lines.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_INPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
However, while GetStdHandle doesn't return INVALID_HANDLE_VALUE, GetConsoleScreenBufferInfo fails (returning 0), with error code 0x6 (invalid handle)
I've also tried using GetConsoleWindow(); in place of GetStdHandle to no avail.
I'm using windows 10 and VS2017. I get the feeling I might be either in over my head, or pushing to do something too system-specific.
Thanks in advance for any solutions/alternatives.
c++ windows winapi
3
What happens if you useSTD_OUTPUT_HANDLE
instead of the input handle?
– 1201ProgramAlarm
Nov 12 at 5:38
1
docs.microsoft.com/en-us/windows/console/console-handles
– Jonathan Potter
Nov 12 at 6:18
3
"Initially, STDIN is a handle to the console's input buffer, and STDOUT and STDERR are handles of the console's active screen buffer"
– Jonathan Potter
Nov 12 at 6:18
2
"Input" and "screen buffer" have no overlap. If you want to know, how many characters you can output to a line in the screen buffer, you're going to have to use an output handle.
– IInspectable
Nov 12 at 10:14
add a comment |
I'm writing a simple program to output the correct (and current) width and height of the console in chars/lines.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_INPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
However, while GetStdHandle doesn't return INVALID_HANDLE_VALUE, GetConsoleScreenBufferInfo fails (returning 0), with error code 0x6 (invalid handle)
I've also tried using GetConsoleWindow(); in place of GetStdHandle to no avail.
I'm using windows 10 and VS2017. I get the feeling I might be either in over my head, or pushing to do something too system-specific.
Thanks in advance for any solutions/alternatives.
c++ windows winapi
I'm writing a simple program to output the correct (and current) width and height of the console in chars/lines.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_INPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
However, while GetStdHandle doesn't return INVALID_HANDLE_VALUE, GetConsoleScreenBufferInfo fails (returning 0), with error code 0x6 (invalid handle)
I've also tried using GetConsoleWindow(); in place of GetStdHandle to no avail.
I'm using windows 10 and VS2017. I get the feeling I might be either in over my head, or pushing to do something too system-specific.
Thanks in advance for any solutions/alternatives.
c++ windows winapi
c++ windows winapi
asked Nov 12 at 5:31
Pseudo Nym
174
174
3
What happens if you useSTD_OUTPUT_HANDLE
instead of the input handle?
– 1201ProgramAlarm
Nov 12 at 5:38
1
docs.microsoft.com/en-us/windows/console/console-handles
– Jonathan Potter
Nov 12 at 6:18
3
"Initially, STDIN is a handle to the console's input buffer, and STDOUT and STDERR are handles of the console's active screen buffer"
– Jonathan Potter
Nov 12 at 6:18
2
"Input" and "screen buffer" have no overlap. If you want to know, how many characters you can output to a line in the screen buffer, you're going to have to use an output handle.
– IInspectable
Nov 12 at 10:14
add a comment |
3
What happens if you useSTD_OUTPUT_HANDLE
instead of the input handle?
– 1201ProgramAlarm
Nov 12 at 5:38
1
docs.microsoft.com/en-us/windows/console/console-handles
– Jonathan Potter
Nov 12 at 6:18
3
"Initially, STDIN is a handle to the console's input buffer, and STDOUT and STDERR are handles of the console's active screen buffer"
– Jonathan Potter
Nov 12 at 6:18
2
"Input" and "screen buffer" have no overlap. If you want to know, how many characters you can output to a line in the screen buffer, you're going to have to use an output handle.
– IInspectable
Nov 12 at 10:14
3
3
What happens if you use
STD_OUTPUT_HANDLE
instead of the input handle?– 1201ProgramAlarm
Nov 12 at 5:38
What happens if you use
STD_OUTPUT_HANDLE
instead of the input handle?– 1201ProgramAlarm
Nov 12 at 5:38
1
1
docs.microsoft.com/en-us/windows/console/console-handles
– Jonathan Potter
Nov 12 at 6:18
docs.microsoft.com/en-us/windows/console/console-handles
– Jonathan Potter
Nov 12 at 6:18
3
3
"Initially, STDIN is a handle to the console's input buffer, and STDOUT and STDERR are handles of the console's active screen buffer"
– Jonathan Potter
Nov 12 at 6:18
"Initially, STDIN is a handle to the console's input buffer, and STDOUT and STDERR are handles of the console's active screen buffer"
– Jonathan Potter
Nov 12 at 6:18
2
2
"Input" and "screen buffer" have no overlap. If you want to know, how many characters you can output to a line in the screen buffer, you're going to have to use an output handle.
– IInspectable
Nov 12 at 10:14
"Input" and "screen buffer" have no overlap. If you want to know, how many characters you can output to a line in the screen buffer, you're going to have to use an output handle.
– IInspectable
Nov 12 at 10:14
add a comment |
1 Answer
1
active
oldest
votes
STD_INPUT_HANDLE is usually connected to the terminal keyboard.
STD_OUTPUT_HANDLE and STD_ERROR_HANDLE are usually used as console.So let's say the STD_INPUT_HANDLE Can't be identified as a "console handle" by "GetConsoleScreenBufferInfo()". You can use "STD_OUTPUT_HANDLE" to get the console handle.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53256389%2fc-winapi-getconsolescreenbufferinfo-always-fails-by-invalid-handle-returns%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
STD_INPUT_HANDLE is usually connected to the terminal keyboard.
STD_OUTPUT_HANDLE and STD_ERROR_HANDLE are usually used as console.So let's say the STD_INPUT_HANDLE Can't be identified as a "console handle" by "GetConsoleScreenBufferInfo()". You can use "STD_OUTPUT_HANDLE" to get the console handle.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
add a comment |
STD_INPUT_HANDLE is usually connected to the terminal keyboard.
STD_OUTPUT_HANDLE and STD_ERROR_HANDLE are usually used as console.So let's say the STD_INPUT_HANDLE Can't be identified as a "console handle" by "GetConsoleScreenBufferInfo()". You can use "STD_OUTPUT_HANDLE" to get the console handle.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
add a comment |
STD_INPUT_HANDLE is usually connected to the terminal keyboard.
STD_OUTPUT_HANDLE and STD_ERROR_HANDLE are usually used as console.So let's say the STD_INPUT_HANDLE Can't be identified as a "console handle" by "GetConsoleScreenBufferInfo()". You can use "STD_OUTPUT_HANDLE" to get the console handle.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
STD_INPUT_HANDLE is usually connected to the terminal keyboard.
STD_OUTPUT_HANDLE and STD_ERROR_HANDLE are usually used as console.So let's say the STD_INPUT_HANDLE Can't be identified as a "console handle" by "GetConsoleScreenBufferInfo()". You can use "STD_OUTPUT_HANDLE" to get the console handle.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbiInfo);
cout << csbiInfo.dwSize.X;
cout << csbiInfo.srWindow.Bottom - csbiInfo.srWindow.Top;
system("PAUSE");
}
answered Nov 13 at 8:22
Drake Wu
1274
1274
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53256389%2fc-winapi-getconsolescreenbufferinfo-always-fails-by-invalid-handle-returns%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3
What happens if you use
STD_OUTPUT_HANDLE
instead of the input handle?– 1201ProgramAlarm
Nov 12 at 5:38
1
docs.microsoft.com/en-us/windows/console/console-handles
– Jonathan Potter
Nov 12 at 6:18
3
"Initially, STDIN is a handle to the console's input buffer, and STDOUT and STDERR are handles of the console's active screen buffer"
– Jonathan Potter
Nov 12 at 6:18
2
"Input" and "screen buffer" have no overlap. If you want to know, how many characters you can output to a line in the screen buffer, you're going to have to use an output handle.
– IInspectable
Nov 12 at 10:14