使用SetConsoleWindowInfo时句柄无效 我是C++新手,决定用一个小型游戏机挑战自己。避免典型的闪烁。 根据我从MSDN文档中得到的信息,我应该使用一个控制台缓冲区,但我很简单,从简单的事情开始,比如更改窗口标题和调整大小。 我编写的小程序就是为了这样做,但由于某种原因,当我执行SetConsoleWindowInfo时,我得到了错误代码6(应该是“无效句柄”)

使用SetConsoleWindowInfo时句柄无效 我是C++新手,决定用一个小型游戏机挑战自己。避免典型的闪烁。 根据我从MSDN文档中得到的信息,我应该使用一个控制台缓冲区,但我很简单,从简单的事情开始,比如更改窗口标题和调整大小。 我编写的小程序就是为了这样做,但由于某种原因,当我执行SetConsoleWindowInfo时,我得到了错误代码6(应该是“无效句柄”),c++,winapi,console,C++,Winapi,Console,谁能给我指出正确的方向?先谢谢你 #include <windows.h> #include <stdio.h> #include <iostream> HANDLE wHandle, bHandle; SMALL_RECT wSize = { 0,0,100,100 }; int main() { wHandle = GetConsoleWindow(); if (wHandle == NULL) { printf("

谁能给我指出正确的方向?先谢谢你

#include <windows.h>
#include <stdio.h>
#include <iostream>

HANDLE  wHandle, bHandle;

SMALL_RECT wSize = { 0,0,100,100 };

int main() {
    wHandle = GetConsoleWindow();
    if (wHandle == NULL) {
        printf("Handle is Null");
    }
    SetConsoleTitle(L"NewTitle");
    if (!SetConsoleWindowInfo(wHandle, TRUE, &wSize)) {
        printf("SetConsoleWindowInfo (%d)\n", GetLastError());

    }

    getchar();
    return 0;
}
#包括
#包括
#包括
把手,把手;
小矩形wSize={0,0100100};
int main(){
wHandle=GetConsoleWindow();
if(wHandle==NULL){
printf(“句柄为空”);
}
SetConsoleTitle(新标题);
if(!SetConsoleWindowInfo(wHandle、TRUE和wSize)){
printf(“SetConsoleWindowInfo(%d)\n”,GetLastError());
}
getchar();
返回0;
}
也许这会有帮助:

#include <windows.h>
#include <stdio.h>
#include <iostream>

HANDLE  wHandle, bHandle;

//SMALL_RECT wSize = { 0,0,100,100 }; // If SetConsoleWindow fails with code 87, then this is too big!
SMALL_RECT wSize = { 0,0,60,20 }; // Works on my screen!

int main() {
//  wHandle = GetConsoleWindow(); 
    wHandle = GetStdHandle(STD_OUTPUT_HANDLE); // See comment by RbMm
    if (wHandle == NULL) {
        printf("Handle is Null");
    }
//  SetConsoleTitle(L"NewTitle"); // Don't use a wide character string!
    SetConsoleTitle("NewTitle");
    if (!SetConsoleWindowInfo(wHandle, TRUE, &wSize)) {
        printf("SetConsoleWindowInfo (%d)\n", GetLastError());
    }
    getchar();
    return 0;
}
#包括
#包括
#包括
把手,把手;
//SMALL_RECT wSize={0,0100};//如果SetConsoleWindow失败,代码为87,那么这太大了!
SMALL_RECT wSize={0,0,60,20};//在我的屏幕上工作!
int main(){
//wHandle=GetConsoleWindow();
wHandle=GetStdHandle(STD_OUTPUT_HANDLE);//参见RbMm的注释
if(wHandle==NULL){
printf(“句柄为空”);
}
//SetConsoleTitle(L“NewTitle”);//不要使用宽字符串!
SetConsoleTitle(“NewTitle”);
if(!SetConsoleWindowInfo(wHandle、TRUE和wSize)){
printf(“SetConsoleWindowInfo(%d)\n”,GetLastError());
}
getchar();
返回0;
}
如果您不了解我所做的任何更改(或我更改的原因),请随时提问,但这些评论解决了一些问题。

也许这会有所帮助:

#include <windows.h>
#include <stdio.h>
#include <iostream>

HANDLE  wHandle, bHandle;

//SMALL_RECT wSize = { 0,0,100,100 }; // If SetConsoleWindow fails with code 87, then this is too big!
SMALL_RECT wSize = { 0,0,60,20 }; // Works on my screen!

int main() {
//  wHandle = GetConsoleWindow(); 
    wHandle = GetStdHandle(STD_OUTPUT_HANDLE); // See comment by RbMm
    if (wHandle == NULL) {
        printf("Handle is Null");
    }
//  SetConsoleTitle(L"NewTitle"); // Don't use a wide character string!
    SetConsoleTitle("NewTitle");
    if (!SetConsoleWindowInfo(wHandle, TRUE, &wSize)) {
        printf("SetConsoleWindowInfo (%d)\n", GetLastError());
    }
    getchar();
    return 0;
}
#包括
#包括
#包括
把手,把手;
//SMALL_RECT wSize={0,0100};//如果SetConsoleWindow失败,代码为87,那么这太大了!
SMALL_RECT wSize={0,0,60,20};//在我的屏幕上工作!
int main(){
//wHandle=GetConsoleWindow();
wHandle=GetStdHandle(STD_OUTPUT_HANDLE);//参见RbMm的注释
if(wHandle==NULL){
printf(“句柄为空”);
}
//SetConsoleTitle(L“NewTitle”);//不要使用宽字符串!
SetConsoleTitle(“NewTitle”);
if(!SetConsoleWindowInfo(wHandle、TRUE和wSize)){
printf(“SetConsoleWindowInfo(%d)\n”,GetLastError());
}
getchar();
返回0;
}

如果您不理解我所做的任何更改(或我更改它的原因),请随时提问,但这些注释解决了一些问题。

GetConsoleWindow
SetConsoleWindowInfo
需要句柄(
handle
)时返回窗口句柄(
HWND
)。这是完全不同的事情。您需要使用
GetStdHandle(STD\u OUTPUT\u HANDLE)
对于
SetConsoleWindowInfo
您通常不应该使用
GetConsoleWindow
,控制台窗口应被视为禁止进入。
GetConsoleWindow
返回窗口句柄(
HWND
)当
SetConsoleWindowInfo
需要句柄时(
HANDLE
)到控制台屏幕缓冲区。这是完全不同的事情。您需要使用
GetStdHandle(STD\u OUTPUT\u HANDLE)
对于
SetConsoleWindowInfo
您通常不应使用
GetConsoleWindow
,控制台窗口应被视为禁止使用。不,它不允许。查看单一语言实现的输出将永远不允许您查看语言规则。是的,具体生成的代码无法证明任何东西,但来自通用语言les—在函数调用之前计算的函数参数。在具体代码中—仅限
GetLastError()
需要评估。不,不需要。查看单一语言实现的输出将永远不会让您看到语言规则。是的,具体生成的代码没有任何证明,而是根据一般语言规则-函数调用前评估的函数参数。在具体代码中-仅
GetLastError()
以评估为准。