/* ---------------------------------------------------------------- WSLib7_IeComponent.sbp IEコンポーネント(ショートカットを内部で自前処理)を 簡単にクラスIE_COMPONENT。 作成:淡幻星 ベース:http://www.activebasic.com/forum/viewtopic.php?p=8861 ※上記のWebページを参照にしたラッパークラスです。 ---------------------------------------------------------------- */ #ifndef _IE_COMPONENT_ #define _IE_COMPONENT_ TypeDef HRESULT=Long TypeDef BSTR=WordPtr Interface IDispatch Inherits IUnknown Function GetTypeInfoCount(pctinfo As DWordPtr) As HRESULT Function GetTypeInfo(iTInfo As DWord,lcid As DWord,ITypeInfo As VoidPtr) As HRESULT Function GetIDsOfNames(riid As DWord,rgszNames As BytePtr,cNames As DWord,lcid As DWord,rgDispID As DWordPtr) As HRESULT Function Invoke(dispIdMember As DWord,riid As DWord,lcid As DWord,wFlags As Word,pDispParams As DWordPtr,pVarResult As VoidPtr,pExcepInfo As DWordPtr,puArgErr As DWordPtr) As HRESULT End Interface Interface IWebBrowser Inherits IDispatch Function GoBack() As HRESULT Function GoForward() As HRESULT Function GoHome() As HRESULT Function GoSearch() As HRESULT Function Navigate(URL As BSTR,Flags As VoidPtr,TargetFrameName As VoidPtr,PostData As VoidPtr,Headers As VoidPtr) As HRESULT Function Refresh() As HRESULT Function Refresh2(Level As VoidPtr) As HRESULT Function Stop() As HRESULT Function get_Application(ppDisp As VoidPtr) As HRESULT Function get_Parent(ppDisp As VoidPtr) As HRESULT Function get_Container(ppDisp As VoidPtr) As HRESULT Function get_Document(ppDisp As VoidPtr) As HRESULT Function get_TopLevelContainer(pBool As VoidPtr) As HRESULT Function get_Type(Type_ As *BSTR) As HRESULT Function get_Left(pl As *Long) As HRESULT Function put_Left(Left As Long) As HRESULT Function get_Top(pl As *Long) As HRESULT Function get_Top(Top As Long) As HRESULT Function get_Width(pl As *Long) As HRESULT Function get_Width(Width As Long) As HRESULT Function get_Height(pl As *Long) As HRESULT Function get_Height(Height As Long) As HRESULT Function get_LocationName(LocationName As *BSTR) As HRESULT Function get_LocationURL(LocationURL As *BSTR) As HRESULT Function get_Busy() As HRESULT End Interface Interface IWebBrowserApp Inherits IWebBrowser Function Quit() As HRESULT Function ClientToWindow() As HRESULT Function PutProperty() As HRESULT Function GetProperty() As HRESULT Function get_Name() As HRESULT Function get_HWND() As HRESULT Function get_FullName() As HRESULT Function get_Path() As HRESULT Function get_Visible() As HRESULT Function put_Visible(bBool As Long) As HRESULT Function get_StatusBar() As HRESULT Function put_StatusBar() As HRESULT Function get_StatusText() As HRESULT Function put_StatusText() As HRESULT Function get_ToolBar() As HRESULT Function put_ToolBar() As HRESULT Function get_MenuBar() As HRESULT Function put_MenuBar() As HRESULT Function get_FullScreen() As HRESULT Function put_FullScreen() As HRESULT End Interface Interface IWebBrowser2 Inherits IWebBrowserApp Function Navigate2(URL As VoidPtr,Flags As VoidPtr,TargetFrameName As VoidPtr,PostData As VoidPtr,Headers As VoidPtr) As HRESULT Function QueryStatusWB() As HRESULT Function ExecWB() As HRESULT Function ShowBrowserBar() As HRESULT Function ReadyState() As HRESULT Function get_Offline() As HRESULT Function put_Offline() As HRESULT Function get_Silent() As HRESULT Function put_Silent() As HRESULT Function get_RegisterAsBrowser() As HRESULT Function put_RegisterAsBrowser() As HRESULT Function get_RegisterAsDropTarget() As HRESULT Function put_RegisterAsDropTarget() As HRESULT Function get_TheaterMode() As HRESULT Function put_TheaterMode() As HRESULT Function get_AddressBar() As HRESULT Function put_AddressBar() As HRESULT Function get_Resizable() As HRESULT Function put_Resizable() As HRESULT End Interface Interface IOleWindow Inherits IUnknown Function GetWindow(phwnd As *HWND) As HRESULT Function ContextSensitiveHelp(fEnterMode As Long) As HRESULT End Interface Interface IOleInPlaceActiveObject Inherits IOleWindow Function TranslateAccelerator(lpmsg As *MSG) As HRESULT Function OnFrameWindowActivate(fActivate As Long) As HRESULT Function OnDocWindowActivate(fActivate As Long) As HRESULT Function ResizeBorder(prcBorder As *RECT,pUIWindow As VoidPtr,fFrameWindow As Long) As HRESULT Function EnableModeless(fEnable As Long) As HRESULT End Interface Declare Function AtlAxWinInit Lib "atl.dll" () As HRESULT Declare Function AtlAxGetControl Lib "atl.dll" (hWnd As HWND,pp As VoidPtr) As HRESULT Class IE_COMPONENT IsAtlAxWinInit As Char IsOleInPlaceActiveObjectRelease As Char hIE As HWND hIeServer As HWND pUnknown As *IUnknown pWebBrowser2 As *IWebBrowser2 pOleInPlaceActiveObject As *IOleInPlaceActiveObject Public Sub IE_COMPONENT() IsAtlAxWinInit = FALSE IsOleInPlaceActiveObjectRelease = TRUE hIE = NULL hIeServer = NULL pOleInPlaceActiveObject = NULL End Sub Sub ~IE_COMPONENT() DestroyIeBrowserWindow() End Sub Function CreateIeBrowserWindow( dwExStyle As DWord, pszInitUrl As BytePtr, dwStyle As DWord, x As Long, y As Long, nWidth As Long, nHeight As Long, hWndParent As HWND, hMenu As HMENU, hInstance As HINSTANCE, lpParam As VoidPtr ) As HWND Dim IID_IWebBrowser2 = [&HD30C1661,&HCDAF,&H11D0,[&H8A,&H3E,&H00,&HC0,&H4F,&HC9,&HE2,&H6E]] As GUID Dim IID_IOleInPlaceActiveObject=[&H00000117,&H0000,&H0000,[&HC0,&H00,&H00,&H00,&H00,&H00,&H00,&H46]] As GUID If FALSE = IsAtlAxWinInit Then AtlAxWinInit() End If hIE = CreateWindowEx( dwExStyle, "AtlAxWin", pszInitUrl, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam ) AtlAxGetControl( hIE, VarPtr(pUnknown) ) pUnknown->QueryInterface( VarPtr(IID_IWebBrowser2), VarPtr(pWebBrowser2) ) pWebBrowser2->QueryInterface( VarPtr(IID_IOleInPlaceActiveObject), VarPtr(pOleInPlaceActiveObject) ) pWebBrowser2->Release() pUnknown->Release() IsOleInPlaceActiveObjectRelease = FALSE CreateIeBrowserWindow = hIE End Function Function DestroyIeBrowserWindow() If FALSE = IsOleInPlaceActiveObjectRelease Then pOleInPlaceActiveObject->Release() IsOleInPlaceActiveObjectRelease = TRUE End If DestroyIeBrowserWindow = DestroyWindow( hIE ) hIE = NULL hIeServer = NULL End Function Function TranslateIeBrowser( ByRef msgMain As MSG ) As Char 'デフォルト TranslateIeBrowser = FALSE 'IEコンポネントにフォーカスが当たっている場合。 '※内部のIE Server窓で判別する必要があることに注意。 If GetFocus() = GetBrowserHandle() And NULL <> pOleInPlaceActiveObject Then If S_OK = pOleInPlaceActiveObject->TranslateAccelerator( VarPtr(msgMain) ) Then TranslateIeBrowser = TRUE End If End If End Function Function GetTopWindowHandle() As HWND GetTopWindowHandle = hIE End Function Function GetBrowserHandle() As HWND 'IEコンポネントの中の、IE Server窓を取得する。 If NULL = hIeServer Then '未取得のときのみ、取得行う。 '※hIEのCreateタイミングでは、まだServer窓が存在しない可能性がある(時間差作成)。 If NULL <> hIE Then hIeServer = GetIeServerWindowHandle( hIE ) End If End If GetBrowserHandle = hIeServer End Function Function SetFocusBrowser() As HWND If NULL <> hIE Then SetFocusBrowser = SetFocus( GetBrowserHandle() ) Else SetFocusBrowser = NULL End If End Function Private Function GetIeServerWindowHandle( hParent As HWND ) As HWND Dim hChildWnd As HWND Dim szClassName[256] As Byte hChildWnd = GetWindow( hParent,GW_CHILD ) If hChildWnd Then GetClassName( hChildWnd, szClassName, 255 ) If 0 = lstrcmp( szClassName,"Internet Explorer_Server" ) Then GetIeServerWindowHandle = hChildWnd Exit Function Else GetIeServerWindowHandle = GetIeServerWindowHandle( hChildWnd ) Exit Function End If End If GetIeServerWindowHandle = NULL End Function End Class #endif