■84850 |
Re[3]: 他アプリをforをつかってクリックできません |
□投稿者/ 魔界の仮面弁士 -(2017/08/09(Wed) 14:09:33)
| ■No84833 (たまちゃん2世 さん) に返信 > SendMessageで文字列を送るために、Stringにしていました。 > 文字列を記入した後に、lParamの型を変更できないのでしょうか。
WM_LBUTTONDOWN は String 値を扱わないので、String にする必要はない筈です。
文字列を受け取るメッセージのためにも SendMessage を使っている場合には、 DllImport した API 宣言をオーバーロードしてやりましょう。すなわち、 String を渡すための SendMessage 宣言(現状のコード)とは別に IntPtr を渡すための SendMessage 宣言の両方を用意しておくということです。
>>> 0x00090009の代わりに、以下のx_y_positionを使おうとしてもエラーになってしまします。 >>> String x_position = int_x.ToString(); >>> String y_position = int_y.ToString(); >>> String x_y_position = "0x" + x_position + y_position;
int_x = int_y = 9 だった場合、上記のコードだと 0x99(=153)という文字列になってしまいます。 0x00090009 (=589833) とは別の値になってしまうかと。
そもそも今回のケースでは文字列化しても意味が無いのですが、 .ToString() では 10進数表現になるので、16進数にしたいのなら .ToString("X4") などにするべきだったかと思います。
>> さらに言えば、上位(左側)が Y 座標なので、上下(左右)逆ですね。 > X,Yが逆だとは思っていませんでした。
0x12345678 なら、X = 0x5678 / Y = 0x1234 ですね。
ちなみに .NET Framework 上では、 static IntPtr MAKELPARAM(int low, int high) { return (IntPtr) ((high << 16) | (low & 0xffff)); } というメソッドを用意しておき、 IntPtr lParam = MAKELPARAM(x, y); のように利用しているようです。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/gg153548.aspx 》 》 これらのメッセージでは常に、lParam パラメーターに 》 マウス ポインターの x 座標と y 座標が格納されています。 》 lParam の最下位の 16 ビットには x 座標が、 》 次の 16 ビットには y 座標が格納されています。 》 》 64 ビットの Windows では、lParam は 64 ビット値になります。 》 lParam の上位 32 ビットは使用しません。MSDN のドキュメントでは、 》 lParam の "上位ワード" と "下位ワード" という言葉が使用されます。 》 64 ビット環境の場合、これは下位 32 ビットのうちの 》 下位ワードと上位ワードを意味します。 》 |
|