8

私は次のコードを使用しています:

protected override void OnSourceInitialized(EventArgs e)
{
...
....
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
...
...
}

一部のシステムでは、「ソース」値がnullになり、その理由がわかりません...

4

3 に答える 3

8

.Net 4.0 以降では、HwndSource最初にウィンドウを表示しなくてもアクセスできます。

var helper = new WindowInteropHelper(this);
var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle());
于 2017-07-06T12:54:00.637 に答える
5

WumpasTamer の答えは正しいです。「ターンキー」ソリューションを探している他の人のために、簡単なコード サンプルを追加したいと思います。すでに WPF を使用している場合windowは必要ありませんが、Winforms を使用していて使用したい場合は、PresentationSourceこれを使用する必要があります。

void Main()
{
    var window = new Window
    {
        Width = 0,
        Height = 0,
        WindowStyle = WindowStyle.None,
        ShowInTaskbar = false,
        ShowActivated = false
    };
    window.Loaded += a_Loaded;
    window.Show();
}

void a_Loaded(object sender, EventArgs e)
{
    var s = (Window) sender;
    var source = PresentationSource.FromVisual(s);
    //...
    s.Close();
}
于 2015-04-23T20:47:30.413 に答える