by 田中 宏 » 2009年1月04日(日) 13:06
AB4.24で外部機器との通信プログラムでヘルプとしてpdfファイルを表示した時に作成したものです。
Dim pi As PROCESS_INFORMATION 'CreateProcess実行時に取得する構造体
Dim hApplWnd As HWND
Function EnumWindowsProc(hWnd As HWND, lParam As LPARAM) As LRESULT 'CreateProcessで起動したアプリのHWNDを取得する関数
Dim lpdwProcessId As DWord
GetWindowThreadProcessId(hWnd, VarPtr(lpdwProcessId)) 'EnumWindowsで得たhWndのProcessIdを取得し
If pi.dwProcessId = lpdwProcessId Then 'CreateProcessで取得したProcessIdと同じ
hApplWnd = GetWindow(hWnd, GW_OWNER) 'hWndの親hWndを取得する
If hApplWnd = 0 Then hApplWnd = hWnd
End If
EnumWindowsProc = TRUE '全てのhWndをチェック
End Function
'終了イベント
Sub MainWnd_IDM_EXIT_MenuClick()
If pi.hProcess > 0 Then
TypeDef WNDENUMPROC = *Function(hWnd As HWND, lp As LPARAM) As BOOL
Declare Function EnumWindows Lib "user32" (lpEnumFunc As WNDENUMPROC, lParam As LPARAM) As BOOL
Dim lParam As LPARAM
EnumWindows(AddressOf(EnumWindowsProc), lParam)
SendMessage(hApplWnd, WM_CLOSE, 0, 0)
CloseHandle(pi.hProcess)
CloseHandle(pi.hThread)
End If
SendMessage(hMainWnd,WM_CLOSE,0,0)
End Sub
2月21日追記 エラー報告
このコードではWindowが最小化されていると正常に機能しません。
タスクマネージャで終了しなければならない事になります。
手動(マウス)で元に戻すと正常に機能するのですが OpenIcon で元に戻したのでは
改善されません。
2月24日不具合を修正しコードを変更しました。
AB4.24で外部機器との通信プログラムでヘルプとしてpdfファイルを表示した時に作成したものです。
Dim pi As PROCESS_INFORMATION 'CreateProcess実行時に取得する構造体
Dim hApplWnd As HWND
Function EnumWindowsProc(hWnd As HWND, lParam As LPARAM) As LRESULT 'CreateProcessで起動したアプリのHWNDを取得する関数
Dim lpdwProcessId As DWord
GetWindowThreadProcessId(hWnd, VarPtr(lpdwProcessId)) 'EnumWindowsで得たhWndのProcessIdを取得し
If pi.dwProcessId = lpdwProcessId Then 'CreateProcessで取得したProcessIdと同じ
hApplWnd = GetWindow(hWnd, GW_OWNER) 'hWndの親hWndを取得する
If hApplWnd = 0 Then hApplWnd = hWnd
End If
EnumWindowsProc = TRUE '全てのhWndをチェック
End Function
'終了イベント
Sub MainWnd_IDM_EXIT_MenuClick()
If pi.hProcess > 0 Then
TypeDef WNDENUMPROC = *Function(hWnd As HWND, lp As LPARAM) As BOOL
Declare Function EnumWindows Lib "user32" (lpEnumFunc As WNDENUMPROC, lParam As LPARAM) As BOOL
Dim lParam As LPARAM
EnumWindows(AddressOf(EnumWindowsProc), lParam)
SendMessage(hApplWnd, WM_CLOSE, 0, 0)
CloseHandle(pi.hProcess)
CloseHandle(pi.hThread)
End If
SendMessage(hMainWnd,WM_CLOSE,0,0)
End Sub
2月21日追記 エラー報告
このコードではWindowが最小化されていると正常に機能しません。
タスクマネージャで終了しなければならない事になります。
手動(マウス)で元に戻すと正常に機能するのですが OpenIcon で元に戻したのでは
改善されません。
2月24日不具合を修正しコードを変更しました。