VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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"になってしまいます.

思い当たる所は試したつもりなのですが,上手くいかないので
アドバイスをお願いいたします.


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -