C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■96407 / )  Re[2]: SendMessageの使用法
□投稿者/ 初心者 (4回)-(2020/11/20(Fri) 12:35:52)
Hongliangさん、魔界の仮面弁士さん回答ありがとうございます。
VB6をVB.netに移植したので、記述としては、かなりいい加減なコードになっていると
ご指摘にとおり思いましたが、魔界の仮面弁士さんのコードを拝見し、知識のなさを実感しました。
問題点1
MSSpy++は持ち合わせていので、WinSpy++(フリー)にて判ったことは、(Textboxか判断できませんが)
CADとは、BricsCADでV13とV20(最新)の比較です。
WinSpy++のHandleとCaptionの値の違いで、
V13時は、Captionの値は、入力したコマンドの文字列を反映してましたので、正しく処理できていた
V20では、反映しておらず、"text"が常に取得されます。(コマンド文字列が取得できないので処理できない)
思うに、表示(ここではコマンド文字列の事ですが)しているものと実際と違い、何かテクニックを使用している
のではないかと推測します。
お願いとなりますが、色々試みましたが私には、理解不能です。
何方か、BricsCAD(体験版)をインストールして頂き、
解明してもらえないでしょうか。
目的は、入力されてコマンド文字列の取得です。

問題点2(文法そのものに問題があり)
APIの定義はこんな感じです。ネットから引っ張り出して、最終的にこうなりました。
Public Declare Function SendMessageString Lib "User32.dll" Alias "SendMessageA" (ByVal hWnd As Int32, _
ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As String) As Int32

<System.Runtime.InteropServices.DllImport("user32.dll", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Public Function SendMessage( _
ByVal hWnd As Int32, _
ByVal Msg As Int32, _
ByVal wParam As Int32, _
ByVal lParam As Int32) As Integer
End Function

以下、回答
> 上記は WM_GETTEXT メッセージの話でしょうか?
はい、そうです


> 指定しているウィンドウハンドルは、そのコントロールの HWND になっていますか?
直接入力したりして試しているので間違いはないです

> ウィンドウレスコントロールが対象の場合には、SendMessage では受け取れないので、
> UI オートメーションなどを使って値を取得する必要があるかもしれません。
??

>>オーバーロードを使わずに別名関数として API を宣言している点も、.NET っぽくないですし。
オーバーロードの用法は分かりませんが、文法的に間違いが多いので、魔界の仮面弁士さんに作って
頂いたものを移植して、トライしていきます。
因みに、「Option Strict On」を指定したら、100個以上ありました、いや〜まいったな!

時間が掛かると思いますが、よろしくお願いいたします。


返信 編集キー/


管理者用

- Child Tree -