題記の件につきまして、現在困っています.
コマンドプロントアプリケーションを右上のXで終了した際、作成したVBアプリケーションで検知する方法を探しています.
ご教授願えれば幸いです。よろしくお願いします。
環境:VB6.0(SP5) Windouws2000
例えば・・・。
http://hanatyan.sakura.ne.jp/vbhlp/tap_PrgEnd.htm
とか?
いな様 ありがとうございます。
お教え頂いたサイトを元に実行したところ、目的の事ができました.
しかし手動もしくは他のアプリケーション(C++等)でコマンドプロントを立ち上げてXボタンにて終了したときは、VBのアプリケーションで検知できませんでした.
同様に検知したいときはどのようにしたらいいでしょうか?
大変申し訳ありませんが、ご教授のほどよろしくお願いします.
DOS窓を他のアプリケーションから立ち上げる→Xボタンで終了したときは、他のVBアプリケーションでは検知できないのでしょうか?
DOS窓をフックするような形で実行してもできませんでした(私のやり方がまずいかも・・・)
検知方法がまだわかりません。どなたかわかる方お教え願えれば幸いです.
昨日は午後からずっと打合せで、レスを見ることができませんでした。
EnumWindowsでウィンドウハンドルを列挙し、
列挙されたハンドルを使ってGetWindowThreadProcessIdで
スレッドIDとプロセスIDを取得してみるとか
いな様
お忙しい所、何度も教えて頂きありがとうございます.
いな様のアドバイスから、ウィンドウネイム,IDを取得して監視できるようになりました.(ソースがもしおかしければお教え願いします.とりあえず目的は達成できました.)
本当にありがとうございました。
’<グーバル宣言>
Option Explicit
'---------------------------------------------
' API宣言
'---------------------------------------------
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function GetWindowPlacement Lib "user32" (ByVal hWnd As Long, lpwndpl As WINDOWPLACEMENT) 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 GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
'---------------------------------------------
' GetWindowで使用する定数
'---------------------------------------------
Public Const GW_OWNER = 4
'---------------------------------------------
' GetWindowPlacementで使用する構造体
'---------------------------------------------
Public Type POINTAPI
x As Long
y As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type WINDOWPLACEMENT
Length As Long
flags As Long
showCmd As Long
ptMinPosition As POINTAPI
ptMaxPosition As POINTAPI
rcNormalPosition As RECT
End Type
'---------------------------------------------
' コールバック関数
'---------------------------------------------
Public Function EnumWndProc(ByVal hWnd As Long, lParam As Long) As Boolean
Dim strWindowName As String * 128
Dim strClassName As String * 128
Dim WPL As WINDOWPLACEMENT
Dim lngRet As Long
'---------------------------------------------
' 初期化
'---------------------------------------------
strWindowName = ""
strClassName = ""
'---------------------------------------------
' ウィンドウのタイトルを表示する
'---------------------------------------------
lngRet = GetWindowText(hWnd, strWindowName, Len(strWindowName))
Call GetClassName(hWnd, strClassName, Len(strClassName))
If IsWindowVisible(hWnd) Then
If GetWindow(hWnd, GW_OWNER) = 0 Then
If lngRet <> 0 Then
If Left(strClassName, 7) <> "Progman" Then
WPL.Length = Len(WPL)
Call GetWindowPlacement(hWnd, WPL)
'---------------------------------------------
' デバックで出力
'---------------------------------------------
Debug.Print "----------------------------------"
Debug.Print "hWnd = " & hWnd
Debug.Print "Window Name = " & strWindowName
Debug.Print "Class Name = " & strClassName
Debug.Print "Left = " & WPL.rcNormalPosition.Left
Debug.Print "Top = " & WPL.rcNormalPosition.Top
Debug.Print "Right = " & WPL.rcNormalPosition.Right
Debug.Print "Bottm = " & WPL.rcNormalPosition.Bottom
'---------------------------------------------
' デバックで出力
'---------------------------------------------
End If
End If
End If
End If
EnumWndProc = True
End Function
’<フォームローカル>
Option Explicit
Private Sub Command1_Click()
Call EnumWindows(AddressOf EnumWndProc, 0)
End Sub
解決チェックをつけ忘れていました。
納得の解決チェックを付けさせて頂きます.
ありがとうございました.