質問するログイン新規登録

質問編集履歴

4

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

2019/05/14 00:28

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
  }
24
24
  class Fuga
25
25
  {
26
- private HandleRef _hwnd;
26
+ private IntPtr _hwnd;
27
27
  private System.Drawing.Rectangle _rect;
28
28
 
29
29
  public Fuga(string className, string windowName)

3

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

2019/05/14 00:28

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -40,9 +40,10 @@
40
40
  ちなみに`FindWindow()`の戻り値の型を`HandleRef`にしたら烈火のごとく怒られました。
41
41
  アンマネージコードがウィンドウハンドルとして返してくれる値はあくまで`IntPtr`に過ぎないようです。
42
42
 
43
- `new HandleRef()`の第一引数には`this`をあげてますが、実際に`this`が[プラットフォーム呼び出しが返されるまで終了しないマネージド オブジェクト。](https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.handleref.-ctor?view=netframework-4.8)なのかは謎です。
44
- `GetWindoRect()`とか`MoveWindow()`の処理が終わるまでの間に破棄されるオブジェクトでないという意味なら確かにそうかもしれないけどよく分かりません。動けば官軍ということにします。
43
+ `new HandleRef()`の第一引数には`this`をあげてますが、~~実際に`this`が[プラットフォーム呼び出しが返されるまで終了しないマネージド オブジェクト。](https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.handleref.-ctor?view=netframework-4.8)なのかは謎です。
44
+ `GetWindoRect()`とか`MoveWindow()`の処理が終わるまでの間に破棄されるオブジェクトでないという意味なら確かにそうかもしれないけどよく分かりません。動けば官軍ということにします。~~ ベストアンサー者の @takabosoft 様が補足してくださっているのでベストアンサーを確認してください。
45
45
 
46
+
46
47
  ---
47
48
 
48
49
  よろしくお願いいたします。

2

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

2019/05/10 08:46

投稿

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

1

タグを追加したかった

2019/05/10 08:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes