他のアプリケーションソフトのボタンをクリックするには?

解決


りぐ  2006-01-05 02:43:57  No: 129361

Windows2000 & VB6.0で作業しています。

早速質問させて頂きます。
現在、C#で作成されたアプリケーションのボタンをクリックするツールを
作成しようとしています。
それで、まず練習として、VB以外の言語で作られたソフトということで、
電卓のボタンをクリックするツールを作成しようとしたのですが、ボタンの
ハンドルを取得する箇所で躓いてしまいました。

作成するツールの全体の構成としては以下のように考えています。
まずウィンドウのハンドルを取得し、ウィンドウのハンドルを元にボタンの
ハンドルを取得して、そのボタンのハンドルを元にPostMessageで
他アプリケーションにたいして、"WM_LBUTTONDOWN" & "WM_LBUTTONUP"を送る。

ただ現在の状況としては、ウィンドウのハンドルは取得できているのですが、ボタンのハンドルが取得できない状態です。

どこがいけないのでしょうか?
ご指導の程、よろしくお願いいたします。

'以下ソース
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String _
    ) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
    ByVal hWnd1 As Long, _
    ByVal hWnd2 As Long, _
    ByVal lpsz1 As String, _
    ByVal lpsz2 As String _
    ) As Long
Private Declare Function SetForegroundWindow Lib "user32.dll" ( _
    ByVal hwnd As Long _
    ) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long _
    ) As Long

Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const MK_LBUTTON = &H1

Private Sub Form_Load()

    Dim lngWindWnd  As Long
    Dim ret         As Long
    Dim hCalc       As Long
    
    'ウィンドウハンドルを得ます
    lngWindWnd = FindWindow(vbNullString, "電卓")
    
    '電卓「1」ボタンのハンドル
    hCalc = FindWindowEx(lngWindWnd, 0, "Button", "1")
    '↑ここで"hCalc"に"0"が入ってしまいます    

    ret = SetForegroundWindow(lngWindWnd)
    
    ret = PostMessage(hCalc, WM_LBUTTONDOWN, MK_LBUTTON, ByVal 0)
    ret = PostMessage(hCalc, WM_LBUTTONUP, MK_LBUTTON, ByVal 0)

End Sub


030  2006-01-05 08:41:23  No: 129362

結論から言うと、プログラムは正常に動いています。
キャプションが"1"のボタンが見つからなかったのでhCalcが0になっているだけです。
Spy++で確認してみてくださいWin2000の電卓のボタンのキャプションは全て””です。
XPに付属している電卓のボタンキャプションはちゃんと入っているみたいなのでXPのCalc.exeをWin2000にコピーして動かせば上記ソースはちゃんと動くみたいです。


りぐ  2006-01-06 17:09:56  No: 129363

Win2000の電卓のボタンのキャプションが全て””になっているとは...
で、結論を申し上げますと、Spy++を使用することにより他のアプリケーションの
ボタンハンドルを確認できたため、当初に意図していたことを実現できました。
030様、どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加