gpt4 book ai didi

windows - SetConsoleActiveScreenBuffer 使 ReadConsole 返回 ERROR_SHARING_VIOLATION

转载 作者:可可西里 更新时间:2023-11-01 10:19:30 26 4
gpt4 key购买 nike

当我使用创建的缓冲区调用 SetConsoleActiveScreenBuffer() 时,它似乎使 ReadConsole 停止使用 ERROR_SHARING_VIOLATION。我检查了句柄权限,据我所知,它们是正确的。

如果我注释掉 SetConsoleActiveScreenBuffer 行,输入将完美运行。我可能在这里做错了什么?

我还尝试过使用 ReadFile 而不是 ReadConsole,并使用 CreateFile 而不是 GetStdHandle 获取输入缓冲区。两种方式,都会出现同样的错误。

#include <Windows.h>
int main()
{
void* oldScreenBuffer;
void* screenBuffer;
void* inputBuffer;
char chBuffer[16];
DWORD numReads;
int err = 0;
inputBuffer = GetStdHandle(STD_INPUT_HANDLE);
//inputBuffer = CreateFile(TEXT("CONIN$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
oldScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE);
screenBuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
//commenting out the next line makes input work
err = SetConsoleActiveScreenBuffer(screenBuffer);
while(1){
err = ReadConsole(inputBuffer, chBuffer, 15, &numReads, NULL);
if(!err){
//returns error 32 (ERROR_SHARING_VIOLATION)
err=GetLastError();
}
if(chBuffer[0]=='q') break;
}
SetConsoleActiveScreenBuffer(oldScreenBuffer);
return 0;
}

最佳答案

它是屏幕缓冲区共享模式的 0。我之前完全错过了。我将其更改为 FILE_SHARE_READ | FILE_SHARE_WRITE,并且有效。谢谢@Ben。

关于windows - SetConsoleActiveScreenBuffer 使 ReadConsole 返回 ERROR_SHARING_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com