回答編集履歴
2
サンプルコード修正
test
CHANGED
@@ -32,6 +32,8 @@
|
|
32
32
|
|
33
33
|
using System.Runtime.InteropServices;
|
34
34
|
|
35
|
+
using System.Windows.Interop;
|
36
|
+
|
35
37
|
:
|
36
38
|
|
37
39
|
:
|
@@ -43,6 +45,8 @@
|
|
43
45
|
|
44
46
|
|
45
47
|
private DispatcherTimer dispatcherTimer = new DispatcherTimer();
|
48
|
+
|
49
|
+
private IntPtr hwndThis;
|
46
50
|
|
47
51
|
|
48
52
|
|
@@ -56,6 +60,14 @@
|
|
56
60
|
|
57
61
|
dispatcherTimer.Start();
|
58
62
|
|
63
|
+
|
64
|
+
|
65
|
+
// Windowクラスのプロパティにウィンドウハンドルがないので取得して覚えておく
|
66
|
+
|
67
|
+
var hwndSource = HwndSource.FromVisual(this) as HwndSource;
|
68
|
+
|
69
|
+
hwndThis = hwndSource.Handle;
|
70
|
+
|
59
71
|
}
|
60
72
|
|
61
73
|
|
@@ -65,6 +77,12 @@
|
|
65
77
|
{
|
66
78
|
|
67
79
|
IntPtr hwnd = GetForegroundWindow();
|
80
|
+
|
81
|
+
if(hwnd == hwndThis) // 自分自身への追従はしない
|
82
|
+
|
83
|
+
return;
|
84
|
+
|
85
|
+
|
68
86
|
|
69
87
|
RECT rect = new RECT();
|
70
88
|
|
@@ -113,3 +131,13 @@
|
|
113
131
|
補足
|
114
132
|
|
115
133
|
位置だけ変えても別のウィンドウに隠れる可能性があるため、Windowの共通で`Topmost`にチェックを入れると(Topmost="True")常に見えるようになります。
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
---
|
138
|
+
|
139
|
+
追記
|
140
|
+
|
141
|
+
自身がフォアグラウンドしたときにどこかに行ってしまわないようにサンプルコードを修正しました。参照するアセンブリに`System.Windows`を追加してください。
|
142
|
+
|
143
|
+
|
1
補足
test
CHANGED
@@ -107,3 +107,9 @@
|
|
107
107
|
private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
|
108
108
|
|
109
109
|
```
|
110
|
+
|
111
|
+
---
|
112
|
+
|
113
|
+
補足
|
114
|
+
|
115
|
+
位置だけ変えても別のウィンドウに隠れる可能性があるため、Windowの共通で`Topmost`にチェックを入れると(Topmost="True")常に見えるようになります。
|