その方法とは似ているようで似ていない別方法になりますが、
EnumWindowsでウィンドウハンドルを列挙し、IEのウィンドウに対して
(TerminateProcessよりはずっと行儀良く)WM_CLOSEを投げるようにしたらうまくいきました。
調べてみるとIEのウィンドウのクラス名は"IEFrame"となっていましたので、
それを使ってIEのウィンドウかどうか調べています。
コード:
#strict
Const IEFRAME_CLASS = "IEFrame"
TypeDef BOOL = Long
TypeDef WNDENUMPROC = *Function(hwnd As HWND, lp As LPARAM) As BOOL
Declare Function EnumWindows Lib "User32" (pEnumFunc As WNDENUMPROC, lParam As LPARAM) As BOOL
Function EnumWindowsProc(hwnd As HWND, lp As LPARAM) As BOOL
Dim className[Len (8)] As Byte ' "IEFrame"がちょうど収まる大きさ
GetClassName(hwnd, className, Len (className))
If lstrcmp(className, IEFRAME_CLASS) = 0 Then
PostMessage(hwnd, WM_CLOSE, 0, 0)
End If
EnumWindowsProc = TRUE
End Function
EnumWindows(AddressOf(EnumWindowsProc), 0)