質問編集履歴

4

普通に間違ってたので修正

2019/05/14 00:28

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  {
50
50
 
51
- private HandleRef _hwnd;
51
+ private IntPtr _hwnd;
52
52
 
53
53
  private System.Drawing.Rectangle _rect;
54
54
 

3

細くしてもらったのを報告

2019/05/14 00:28

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -82,9 +82,11 @@
82
82
 
83
83
 
84
84
 
85
- `new HandleRef()`の第一引数には`this`をあげてますが、実際に`this`が[プラットフォーム呼び出しが返されるまで終了しないマネージド オブジェクト。](https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.handleref.-ctor?view=netframework-4.8)なのかは謎です。
86
-
87
- `GetWindoRect()`とか`MoveWindow()`の処理が終わるまでの間に破棄されるオブジェクトでないという意味なら確かにそうかもしれないけどよく分かりません。動けば官軍ということにします。
85
+ `new HandleRef()`の第一引数には`this`をあげてますが、~~実際に`this`が[プラットフォーム呼び出しが返されるまで終了しないマネージド オブジェクト。](https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.handleref.-ctor?view=netframework-4.8)なのかは謎です。
86
+
87
+ `GetWindoRect()`とか`MoveWindow()`の処理が終わるまでの間に破棄されるオブジェクトでないという意味なら確かにそうかもしれないけどよく分かりません。動けば官軍ということにします。~~ ベストアンサー者の @takabosoft 様が補足してくださっているのでベストアンサーを確認してください。
88
+
89
+
88
90
 
89
91
 
90
92
 

2

改善後コードと愚痴を追加

2019/05/10 08:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,97 @@
1
+ ### 解決後のコード
2
+
3
+ 変更したやつだけ置いておきます。
4
+
5
+ ```C#
6
+
7
+ namespace hoge
8
+
9
+ {
10
+
11
+ class NativeCodes
12
+
13
+ {
14
+
15
+ [StructLayout(LayoutKind.Sequential)]
16
+
17
+ public struct RECT
18
+
19
+ {
20
+
21
+ public int Left; // x position of upper-left corner
22
+
23
+ public int Top; // y position of upper-left corner
24
+
25
+ public int Right; // x position of lower-right corner
26
+
27
+ public int Bottom; // y position of lower-right corner
28
+
29
+ }
30
+
31
+
32
+
33
+ [DllImport("user32.dll")]
34
+
35
+ public static extern IntPtr FindWindow(String lpClassName,String lpWindowName);
36
+
37
+
38
+
39
+ [DllImport("user32.dll")]
40
+
41
+ [return:MarshalAs(UnmanagedType.Bool)]
42
+
43
+ private static extern bool GetWindowRect(HandleRef hWnd, out IntPtr lpRect);
44
+
45
+ }
46
+
47
+ class Fuga
48
+
49
+ {
50
+
51
+ private HandleRef _hwnd;
52
+
53
+ private System.Drawing.Rectangle _rect;
54
+
55
+
56
+
57
+ public Fuga(string className, string windowName)
58
+
59
+ {
60
+
61
+ _hwnd = NativeCodes.FindWindow(className, windowName);
62
+
63
+
64
+
65
+ NativeCodes.GetWindowRect(new HandleRef(this, _hwnd), out _rect);
66
+
67
+
68
+
69
+ }
70
+
71
+ }
72
+
73
+ }
74
+
75
+
76
+
77
+ ```
78
+
79
+ ちなみに`FindWindow()`の戻り値の型を`HandleRef`にしたら烈火のごとく怒られました。
80
+
81
+ アンマネージコードがウィンドウハンドルとして返してくれる値はあくまで`IntPtr`に過ぎないようです。
82
+
83
+
84
+
85
+ `new HandleRef()`の第一引数には`this`をあげてますが、実際に`this`が[プラットフォーム呼び出しが返されるまで終了しないマネージド オブジェクト。](https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.handleref.-ctor?view=netframework-4.8)なのかは謎です。
86
+
87
+ `GetWindoRect()`とか`MoveWindow()`の処理が終わるまでの間に破棄されるオブジェクトでないという意味なら確かにそうかもしれないけどよく分かりません。動けば官軍ということにします。
88
+
89
+
90
+
91
+ ---
92
+
93
+
94
+
1
95
  よろしくお願いいたします。
2
96
 
3
97
  ### 前提・実現したいこと

1

タグを追加したかった

2019/05/10 08:42

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes