vb的kbhit()实现

数值分析考得如此简单,以至于感觉白复习了。

晚上,因为一些原因我很希望串口的数据能及时dump到硬盘上,可恶的是手头的串口调试工具都不怎么顺手,我气愤了,所以决定写一个题为《不就是个串口嘛!》的程序。很多功能还没有来得及加上,以后再完善,先用起来再说。

网上的一些vb6高手似乎很懒,实现了控制台、读取、写入、颜色等等功能,唯独没有加上这个关键的kbhit()函数。那怎么能行呢!所以这篇文章特别dump了c语言的库函数:

Public Function kbHit() As Boolean
    ' Dim m_StdInput As Long
    ' m_StdInput = CreateFile("CONIN$", _
    ' GENERIC_READ Or GENERIC_WRITE, _
    ' FILE_SHARE_READ Or FILE_SHARE_WRITE, _
    ' 0, _
    ' OPEN_EXISTING, _
    ' 0, _
    ' 0)
    ' 或者,m_StdInput = GetStdHandle(STD_INPUT_HANDLE)
    Dim nRet As Long
    Dim CharsRead As Long
    Dim nEvents As Long
    Dim Events() As INPUT_KEY_EVENT_RECORD
    nRet = GetNumberOfConsoleInputEvents(m_StdInput, nEvents)
    If nRet = 0 Or nEvents = 0 Then
        kbHit = False
        Exit Function
    End If
    ReDim Events(0 To nEvents - 1)
    nRet = PeekConsoleInput(m_StdInput, Events(0), nEvents, CharsRead)
    If nRet And CharsRead <> 0 And CharsRead <= nEvents Then
        Dim i As Long
        For i = 0 To nEvents - 1
            If Events(i).EventType = KEY_EVENT And _
                Events(i).bKeyDown Then
                ' [tc]Caution: Events(i).AsciiChar is ignored
                ' [tc]Caution: _getextendedkeycode is ignored
                kbHit = True
                Exit Function
            End If
        Next
    End If
    kbHit = False
End Function

相关定义我就不贴了,网上满大街都是。这个程序中间我注有两个Caution,如果检测到的按键并不是键盘上的按键,理论上kbhit应该返回False,但是这段代码不是这样。所以这个函数其实是不完美的,为什么我不去实现_getextendedkeycode呢?因为我比较懒……

相关日志

  • 暂无相关日志

Comments 26

  1. zx.longinus wrote:

    你还在坚守 vb6 啊……快点换成些好跨平台的东西吧,我应为换用 linux 损失了大量 opascal 代码(虽然有仿制品)。
    所以现在特别在乎语言的移植潜力。

    Reply

    Posted 25 十 2008 at 20:54
  2. [tc]天驰 wrote:

    是么,你分明只在乎GUI部分能不能移植吧。我的话有些程序没有移植的可能性,所以不在乎。

    Reply

    Posted 27 十 2008 at 13:30
  3. zx.longinus wrote:

    有些软件直接使用了 windows api,没办法了……

    不过我编的 delphi 软件多数可以用 wine 较完美运行。

    Reply

    Posted 27 十 2008 at 14:57
  4. [tc]天驰 wrote:

    对呀,WindowsAPI不也照样Wine嘛。

    Reply

    Posted 27 十 2008 at 19:35
  5. zx.longinus wrote:

    第一行說的是用 opascal 的同類產品重新編譯的可能性。
    第二行表示 wine 的兼容性比較高。

    Reply

    Posted 27 十 2008 at 22:01
  6. [tc]天驰 wrote:

    原来不是连贯的意思,那你也不打上一条分割线作为区分。
    ===== 示范用的分割线 =====
    那你干脆就继续delphi不就好了。

    Reply

    Posted 28 十 2008 at 20:04
  7. zx.longinus wrote:

    为什么要打分割线,连贯的意思写在一行里,用逗号隔开不就行了。

    关键 delphi 没有免费的版本啊,不像 C# 有个 express 版。c# 是原来 borland 亡命过去的 delphi 主创者搞的,我简单式了一下,风格极为类似,加上 linux 有 mono,所以 delphi 基本上被我淘汰了,另外还有 python,delphi 基本没有出场的机会了。

    Reply

    Posted 29 十 2008 at 10:13
  8. [tc]天驰 wrote:

    问题在于你的CSS中段落分得比较开,所以分割明显。
    设计人员是同一帮?不太可能吧。

    Reply

    Posted 30 十 2008 at 21:26
  9. zx.longinus wrote:

    你这万年不变的主题可以换换了吧……
    我这 v7 要不要,可以帮你定制一些内容。

    当然不是同一帮,只有一个:Anders Hejlsberg。

    Reply

    Posted 30 十 2008 at 22:21
  10. [tc]天驰 wrote:

    是么?这个丹麦人做过Delphi 6?

    Reply

    Posted 01 十一 2008 at 11:37
  11. zx.longinus wrote:

    tp delphi 基本都是这人的,大牛来的。

    Reply

    Posted 01 十一 2008 at 12:03
  12. [tc]天驰 wrote:

    不是说Delphi 4的时候已经被挖走了吗。

    Reply

    Posted 02 十一 2008 at 10:07
  13. zx.longinus wrote:

    当时 d5 基本已经做好了,所以 d5 也是史上有名的成功 ide。

    Reply

    Posted 02 十一 2008 at 11:54
  14. [tc]天驰 wrote:

    既然这么在乎跨平台,又为什么会对Java的IO看不过去呢?

    Reply

    Posted 02 十一 2008 at 22:00
  15. zx.longinus wrote:

    难道你忘了,我们以前不是所谓的性能至上主义者嘛?

    其实主要是对 java 有成见,所以借题发挥了。

    Reply

    Posted 02 十一 2008 at 23:18
  16. [tc]天驰 wrote:

    MMzX有过吗?一直是界面至上的吧。
    我对Java的成见倒是说不上理由,仅仅是心理上排斥。

    Reply

    Posted 04 十一 2008 at 23:29
  17. zx.longinus wrote:

    切,相比一下我们以前用的 ide。
    zx:delphi tc:vb
    明显我的比较有效率。

    而我现在搞的实时 3d 绘图也是很效率至上的东西。
    因为 java 的效率一直低,所以心理上排斥。
    我那不叫界面至上,只是与生俱来的美术细胞告诉我要把图形界面弄得美观一点。

    Reply

    Posted 05 十一 2008 at 13:25
  18. [tc]天驰 wrote:

    性能关键的代码我有用DLL做哦。
    而且提及性能至上,首先应该想到汇编吧,怎么会想到IDE。

    Reply

    Posted 06 十一 2008 at 11:50
  19. zx.longinus wrote:

    那样开发效率就降下来了呀,我关注的是整体性效率。

    哈哈,买了扫描仪。

    Reply

    Posted 06 十一 2008 at 22:51
  20. [tc]天驰 wrote:

    这么说来,记得Delphi也可以内联汇编的,不知道优化做得好不好。

    Reply

    Posted 07 十一 2008 at 12:31
  21. zx.longinus wrote:

    能,没试过,不符合我的美学。

    Reply

    Posted 08 十一 2008 at 11:24
  22. mazong1123 wrote:

    最近完全抛弃了MFC,
    C#, asp.net, windows sharepoint server中。。。。。。

    Reply

    Posted 08 十一 2008 at 19:23
  23. [tc]天驰 wrote:

    To longinus:
    所以你是坚决反对只能运行在特定机器上的代码咯?这就跟我以及whans划清了界限。

    To Mazong1123:
    因为一些原因用了一下C++.net,发现做这个东西的人有病,所以还是看一下C#。

    Reply

    mazong1123 reply on 十一月 16th, 2008 16:40:

    C++.net我就用过一次

    现在全面C#,我发现我堕落了,不想用标准C++了,C#害的

    Reply

    [tc]天驰 reply on 十一月 16th, 2008 18:42:

    这怎么是C#害得呢,用.net就别用STL和标准库,不兼容的东西没办法。

    Reply

    mazong1123 reply on 十一月 17th, 2008 23:14:

    因为C#太方便了,所以有种堕落的感觉。。。
    我怕以后都不会写C++了。。。

    Reply

    Posted 09 十一 2008 at 10:09
  24. zx.longinus wrote:

    可是我的 glsl 也算是在“特定机器上”执行的代码呀。

    vc.net 绝对不正常……
    cs 就好很多了。

    Reply

    Posted 10 十一 2008 at 16:37
  25. zx.longinus wrote:

    “用.net就别用STL和标准库,不兼容的东西没办法。

    果然 tc 有些事后还是会说出些有道理的话来的 。

    Reply

    Posted 16 十一 2008 at 19:25
  26. [tc]天驰 wrote:

    用什么都无所谓啦~

    Reply

    mazong1123 reply on 十二月 20th, 2008 0:05:

    有空做项目没?
    我手头可能会有个asp.net2.0开发的网站项目(我说可能),要接不?

    Reply

    [tc]天驰 reply on 十二月 20th, 2008 21:57:

    暂时没,现在有两三个东西在做了,谢谢。

    Reply

    Posted 18 十一 2008 at 10:55

Post a Comment

Your email is never published nor shared. Required fields are marked *

下面是页面统计代码,当作没看见就行了