すみません。
かなり初歩的な質問になると思われるのですが…。
SendMessageを利用してアプリケーションを終了させることが
できるとのことですが、
Acrobat Reader 5.0を指定したい場合は、
どのように指定すればいいでしょうか?
どこをみればわかるのでしょうか?
FindWindow(Ex) API や EnumWindow API で
ウィンドウキャプションを順に取得して、
最初の数文字が "Acrobat Reader" だったときの
ウィンドウハンドルに SendMessage すれば良いのでは。
まずは、上の API を調べて下さい。
# あるいは、プロセスの名前が AcroRd32 のものを探しても良いですね。
アドバイスありがとうございます。
早速、下記の手順で試したのですが…。
----------------------------------------------
1.EnumWindowで全てのウィンドゥを列挙
2.GetWindowTextでハンドルや名前を取得
3.IsWindowVisibleで表示されているウィンドゥを取得
4.GetWindowTextで取得した名前の頭14バイトが"Acrobat Reader"
である場合は、メッセージボックスを出す
----------------------------------------------
というところでまずは試してみたのですが、
1.EnumWindowのところで「DLLが正しく呼び出せません」
ようエラーになってしまい、うまくいきません。
なにか、コードが足りないのでしょうか?
↓↓↓↓ コード ↓↓↓↓
【標準モジール】
Option Explicit
Public Declare Function EnumWindows Lib "USER32" (ByVal lpEnumFunc As Long, lPalam As Long) As Long
Public Declare Function GetWindowText Lib "USER32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function IsWindowVisible Lib "USER32" (ByVal hWnd&) As Long
Public Function Rekkyo(ByVal Handle As Long) As Boolean
Dim Ret, RET2 As Long
Dim Leng As Long
Dim Name As String
'バッファ確保
Name = String(255, Chr(0))
Leng = Len(Name)
'名前を取得する
Ret = GetWindowText(Handle, Name, Leng)
'表示されているWindowのみリストに追加
If Ret <> 0 Then
RET2 = IsWindowVisible(Handle)
If RET2 = 1 Then
If Left(Name, 14) = "Acrobat Reader" Then
MsgBox (Name)
End If
End If
End If
'次にいく
Rekkyo = True
End Function
【フォーム:コマンドボタンが貼り付けてあります】
Private Sub Command1_Click()
Dim Ret As Long
Ret = EnumWindows(AddressOf Rekkyo, 0)
End Sub
残念ながら、参考にしたコードの方に間違いがあるみたいです。
# Yahoo で EnumWindows を検索した結果の最初のヤツを参考にしたのでは?
# 運が悪かったですね。
もう一度、別のものを参考にして作成してみましょう。
参照したコードに誤り…?
このページのProgramming LibraryのAPI技術情報より参照したのですが…。
苦肉の策でエラーコードをとって処理をスルーしてしまいました。
ツイート | ![]() |