質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

タッチパネル

タッチパネルとは、画面に指やペンで直接触れてコンピューターを操作する電子機器のことです。表示装置と入力装置の2つの機能を組み合わせたデバイスです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

11587閲覧

C#でタッチイベントを発行したい

IYEMON018

総合スコア202

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

タッチパネル

タッチパネルとは、画面に指やペンで直接触れてコンピューターを操作する電子機器のことです。表示装置と入力装置の2つの機能を組み合わせたデバイスです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2017/03/15 17:32

###実現したいこと
■簡潔に
独自に作成したタッチパネルから取得した座標情報をWindows(OS)に通知したい。

■環境
・OS : Windows 10 64bit
・開発環境 : Visual Studio 2015
・言語 : C#
・.NET Framework : 4.6
・アーキテクチャ : WPF

■具体的に
独自に作成したタッチパネルをUSBでPCに接続しています。
タッチパネルを操作するとUSB経由で座標などの情報を取得することができます。
このタッチ座標はWindows OSでは検出されません。
なので、USBから座標情報をもとにWPFの各コントロールにタッチイベントを発行する処理を実装する必要があります。
(例えば、座標(100, 120)の位置をタップすると、その位置にあるボタンのTochDownイベント or MouseDownイベントを発行する。)
タッチパネルから座標情報を取得することまではできました。

そこで質問なのですが、このタッチ座標をWindows OSに通知することは可能でしょうか?
可能であればその方法をご享受ください。
できれば、以下のように各コントロールに対してタッチイベントを発行する処理を実装することなくWPFの画面を操作したいです。

  1. タッチパネルを操作する。
  2. USB経由でタッチ座標などの情報が送られてくる。
  3. タッチ座標をWindows OSへ通知する。
  4. WPFで作成した画面を操作する。

イメージとしてはタブレットでの操作を実現できればいいと思っています。
.NET FrameworkのAPI、Win32 APIなど、手段は何でもいいのですが、C#を使って実現したいです。

###出来なかったこと
以下のリンク先にある方法を試しました。
結果としては、「タスクバーやスタートメニューなどの領域はタッチを検出したが、WPFのコントロールはタッチを検出しなかった」となりました。
Windows 8環境でタッチ入力をシミュレーションする

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そこで質問なのですが、このタッチ座標をWindows OSに通知することは可能でしょうか?

OSではなくて、対象のWindowに対してPostMessageでWM_TOUCH系とかWM_POINER系を
送信すればいいんじゃないでしょうか?
https://msdn.microsoft.com/en-us/library/windows/desktop/dd317341(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/hh454903(v=vs.85).aspx
もしくは、WM_MOUSE系を送信してもいいと思います。

投稿2017/03/16 00:59

hmmm

総合スコア818

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IYEMON018

2017/03/17 18:38

回答ありがとうございます。 返事が遅くなって申し訳ありません。 結果から言うと、「自己解決」しました。 PostMessageを使用して座標情報を送信しようとしたのですが、うまく動作せず(こちらの原因は不明。実装方法が良くなかったみたいです。)一度時間をおきました。 改めて質問内容の「出来なかったこと」で使用していた"InjectTouchInput"について調査しているうちに、私の実装方法が間違っていることがわかりました。 正しくは、 1. アプリケーション起動時に一度だけ"InitializeTouchInjection"を呼び出す。 2. タッチ操作のたびに"InjectTouchInput"を呼び出す。 ことで意図した動作となりました。 今回はご回答の内容が解決手段とはなりませんでしたが、唯一回答いただけたのでベストアンサーとさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問