投稿日 | : 2004/06/30(Wed) 09:42 |
投稿者 | : 風来坊 |
Eメール | : |
URL | : |
タイトル | : ウィンドウのクラス名からプロセスハンドルの取得 |
現在,ウィンドウのクラス名からプロセスハンドルを取得して
それを元に更にいろいろやるプログラムを作りたいと考えたのですが….
一番始めでつまずいてしまったので,どこが悪いのか指摘してもらえると助かります.
作成中のソースを載せますが,ここでは例として電卓(SciCalc)でやりました.
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Sub Command1_Click()
Dim hWnd As Long
Dim lngPID As Long
Dim lngHandle As Long
hWnd = FindWindow("SciCalc", vbNullString)
Text1.Text = hWnd
If hWnd <> 0 Then
Call GetWindowThreadProcessId(hWnd, lngPID)
Text2.Text = Hex(lngPID) & " and " & lngPID
Else
Text2.Text = "見つかりません!"
End If
lngHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lngPID)
Text3.Text = Hex(lngHandle)
End Sub
このプログラムでFindWindowでウィンドウのハンドルを取得して,
ウィンドウハンドルからGetWindowThreadProcessIdでプロセスIDを取得してます.
ここまでは上手くいっているのですが,
プロセスIDからOpenProcessでプロセスハンドルを取得しようとした場合に,
lngHandleの値がいつも"0"になってしまいます.
思い当たる所は試したつもりなのですが,上手くいかないので
アドバイスをお願いいたします.