问题:
1. 在 dos 下,我知道,可以通过 outportb 向键盘口发送数据,如代码 outportb( 0x61,'a' ); ,使用示波器检测 ps2 的 data 线及 clock 线,会有波形变化, 并且我也已经
用一台单片机成功收到电脑通过 ps2 口发送来的数据2. 在 windows 下,当主板通电时,会发送一个 0xff 到 ps2 口,然后 windows 自检ps2键盘时时,会发送 0xf2 给 ps2 口,ps2 键盘要回送 0xfa,0xab,0x83 给主板 ps2 口,
样,windows 才会认为键盘是存在的,并且会驱动 ps2 键盘 . 这些数据我的单片机已经收到,并且已经可以向 windows 回送信号3. 但进入 windows 系统后,所以底层硬件已经让 windows 抽像处理,无法直接控制端口(即控制主板上的  8042 蕊片 ),我现在找到唯一的办法,是通过 winio, 通过 winio,
看下述文章,http://www.360doc.com/content/10/0705/10/2034962_36998894.shtml 可向 键盘缓冲区写数据,但注意,只是 "键盘缓冲区" 而非直接写到 ps2 的口上,
所以使用 winio 写端口,只能实现键盘模拟(即写放一个键值后,只能让 windows 收到),而无法真正写放到 ps2 口 ,我用 波器检测 到,使用下述函数 function InitializeWinIo(): BOOL; stdcall; external 'WinIo.dll' name 'InitializeWinIo';
procedure ShutdownWinIo(); stdcall; external 'WinIo.dll' name 'ShutdownWinIo';{使用 Sendbyte 前,要初始化 winio , 即调用 InitializeWinIo  }
procedure SendByte(Por,Cod : Byte);
begin
  Sleep(1);
  asm
    PUSH EAX
    PUSH EDX
    //等待状态寄存器标志位OBF置0
    @Loop:
    IN  AL,$64
    AND AL,01b
    JNZ @Loop
    //写入数据
    MOV AL,Cod
    MOV DL,Por
    MOV DH,0
    OUT DX,AL    POP EDX
    POP EAX
  end;
end;{向键盘缓冲写 a 键}
begin
 SendByte($64,$D2);
  SendByte($60,$1E);
  SendByte($64,$D2);
  SendByte($60,$9E);
end;
上述代码,是可以向  windows 成功发送 a 键,而无法让外接 ps2 设备收到
有没有高手,知道如何在 windows 下,真正与 ps2 进行通讯的方法