exeソフトのボタンの遠隔操作するには?

解決


hiro  2004-06-04 00:25:49  No: 113703  IP: [192.*.*.*]

一応クラス名  ハンドル等は、表示させるソフトを作成したのでわかるのですが、
exeソフトのボタンを、操作する仕方がわからないのですがどなたか教えてください。よろしくお願いします。

編集 削除
ぴろあき  2004-06-04 10:15:13  No: 113704  IP: [192.*.*.*]

さて、前回の質問は下記のような感じで解決したのですよね?
<他Exeのテキストボックスを操作する>
1.FindWindowで親ウィンドウのハンドルを取得
2.FindWindowExで子ウィンドウ(テキストボックス)のハンドルを取得
3.2のハンドルにSend(Post)MessageでWM_SETTEXTを送信

今回は、
<他Exeのコマンドボタンを操作する>
1.FindWindowで親ウィンドウのハンドルを取得
2.FindWindowExで子ウィンドウ(コマンドボタン)のハンドルを取得
3.2のハンドルにSend(Post)MessageでBM_CLICKを送信
でできますよ。

ちなみに、前回の質問時に自分で調べる方法もそれとなく教えたハズです。
findwindowex vb ボタン
で調べればいくらでもサンプルが見つかります。

編集 削除
hiro  2004-06-11 23:50:41  No: 113705  IP: [192.*.*.*]

度々すみません。またまた質問です。あるサンプルで、

'  キャプション取得

Public Function GetWindowText(hwd As Long, buf As String, bln As Long) As Long

  If GetOS() = VER_PLATFORM_WIN32_NT Then
    GetWindowText = GetWindowTextW(hwd, buf, bln)
  Else
    GetWindowText = GetWindowTextA(hwd, buf, bln)
  End If

End Function
この  GetOS()の意味がわからないのですが。どなたか教えてください。
よろしくお願いします。

編集 削除
 2004-06-12 09:39:55  No: 113706  IP: [192.*.*.*]

ベタな答えをすれば、GetOS()は関数かメソッドだな。
見ためで読んだまんまの機能じゃないか?

編集 削除
特攻隊長まるるう  2004-06-14 10:04:43  No: 113707  IP: [192.*.*.*]

そのサンプルページの『VB テクニック編1』に載ってますが?(^^;)

ユーザ定義の関数をここで質問されても困ります。
その関数名で Web 検索して、1件も引っかからなければ、間違いなく
ユーザ定義の関数で、答えはそのサイトにしか書いてありません。
自分で調べてください。

編集 削除
hiro  2004-06-16 02:40:02  No: 113708  IP: [192.*.*.*]

いろいろすみませんでした。
自分で(ちょっと時間かかりましたが....)なんとか、プログラムを組むことができました。
  が、またまた、問題が発生してしまいました。
    
    Dim Atext As String
    Dim ChildWindowHandle  As Long
    Dim Code As Long
    Atext="12345"
    'テキスト
    Code =SendMessage(ChildWindowHandle,WM_SETTEXT,0,ByVal Atext)
この、Atext="12345" の後に、エンターを押したいのですがどのようにすればわかりません。ただし、テキストボックスは1つだけなので、12345出力→エンター→6789のように続けて出力したいのですが......あと、スペースだと
Atext=”12345” & Chr(4)  ←こんな感じだと思うのですが、エンターの場合どのようにすればよいのでしょうか?
 それと、また同じ質問なのですが(何回もすみません)コマンドボタンを押す
指令がわからないのですが....
' クラス名でウィンドウハンドルを取得
    WindowClassName = "....."
    WindowHandle = _
        FindWindow(WindowClassName,vbNullString)
' ウィンドウハンドルを取得できたときは
    If WindowHandle <> 0 Then
' クラス名で子ウィンドウハンドルを取得
    WindowClassName = "----"
    ChildWindowHandle = _
            FindWindowEx(WindowHandle,0,WindowClassName,vbNullString)
ここまでは、何とかできました。この続きがわかりません。
いろいろ聞いてしまいすみません。かなりの初心者なので、もしよければ
何か、アドバイス等お願いします。

編集 削除
ぴろあき  2004-06-16 17:03:14  No: 113709  IP: [192.*.*.*]

>エンターを押したい
改行したいという事ですよね。
エンターを押す(キーボードをエミュレートする)プログラムと、
改行する(改行コードを送る)プログラムは違います。

以下、後者を想定してアドバイスします。

<以下(MSDNテキストボックスの使用方法)より抜粋/>
キャリッジ リターン (文字コード13) とラインフィード (文字コード 10 ) を挿入して改行できます。また、vbCrLf 定数を使ってキャリッジ リターンとラインフィードの組み合わせを挿入することもできます。
</以上抜粋>

という事です。
具体的には、Atext=”12345” & vbCrLfとなります。
ちなみに、スペースは文字コード32ですよ。
ヘルプで「ASCII コード」を引いてください。

ところで、申し訳ない。
>findwindowex vb ボタン
上のキーワードでは、あまりいいサンプルが引っかかりませんね。。。
vb BM_CLICK
でどうぞ。

下のようなのがヒットします。
(ここの過去ログですね)
http://madia.world.coocan.jp/vb/vb_bbs2/200309_03090087.html

編集 削除
hiro  2004-06-16 22:51:53  No: 113710  IP: [192.*.*.*]

ありがとうございました。解決しました。
また、HPにての調べ方まで教えていただきありがとうございました。

それと、APIビューアを使ったことがなくて、いつも何かを参照しながら
コピー貼り付けなどで作業を行っていたのですが、これを使えば、
そのような作業をせず、定数、関数、型が参照できることにもきずきました。
いろいろ本当にありがとうございました。
また何かわからない時があったときは、よろしくお願いします。

編集 削除