textBoxに文字列を挿入したい

このQ&Aのポイント
  • VB6.0とWindows2000で、Form内にtextBoxを作成し、sendMessageAPIを使って別のファイルのTextBoxに文字列を送りたいが、うまくいかない。
  • FindWindowを使ってhWndのハンドルを取得しようとしたが、うまくいかない。他にハンドルの取り方はあるのか。また、sendMessageの第4引数に文字列を挿入すると文字化けが起こる。
  • 助言が必要なので、うまくいかない理由を知っている方がいれば教えてほしい。
回答を見る
  • ベストアンサー

textboxに文字列を挿入したい。

すみません。 質問があります。 VB6.0 windows2000 AファイルのFormの中にtextBoxを作成します。 BファイルにsendMessageAPIを使ってAファイルのTextBoxに文字列を送りたいのですが、うまくいきません。 sendMessage(hWnd,WM_SETTEXT,0,"テスト") FindWindowを使って、hWndのハンドルを取得したいのですが、うまくいきません。 他にハンドルの取り方ってあるのでしょうか? また、sendMessageのだい4引数は文字列を挿入しても文字化けを起こします。どうしてかよくわかりません。 どうしてもうまくいかないのですみませんが、ご存知の方いたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

FindWindow()はトップレベルのウインドウハンドルしか取得できませんので textBox のハンドルは直接取得できません。 1)まずトップレベルのウインドウハンドルをFindWindow()を使用して取得する。 2)次にFindWindowEx()を使用してtextBoxのウインドウハンドルを取得する。 という手順でできませんか? 該当のtextBoxの階層が深い場合には2)を何度か繰り返す。 階層をたどるには VisualStudio のスパイを使ってみてください。 ウインドウのコントロールIDがスパイで取得できる場合には GetDlgItem(だったかな?)でウインドウハンドルを取得することもできたかと思います。

poposan
質問者

補足

ありがとうございました。 うまくいきました。 ただ、文字化けを起こしてしまうので、理由が分かりません。 VB6.0を使っているからでしょうか? どなたかご存知の方いらっしゃいましたら、教えてください。

関連するQ&A

  • visualstudioについて

    visualstudio2008 c++でアプリケーションを作っているのですが, 画像のようなアプリケーションを起動させ, HWND hWnd = ::FindWindow(NULL,"D:\アプリケーション.exe"); ::SendMessage(hWnd,WM_SETFOCUS,0,0); としたのですが,ウィンドウハンドルを取得できていないみたいで,SendMessageが働いていません. また,HWND hWnd = ::FindWindow(NULL,"D:\アプリケーション.exe");の行のところで warning C4129: '' :とエラーがでているのですがどうしてでしょうか? 一応"D:\\アプリケーション.exe"と変えれば警告は消えます. よろしくお願いします.

  • VB2010 TextBoxの文字列に正しく入力されないのは何故ですか

    VB2010 TextBoxの文字列に正しく入力されないのは何故ですか? string型の変数に文字列を入れ、TextBox.Textに代入すると文字列の後ろが切れてしまう。 Dim st As String st="s01114DG000555<0?e09" TextBox.Text = st この場合、TextBox.Textには"s01114DG000555<0"となり、後ろの4文字が切れてしまっている。 ちなみに、 TextBox.Text = "s01114DG000555<0?e09" とすると、正常に全文字数が入る。 半角文字列の塊なのに、どうしてこのようなことが起きるのでしょうか? また、これの対応策は何ですか? 以上、よろしくお願いします。

  • 【C#】FindWindowExの使い方を教えてください

    はじめまして Visual Studio 2005を使用しています。 C#.NETは、いじり初めて1週間の超初心者です。 C#.NETでのFindWindowExの使い方を教えてください。 まずはじめに、vb.netで作ったアプリAの"Form1"があり、その中にテキストボックス"TextBox1"があります。 "TextBox1"のテキスト(キャプション?)には同じく"TextBox1"と入力されています。 そこで、C#側のアプリBでVBのアプリAの"Form1"のハンドルをFindWindowで取得します。 ここまでは出来ました。 次に、FindWindowExを使って"TextBox1"のハンドルを取得したいのですが、どうしてもうまく取得できません(0が返ってきます) 以下、C#のソースです。 (textBox1のMultilineはTrueです) ================================================================== using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsApplication1 { public partial class Form1 : Form { [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern IntPtr FindWindowEx(IntPtr hWnd, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); public IntPtr hWnd = (IntPtr)0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IntPtr hWnd; IntPtr hWndTest; string sClassName = null; string sWindowText = "AppA"; // アプリAのウインドウハンドルを取得 hWnd = FindWindow(sClassName, sWindowText); textBox1.Text = "ウインドウのハンドル " + hWnd + "\r\n"; // アプリAのウインドウ内のTextBox1のハンドルを取得 hWndTest = hWnd; sClassName = null; sWindowText = "TextBox1"; hWnd = FindWindowEx(hWndTest, IntPtr.Zero, sClassName, sWindowText); textBox1.Text += "テキストボックスのハンドル " + hWnd; } } } ================================================================== Spy++で覗くとテキストボックスにもハンドルが割り与えられているので取得できるはずだと思っているのですが、どうしてもいまくいきません。 どうか、よろしくご享受願います。 ちなみに、アプリAのテキストボックスのクラス名が”WindowsForms10.EDIT.app.0.378734a”となっているのですが、これはどの環境でビルド(コンパイル)しても不変なのでしょうか? 不変だとしたら、クラス名を使えば悩まずに取得できると思うのですが・・・(実験済み)

  • WM_CLEARなど使えないメッセージがある。

    WM_CLEARなど使えないメッセージがある。 外部ソフトからハンドルを取得して EditBox を操作しようとしています。 PostMessage/SendMessage で該当 EditBox にメッセージを送るのですが WM_PASTE, WM_CHAR などは期待通りの動きをするのですが WM_CLEAR, WM_SETTEXT など無反応です。 PostMessage( hwnd, WM_PASTE, 0, 0 ); // Operated PostMessage( hwnd, WM_CHAR, (int)msg[i], 0 ); // Operated PostMessage( hwnd, WM_CLEAR, 0, 0 ); // Not Operated PostMessage( hwnd, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"ABC" ); // Not Operated よろしくお願いします。

  • VB2010の TextBox文字について の 質問

    VB2010の TextBox文字について の 質問 お尋ねします VB2010_Express版で プログラムを作っている者です Form1にTextBox1を貼付け、 そのTextBox内に 複数行に別けて 文字を記入します しかしDebug開始=run を すると、 TextBox内の文字列の背景が暗転し、 TextBoxのBackColorの色の上に 表示してくれません 念のために BackColorは薄黄色[MS 255 255 192 ]で、 ForeColorは 焦茶色の[Web Maroon]です runさせた後の 文字表記位置に 各文字ごとに 青色のBackColorが 現れ、 即ち、青色の枡目ごとに 焦茶色の 文字列が 現れ、 ForeColorの薄黄色の上に焦茶色の文字が 出てくれません そうして Form1.Designer.VB の コマンド群を眺めても、 TextBox1の プロパティウィンドウ を 見て廻っても、 それらを変更しそうなコマンド文や項目が 判らないのです 文字位置の背景色が青色に変らずに、指定したBackColor上で表示させるには、 どうしたら良いのか、お教え下さい 宜しくお願い申し上げます ____ akqsp より ____

  • CreateFileで開いたファイル名を取得するには?

    CreateFile関数で開いたファイル名を取得して、エディットボックスに表示させるプログラムを作りたいと思っています。 sendmessageを使って表示させることを考えてみたのですが…。 以下にソースを載せます。 // メインWindowへ通知するデータを作成 COPYDATASTRUCT cds; cds.lpData = pszFileName; //CreateFileの第一引数pszFileName(ファイル名)を格納 cds.cbData = lstrlen(pszFileName) + 1; cds.dwData = 0; // メインWindowを検索 HWND hWnd = FindWindow(NULL, _T("メインウインドウの名前")); if(hWnd) SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds); という風では、取得できないのでしょうか? よろしくお願いします。

  • TEXTBOXに文字列を表示させたいのだが、スペースで改行してしまう

    困っています。 VB6にてプログラムを作成しています。 簡単なプログラムでTEXTBOXに、改行のない長い文字列を スクロールバーを使わずに折り返して表示させたい のですが、適当なところで勝手に改行されてしまいます。 いろいろと試してみると、スペースからスペースまでの 文字を1つの文字列としているみたいで、その文字列が なるべく折り返さないように、もしスペースがあったら 改行するようです。 つまり文字列にまったくスペースがなければきれいに 折り返して表示されます。 スペースもその文字列として扱ってくれるような方法 はないでしょうか? よろしくお願い致します。

  • C++で外部の『ファイルを開く』ダイアログ操作

    C++を使い、別のアプリケーションを動かすというプログラムを書いているのですが、行き詰ってしまいました。この解決法など良い知恵があればお願いします。 別アプリケーションの『ファイルを開く』ダイアログを開き、そのパス入力スペースに自動でパスを入力し、『開く』をクリックしたと認識させるところまでを行いたいのです。 //ここでファイルを開くダイアログを表示させています。 SendMessage(hWnd,WM_COMMAND,32797,NULL); ☆//ファイルを開く hWndOpen = FindWindow(NULL, "ファイルを開く"); //ファイルのパス入力 hWndOpenCBE32 =FindWindowEx(hWndOpen , NULL, "ComboBoxEx32" , NULL); hWndOpenCB =FindWindowEx(hWndOpenCBE32 , NULL, "ComboBox" , NULL); hWndOpenEdit =FindWindowEx(hWndOpenCB , NULL, "Edit" , NULL);//パスを入力するところ SendMessage(hWndOpenEdit, WM_SETTEXT, 0, (LPARAM)"aaa.txt"); 『ファイルを開く』のウィンドウが開くところまではいきました。それから先がうまくいきません。 確認として、『ファイルを開く』がすでに表示されている状態で☆部分以降の処理を行うと、うまくとおります。SendMessage(hWnd,WM_COMMAND,32797,NULL);で自動的に『ファイルを開く』ウィンドウを開いてそのまま自動的にパスを入力→開く の動作がうまくいかないのです。

  • TextBox内でドラッグした文字列をタグで括るには?

    TextBox内でドラッグした文字列をタグで括るにはどうすればいいでしょうか? textbox1.text="あいうえお" 上記の"あいうえお"の内、"いうえお"をマウスでドラッグし、button1を押したら「<a>いうえお</a>」のように、<a></a>のようなタグで括り、 textbox1へ「あ<a>いうえお</a>」と返す処理を行いたいのですが、どういったコードを記述すればよいでしょうか? 処理言語はC#.NETです。

  • TextBoxにフォーカスを与えると文字列が選択された状態にしたい

    TextBoxにフォーカスを与えると文字列が選択されて反転表示された状態になるソフトってありますよね。(IEのアドレスバーみたいに。) VBでこれを実現しようとすればどの様にすればよいのでしょうか。 ご存じの方、教えてください。

専門家に質問してみよう