首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET Micro Framework 開發實戰 (二):讓 PC 成為裝置的滑鼠鍵盤

     編輯:關於.NET

應用情境

許多嵌入式儀器僅有少數實體按鈕,卻需輸入大量參數 (藥名、速度、壓力等)。若能透過除錯埠讓 PC 模擬滑鼠鍵盤,將大幅簡化輸入流程。本文實作一套 虛擬輸入代理層,包含 MFDeploy 外掛、TinyCLR 核心修改、事件驅動機制、WinForms 輸入代理。

四大實作步驟

1. MFDeploy 虛擬輸入外掛

利用既有 WriteMemory 通道,將滑鼠/鍵盤事件封裝為 8 位元組封包寫入特定位址 0xD:

// 鍵盤封包: 0x01, State, KeyCode, KeyValue, Shift, Caps, Ins, 0
// 滑鼠封包: 0x02, State, LeftBtn, RightBtn, X_Hi, X_Lo, Y_Hi, Y_Lo
private void SendData(byte[] bytData) {
  byte[] TempData = new byte[10] {0xAA, 0x55,0,0,0,0,0,0,0,0};
  Array.Copy(bytData, 0, TempData, 2, 8);
  engine.WriteMemory(0xD, TempData, 0, 10);
}

表單大小自動配合裝置 LCD 解析度,形成等大的滑鼠活動區。

2. TinyCLR 核心攔截記憶體寫入

修改 Debugger.cpp 中 CLR_DBG_Debugger::AccessMemory 的 AccessMemory_Write 分支:

case AccessMemory_Write:
  if (accessAddress == 0xD && NumOfBytes==10 && bufPtr[0]==0xAA && bufPtr[1]==0x55) {
    UINT32 data1 = (bufPtr[2]<<24)|(bufPtr[3]<<16)|(bufPtr[4]<<8)|bufPtr[5];
    UINT32 data2 = (bufPtr[6]<<24)|(bufPtr[7]<<16)|(bufPtr[8]<<8)|bufPtr[9];
    VI_GenerateEvent(data1, data2); // 觸發事件
    success = TRUE;
  } else { /* 原本寫入邏輯 */ }
  break;

3. 裝置端事件驅動機制 (Native Event Dispatcher)

於 \DeviceCode\PAL\VirtualInput 實作標準 CLR_RT_DriverInterruptMethods:

  • VI_GenerateEvent 將封包存入 HAL 佇列 (SaveNativeEventToHALQueue)。
  • 組裝 g_CLR_AssemblyNative_Microsoft_SPOT_YFVI_Event 組件資料,名稱需與 Managed 端一致。

4. WinForms 輸入代理層 (YFSoft.InputProxy.dll)

  • EventDispatcher 繼承 NativeEventDispatcher,建構子傳入 "Microsoft_SPOT_YFVI_Event"。
  • eventDispatcher_OnInterrupt 解析 data1/data2 還原鍵盤/滑鼠參數,呼叫 SendKey/SendMouse。
  • 應用程式啟用只需一行:Application.InputProxy.VirtualInputEnable = true;。

特色

  • 虛擬輸入與實體輸入裝置 (觸控螢幕、按鍵) 並行不衝突。
  • 滑鼠移動、按鍵按下/放開、字元輸入 (含 Shift/特殊鍵) 完整支援。
  • 架構可擴充:同一 Custom 通道已整合滑鼠鍵盤與檔案系統指令。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved