Windows Mobileの便利なデバイスのタッチパッドとキーボード

WMを備えたコミュニケーターがあり、それを使用してPCを制御する必要がありますか?

たぶん、ポケットにマウスを入れる必要のあるトリッキーなプレゼンテーションをしたいですか?
画像

OK、カットが必要です(写真があります)。

最終製品にのみ興味があり、技術的な詳細には興味がない場合は、よくある質問のセクションに進んでください。

コンセプト


タスク:WMコミュニケーターを完全なタッチパッドとキーボードに変えながら、その助けを借りてwinシステムを制御できるようにします。
一般に、管理対象システムが勝つことはないかもしれませんが、それについては以下で詳しく説明します。
UDP / IP over Wi-Fiをトランスポート、または(目利きの人には)Bluetoothとして使用します。
これに必要なもの:順番に、クライアント側は

WMの申請


C#の .NET Compact Framework 3.5用に作成され、 WM 6.5を使用したHTC HD2でテスト済み。
クライアントアプリケーションはベンダー固有のAPIを使用しないため、WM 5および6のすべてのデバイスで動作するはずです。
キーボードとタッチスクリーンの入力をキャプチャする原理は非常に簡単です。
  1. 何らかのコントロールを作成し、ウィンドウに合わせてストレッチします(Dock = Fill)。
  2. 私たちは彼に注目しました。
  3. KeyDown、KeyUp、KeyPressイベントをサブスクライブして、キーストロークをインターセプトします。
  4. タッチパッドをエミュレートするMouseDown、MouseUp、MouseMove。

タッチパッド

タッチパッドのエミュレーションの原理が表現されている用語について少し説明します-以下の説明で使用されます:タッチパッドロジックは、MouseHandlerクラスに実装されています。ここにあります:
画像
ConfigApplyとConfigStoreは直接関係ありません。 MouseHandlerのすべての動作は、イベントの処理に帰着します。イベントの目的は一般的に名前から明らかです。

キーボード

デバイスは簡単です:
画像
イベント:
お客様

サーバーに送信するための制御メッセージを生成することをタスクとするクラス:
画像
タイプKeyboardCommand()、MouseMove()などのメソッドを介して、要求されたアクションを受け取ります。 メッセージを作成し、OnPacketSendイベントを介してソケットに送信します。

構成

ユーザーには、基本的なXML形式で構成を編集するユニークな機会が与えられます。
アプリケーションがどのように実装されているか、彼らと連携します。興味がある人は自分で確かめてください。 私はそれについて話したくありません。
画像

画面:
画像

configsのメインフィールドの目的は、名前から明らかではありません。
インターフェース

インターフェースを描くとき、​​私はカジミール・マレーヴィッチの人気の絵画に触発されました。
画像 画像
GUIは自己文書化ユーザーインターフェイスであると見なされるため、ボタンシグネチャ(左側の画面)を残しました。これは、タッチパッド(右側の画面)の最初のタッチ後に消えます。
はい、まだ言っていません。画面上のこの黒いフィールドはタッチパッドです。 ボタンの目的は、名前から明らかです。 キーボードを使用しても問題は発生しません。
ウィンドウの縦向きは、タッチパッドの画面領域を保存するために使用されます。 一方、タッチパッド自体の使用は横向きであると想定されています(ただし、これはカスタマイズ可能です)。

サーバー


pythonとSendKeysを使用して多かれ少なかれクロスプラットフォームサーバーを作成する最初の試みは失敗しました。SendKeysはUnicodeを認識しないことが判明したためです。 マウスでpythonを操作する方法、私も見ていませんでした。
2番目の試み(成功)は、CのコンソールアプリケーションからWinAPIを使用することでした。この場合、マウスおよびキーボードストリームにコマンドを書き込む作業は、 SendInput関数を使用して実行されます。
UDPソケットをリッスンし、SendInput()を定期的に呼び出す単純なコンソールアプリケーションは、考慮する価値がありません。 システムリソースを実質的に消費しない(特にクライアントが切断されている場合)ので、常に実行し続けることができます。

移植性に関しては、管理しやすいシステムにコマンドを配信するために実装が簡単な実装が使用されるため、他のプラットフォーム用のプラットフォーム固有のアプリケーションを作成することは難しくありません(視聴者はそれを必要とします)。

プロトコル


データはクライアントからサーバーにのみ送信され、確認または逆コマンドは提供されません。
コマンドは、次のフィールドで構成される固定サイズのフレームで送信されます。デフォルトのポート12358( シーケンスフラグメントによって選択が促されます )。

よくある質問


Q: OK、Device2Keyboardを使用したいです。 これには何をする必要がありますか?
A:投稿の最後にあるリンクを使用してクライアントアプリケーションとサーバーアプリケーションをダウンロードし、起動します。 デフォルトのサーバーアドレスはクライアントの255.255.255.255:12358(ブロードキャストIPアドレス)であるため、デフォルト設定では、コミュニケーターとサーバーが同じサブネット上にある必要があると想定しています。 すべてがそのまま使用でき、追加の設定は必要ありません。

Q:ワイヤレスインターフェイスを使用したくありません。 になる方法
A: ActiveSyncがインストールされた管理対象PCにデバイスを接続し、クライアントのデフォルト設定のままにします。 すべてが機能します。

Q: Drag'n'Dropの実行中にクリックを修正しましたが、サーバーへの接続が中断され、クリックは固定されたままになりました。 どうする
A: 3秒待ちます。 この間にサーバーがクライアントからマウスクリックの状態を設定するコマンドを受信しない場合、保持されているすべてのボタンを解放します。

Q:マウスカーソルを長時間移動すると、トラフィックが多いためにネットワークが落ちますよね?
A:カーソル位置を更新するためデフォルトの頻度は10ms(100回/秒)です。 パケットサイズ(3 + 1 + 1 + 4)== 9バイト、+ UDP / IPフレームオーバーヘッド28バイト、1メッセージで37バイト、つまり3.6 kbit / sになります。 マウスが動かない場合、その位置は更新されません。 答えはノーです。

おわりに


WMおよびデスクトップ用のアプリケーション、インストールには必要ありません: dl.dropbox.com/u/3815390/dev2kbd/bin/bin.7z
ソース: dl.dropbox.com/u/3815390/dev2kbd/src/src.7z
アプリケーションとそのソースは、 WTFPLライセンスの下で配布されます。
タイトルからの写真、ソース: migdal-or.livejournal.com/55703.html

Source: https://habr.com/ru/post/J120247/


All Articles