看到以前帖子上有说过一个用ASM锁键盘20端的程序:
begin
  Asm    //封锁20端口
    IN AL,21H
    OR AL,02H
    OUT 21H,AL
  end;
end;
键盘是锁死了。但再次打开20端时刚输入的键也跟着放出来了。我想应该是键值还存放在
缓冲区中没去掉。怎样清空它?

解决方案 »

  1.   

    盘缓冲区0040:001e-0040:003e,为一环形队列。队首指针0040:001a,队尾指针0040:001c,试试看下面的程序:
    in al,61h
    mov ah,al
    or al,?
    out 61h,al
    in al, 60h
    mov scancode, al
    mov al,ah
    out 61,al
    mov al,20h
    out 20h,al
      

  2.   

    要调用汇编???用API函数行吗?
      

  3.   

    能做得到当然可以不用汇编啦!有这样的API吗?
      

  4.   

    Procedure EmptyKeyQueue;
    Var
      Msg: TMsg;
    Begin
      While PeekMessage( Msg, 0, WM_KEYFIRST, WM_KEYLAST,
                         PM_REMOVE or PM_NOYIELD )
      Do;
    End;
      

  5.   

    to: celeronII(抽烟的鱼) 
    非常感谢,开始入题了!只是我K不懂这个函数的Y文帮助。不知道它具体是做怎么用的。我试过可以把WINDOWS发给程序的键清掉,但比如开始键,ALT+TAB键它就没办法清了。如果能帮我解释一下这个函数的具体用处,或者能不能放到最前台去过滤每一个键呢??