• ベストアンサー

SendMessageについて

VERSION:VB6.0 SendMessageを使用しSQLPlusに対して文字列を送りたいのですが巧くいきません。 ↓が自身が作成したSendMessageを使用しているプログラムの一部なのですが、おかしな点や別な方法があればご教授お願いします。 '別アプリにメッセージを送る Declare Function SendMessageStr Lib "user32.dll" _ Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, _ ByVal wParam As Long, ByVal lParam As String) As Long Dim pId As Long 'プロセスID pId = Shell("SQLPlusのアドレス" & " /nolog", 1) SendMessageStr pId, WM_SETTEXT, 0, "送信する文字列" というプログラムです。 SQLPlusは起動するのですが文字列がSQLPlus側に送れず困っています。 どうかよろしくお願いします。

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

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

#1さんの言う通り、第一パラはプロセスIDではなく、ウィンドウハンドルです。 さらにこれは、SQLPlusがどのように作られているのかがわかりませんが、別プロセスのウィンドウハンドルにSendMessage+WM_SETTEXTを投げても、うまくいかない場合があります。 その場合共有メモリを確保し、その領域に文字情報を格納して、WM_SENDTEXTを送る必要があるかもしれません。 ところが仕様が、 ・起動 ・任意のテキストを送信 という流れになっていますよね。それを ・テキストファイルにSQLに出力 ・SQLPlus起動パラメータを利用し、テキストファイルを実行させる というように変えてもよいのであれば、その方が楽チンだと思いますよ。

ronde
質問者

お礼

SendMessageの引数はウィンドウハンドルであってプロセスハンドルではないですよね(汗 かなり勘違いをしていました(汗 テキストファイルに出力してから実行する・・・なるほど、そういうやり方もあるのですね! いろいろ工夫しながら効率のいいやり方でやろうと思います ありがとうございました!

その他の回答 (3)

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.4

ANo.1です。ANo.3の1050YENさんのおっしゃる起動パラメータを利用する (SQLスクリプト実行)方法が通常の実現方式だと思われます。 仕様の問題ですが、このあとSQLPlusで何をしたいのかがポイントだと思います。

ronde
質問者

お礼

何度もありがとうございます。 SQLPlusにSQL文が書かれてあるファイルを投げてそれを実行し、 その後ログファイルに結果をはきだすということをやります。 今回はプロセスハンドルとウインドウハンドルを勘違いしていたことが最大の間違いでしたので、ウインドウハンドルを取得してメッセージを送ることはできました(汗 ありがとうございました。

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.2

すいません。こちらのがいいと思います。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t02.htm

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.1

SendMessageの第一引数は、ウィンドウハンドルであってモジュールIDではありません。 こちらの例が参考になりますでしょうか? http://homepage1.nifty.com/MADIA/vb/API/AppWinExit.htm

関連するQ&A