이 코드를 사용하여 콘솔에서 직접 읽습니다.독일어 움라우트에서 ReadConsoleOutputCharacter가 작동하지 않습니다.
public char? ReadCharacterAt(int x, int y)
{
IntPtr consoleHandle = GetStdHandle(-11);
if (consoleHandle == IntPtr.Zero)
{
return null;
}
var position = new Coord
{
X = (short)x,
Y = (short)y
};
var result = new StringBuilder(1);
uint read = 0;
if (ReadConsoleOutputCharacter(consoleHandle, result, 1, position, out read))
{
return result[0];
}
else
{
return null;
}
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadConsoleOutputCharacter(IntPtr hConsoleOutput, [Out] StringBuilder lpCharacter, uint length, Coord bufferCoord, out uint lpNumberOfCharactersRead);
[StructLayout(LayoutKind.Sequential)]
public struct Coord
{
public short X;
public short Y;
}
그러나 독일어 움라우트 (äüö)의 경우 올바른 문자가 반환되지 않습니다. 어떻게 해결할 수 있을까? 한스와 레이몬드는 지적
UPDATE는
, 대답은 DLL 가져 오기 낳는다. 내가해야 할 일을했을 모두로 변경 한 다음 SDK의 문서에서
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
올바른 문자를 반환하지 않는다고 말하면 무엇을 반환합니까? 내 생각 엔'CharSet = CharSet.Unicode'을 지정하지 않았기 때문에 코드 페이지를 잘못 해석하고있는 것입니다. –