C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

UWPの画面のハンドルについて

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■82961 / inTopicNo.1)  UWPの画面のハンドルについて
  
□投稿者/ T.T (1回)-(2017/02/22(Wed) 14:06:40)

分類:[C#] 

こんにちは

今回UWPを使ったソフトウェアキーボードを作成しようとおもっています。

まず環境です。

【環境】
Windows10 64bit Version 1607(14393.693)
VisualStudio 2017 RC4
ターゲットバージョン:Windows10 Anniversary Edition(10.0) ビルド14393
最小バージョン:Windows10(10.0)ビルド10586

【やりたいこと】
フォーカスのあるウィンドウに対して文字列をメッセージで送信するようなアプリを
作成しようとおもって進めているのですが

UWPで作成しているキーボード側には一切フォーカスが映らないように
「user32.dll」の「SetWindowLong」関数をつかって常に外す処理を実装しようとおもっていたのですが、
UWPでの画面のハンドルの取得方法がわかりません。(SetWindowLongに渡すハンドルの取得ができない)

WPFと同じXAML形式のようなので、WPFではハンドルの取得手段があるようなのでできそうな気はしてるのですが
なかなか検索してもでてこなかったので

ご存じな方がいらっしゃいましたら教えてください。


引用返信 編集キー/
■82962 / inTopicNo.2)  Re[1]: UWPの画面のハンドルについて
□投稿者/ 魔界の仮面弁士 (1146回)-(2017/02/22(Wed) 14:34:11)
ICoreWindowInterop インターフェイスの
WindowHandle プロパティで拾えないでしょうか。
https://msdn.microsoft.com/en-us/library/dn302117.aspx

# 環境が無いので未検証
引用返信 編集キー/
■82967 / inTopicNo.3)  Re[2]: UWPの画面のハンドルについて
□投稿者/ T.T (4回)-(2017/02/23(Thu) 09:49:52)
魔界の仮面弁士さん

お早い回答ありがとうございます、お返事おそくなってしまいました。

教えていただいた以下のインターフェースについて調べてみたところ取得することができました。

> ICoreWindowInterop インターフェイスの
> WindowHandle プロパティで拾えないでしょうか。
> https://msdn.microsoft.com/en-us/library/dn302117.aspx



あまりUWPを使う人はいないと思いますが、同じことをしたい人のために書き残しておきます。

上記のインターフェースを取得するためにUsingに

using System.Runtime.InteropServices;

を追加し
インターフェースを定義します。

[ComImport, Guid("45D64A29-A63E-4CB6-B498-5781D298CB4F")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface ICoreWindowInterop
{
IntPtr WindowHandle { get; }
bool MessageHandled { set; }
}

そのあとウィンドウのハンドルを取得したい場所で

dynamic corewin = Windows.UI.Core.CoreWindow.GetForCurrentThread();
var interop = (ICoreWindowInterop)corewin;
var handle = interop.WindowHandle;

上記のコードでハンドルの取得ができました。


魔界の仮面弁士さん、ありがとうございました!



解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ