**Input();関数部のコメント部ですがなぜアクセスエラーがでるのでしょうか?Handle変数の設定が悪いのかと思いCreateConsoleScreenBuffer()**関数を確認しましたがしっかり読み書きできる設定になっています。これはなぜでしょうか?
公式リファレンス: https://docs.microsoft.com/ja-jp/windows/console/readconsoleinput
cpp
1#include "stdio.h" 2#include "stdlib.h" 3#include <Windows.h> 4 5// ウインドウサイズ 6#define MAX_WIDTH ((int)100) 7#define MAX_HEIGHT ((int)40) 8 9 10void Input(HANDLE &hConsole) 11{ 12 //HANDLE hConsole = nullptr; 13 14 PINPUT_RECORD Buffer = 0; 15 DWORD Length = 100; 16 LPDWORD lpNumber = 0; 17 18///////////////////////////////////////////////////////////////////////////// 19 if (ReadConsoleInput(hConsole, Buffer, Length, lpNumber) == true) 20 { 21 printf("ああああ\n"); 22 } 23//////////////////////////////////////////////////////////////////////////// 24 25 26} 27 28 29 30 31int main() 32{ 33 HANDLE mhScreen; //ウインドウハンドル 34 COORD mDraw_start; //描画開始位置 35 COORD mDraw_size; //画面のサイズ 36 _SMALL_RECT mRect; //画面の描画範囲 37 int mNowBuffer_width = 0; 38 int mNowBuffer_height = 0; 39 40 41 42 mhScreen = nullptr; //ウインドウハンドル 43 44 //描画開始座標 45 mDraw_start.X = 0; 46 mDraw_start.Y = 0; 47 48 //描画範囲 49 mDraw_size.X = MAX_WIDTH; 50 mDraw_size.Y = MAX_HEIGHT; 51 52 //ウインドウサイズ 53 mRect.Left = (SHORT)0; 54 mRect.Top = (SHORT)0; 55 mRect.Right = (SHORT)MAX_WIDTH; 56 mRect.Bottom = (SHORT)MAX_HEIGHT; 57 58 int num = 0; 59 60 // バッファーを作成 61 mhScreen = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); 62 if (mhScreen == INVALID_HANDLE_VALUE) 63 { 64 fprintf(stderr, "INVALID_HANDLE_VALUE"); 65 } 66 67 68 SetConsoleScreenBufferSize(mhScreen, mDraw_size); // バッファサイズ変更 69 SetConsoleWindowInfo(mhScreen, TRUE, &mRect); // ウィンドウサイズ変更 70 SetConsoleActiveScreenBuffer(mhScreen); //有効化 71 72 73 CHAR_INFO mWindowBuffer[MAX_HEIGHT][MAX_WIDTH] = { 0 }; 74 75 76 mWindowBuffer[0][0].Char.UnicodeChar = L'A'; 77 mWindowBuffer[0][0].Attributes = FOREGROUND_GREEN; 78 79 mWindowBuffer[1][0].Char.UnicodeChar = L'B'; 80 mWindowBuffer[1][0].Attributes = FOREGROUND_GREEN; 81 82 83 while (true) 84 { 85 Input(mhScreen); 86 87 88 SetConsoleCursorPosition(mhScreen,mDraw_start); 89 WriteConsoleOutput(mhScreen, mWindowBuffer[0], mDraw_size, mDraw_start, &mRect); //現在のカーソル位置から始まる文字列をコンソール画面バッファーに書き込み 90 FlushConsoleInputBuffer(mhScreen); 91 92 } 93 94 95 96 97 98 // スクリーンバッファを解放 99 CloseHandle(mhScreen); 100 mhScreen = NULL; 101 102 103 104 105 106 107 return 0; 108} 109
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/10 16:57
退会済みユーザー
2020/12/11 04:23 編集
2020/12/11 06:37
退会済みユーザー
2020/12/11 06:46
退会済みユーザー
2020/12/11 06:49
2020/12/12 16:13