使用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()
以评估为准。