D编程语言 - 无需按Enter键即可输入

时间:2014-09-24 11:25:05

标签: windows input d conio

我正在玩D编程语言,我想知道我是怎么做的 可以抓住一个角色,而无需用户按回车。

我想要的伪代码示例:

while(true){
    if(userHasPressedChar()){
        writeln(getChar());
    }
}

在C ++中我可以使用conio.h的“getch()”,但我还没有找到类似的东西。

编辑:我使用的是Windows 7。

编辑2:我在this forum找到了一个解决方案,我可以根据自己的需要进行修改。     模块主;

import std.stdio;
import core.sys.windows.windows;


void main() {
    auto hCon = GetStdHandle(STD_INPUT_HANDLE);
    FlushConsoleInputBuffer(hCon);
    for(;;) { // in default console mode, ctrl-C will terminate
        INPUT_RECORD inrec;
        DWORD numread;
        while(inrec.EventType != KEY_EVENT) {
            WaitForSingleObject(hCon, INFINITE);
            ReadConsoleInputW(hCon, &inrec, 1, &numread);
        }
        auto keyEvent = inrec.KeyEvent;
        writefln("VK: %x \tChar: %x \tState: %x", 
                 keyEvent.wVirtualKeyCode,
                 keyEvent.UnicodeChar,
                 keyEvent.dwControlKeyState);
    }
}

1 个答案:

答案 0 :(得分:3)

您还可以使用各种库。例如,我的terminal.d可以为Windows和Linux执行此操作https://github.com/adamdruppe/arsd/blob/master/terminal.d

以下是我的书中的示例文件(如果您有兴趣,请参阅我的SO个人资料),该文件演示了使用情况http://arsdnet.net/dcode/book/chapter_12/07/input.d

import terminal;

void main() {
  auto terminal = Terminal(ConsoleOutputType.linear);
  auto input = RealTimeConsoleInput(&terminal, ConsoleInputFlags.raw);
  terminal.writeln("Press any key to exit");
  auto ch = input.getch();
  terminal.writeln("Bye!");
}

输入对象执行必要的转换到控制台模式以关闭行缓冲并自行清理。创建一个类似于input.getch()input.kbhit()的方法与conio类似。

如果您想进入更高级的用途,我的终端库还会为鼠标输入等事件提供其他事件类型。

要编译,只需下载terminal.d并将其添加到您的命令,例如dmd yourfile.d terminal.d

相关问题