1

WindowsMessage を使用して他のウィンドウを制御するアプリケーションを開発しました。C# でビルドしたサンプル アプリケーションで問題なく動作します。ただし、VB6.0 で開発されたレガシー ウィンドウで制御アプリケーションを構成しようとしました。ここで私は2つの問題を手に入れました、

1) 次のメソッドは false を返し、textfield は更新されませんでした。

 IntPtr wParam = IntPtr.Zero;
 IntPtr lParam = Marshal.StringToHGlobalAuto(text);
 bool retVal = Convert.ToBoolean(SendMessage(handle, WM_SETTEXT, wParam, lParam));

誰かがそれを理解するのを手伝ってくれますか?

2) (ウィンドウ メッセージングを使用して) レガシー アプリケーションでサブコントローラーをスキャンすると、クラス名がThunderRT6FormDCThunderRT6UserControlDCであるコントローラーがいくつか見つかりました。これらのコントローラーは何ですか?

4

1 に答える 1

2

2)ThunderRT6FormDCThunderRT6UserControlDCは、Visual Basic固有のクラス名です。VBはThunderという元のプロジェクトから派生したものであるため、名前にはVBコードの多くの断片が含まれています。あなたが見た2つを含め、多くのVBウィンドウクラスの名前にはThunderが含まれています。

1)フェッチしたハンドルが正しいウィンドウを指していないことを期待しています。Spy++または同様のツールを使用してVB6ウィンドウを確認し、適切なテキストウィンドウを決定していますか、それとも前にテキストウィンドウにフォーカスを設定していますか。 WM_SETTEXTメッセージを送信しますか?

于 2011-05-06T03:50:55.497 に答える