| 
			 
					阅读:1539回复:5
				 
				win2000下,通过8042,模拟鼠标单击
					我想在win2000下,通过控制8042模拟鼠标单击。
 
							我在程序中,每次对8042的60h,64h端口进行操作时,都会导致键盘、鼠标没有响应,只能重新启动。 能不能在应用程序中,通过outport,inport的方式操作,因为我不知道怎样写驱动程序。 谢谢大家,我都查了几天资料了。  | 
	|
| 
			 沙发# 
								发布于:2005-02-16 18:14				
			
					以下是我在win2000下,用vc6写的一个例子,但没有作用,并有时让键盘和鼠标没有响应。
 
							void CtestDlg::OnBnClickedButton1() { // 对 8042 键盘控制芯片进行编程 // 允许 mouse 接口 Outport(0x64,0xa8); // 通知 8042 下个字节的发向 0x60 的数据将发给 mouse Outport(0x64,0xd4); // 允许 mouse 发数据 Outport(0x60,0xf4); // 通知 8042,下个字节的发向 0x60 的数据应放向 8042 的命令寄存器 Outport(0x64,0x60); //鼠标左键按下 Outport(0x60,0x09); Outport(0x60,0x0); Outport(0x60,0x0); //鼠标左键释放 Outport(0x60,0x08); Outport(0x60,0x0); Outport(0x60,0x0); }  | 
	|
| 
			 板凳# 
								发布于:2005-02-16 18:40				
			
					直接写控制器应该不可以
 
							你为什么要这样写呢?  | 
	|
					
						
  | 
	
| 
			 地板# 
								发布于:2005-02-16 18:52				
			
					其实用什么方式无所谓,只是不想用winapi,因为winapi的sendmessage和mouse_event都不是真正产生硬件鼠标单击
 
							我查资料时,看到类似的应用,所以就这样试试。 如果不这样写,可以怎样写呢?  | 
	|
| 
			 地下室# 
								发布于:2005-02-21 15:33				
			以下是我在win2000下,用vc6写的一个例子,但没有作用,并有时让键盘和鼠标没有响应。 操作port在ring3下是禁止的,写个键盘过滤驱动  | 
	|
					
						
  | 
	
| 
			 5楼# 
								发布于:2005-02-21 18:35				
			
					Outport我是采用NTPort Library公司的Lib做的,所以应该没问题。
 
							我尝试过做驱动,在驱动中,用IRP_MJ_READ读鼠标状态时,死机,代码如下: newIrp = IoBuildSynchronousFsdRequest(IRP_MJ_READ,devExt->TopOfStack,&input,sizeof(MOUSE_INPUT_DATA),&FilePointer,&event,&iostatus); MyIoStackIrp = IoGetNextIrpStackLocation(newIrp); MyIoStackIrp = IRP_MJ_READ; MyIoStackIrp->Parameters.Read.Length = sizeof(MOUSE_INPUT_DATA); MyIoStackIrp->Parameters.Read.ByteOffset.QuadPart = 0; //下面这行死行,不知道是原因 NtStatus = IoCallDriver(devExt->TopOfStack, newIrp); if (NtStatus == STATUS_PENDING) { KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); NtStatus = iostatus.Status; }  | 
	|