社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

IEの起動 その2 - Windows Vista/Internet Explorer 7

> IELaunchURL API を使えばいいのではいいのではないでしょうか。

OSによる切り分けも行うような関数を整備してみました。

---
 static HRESULT LaunchURL(LPCTSTR szURL)
 {
  HRESULT hr = S_OK;

  if (thisClass::IsWinVista())
  {
   PROCESS_INFORMATION processInfomation = { 0 };
   hr = thisClass::Probe_IELaunchURL(CT2W(szURL), &processInfomation, NULL);
   if (FAILED(hr))
   {
    return hr;
   }

   ::WaitForInputIdle(processInfomation.hProcess, 2000);
   ::CloseHandle(processInfomation.hProcess);
   ::CloseHandle(processInfomation.hThread);
  }
  else
  {
   HINSTANCE hInst = ::ShellExecute(NULL, _T("open"), szURL, NULL, NULL, SW_SHOWNORMAL);
#pragma warning(disable: 4311)
   if ((int)hInst < 32)
#pragma warning(default: 4311)
   {
    DWORD dwError = ::GetLastError();
    return HRESULT_FROM_WIN32(dwError);
   }
  }

  return S_OK;
 }
 static HRESULT Probe_IELaunchURL(LPCWSTR pszUrl, LPPROCESS_INFORMATION pProcInfo, LPVOID lpInfo)
 {
  CModule module;

  HINSTANCE hInst = module.LoadLibrary(_T("ieframe.dll"));
  if (hInst == NULL)
  {
   return E_NOTIMPL; 
  }

  typedef HRESULT (WINAPI *FUNC_IELAUNCHURL) (LPCWSTR, LPPROCESS_INFORMATION, LPVOID);
  CString strFuncName = _T("IELaunchURL");
  FUNC_IELAUNCHURL func = (FUNC_IELAUNCHURL)module.GetProcAddress(strFuncName);
  if (func == NULL)
  {
   return E_NOTIMPL; 
  }

  return (*func)(pszUrl, pProcInfo, lpInfo);
 }
 static bool IsWinVista()
 {
  bool bWinVista = false;
  OSVERSIONINFO version;
  memset(&version, 0, sizeof(version));
  version.dwOSVersionInfoSize = sizeof(version);
  ::GetVersionEx(&version);
  if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
  {
   // Windows Vista のバージョン       : 6.0
   if (version.dwMajorVersion >= 6)
   {
    bWinVista = true;
   }
  }
  else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
  {
   // 何もしない。。
  }

  return bWinVista;
 }
---


■IEの起動 - Windows Vista/Internet Explorer 7 - 社本@ワック Blog
http://www.ailight.jp/blog/sha256/archive/2007/01/30/13555.aspx

■DLLを扱うクラス (CModule) - for Programmers
http://www.wac-jp.com/programmers/win32/Module.html

投稿日時 : 2007年2月20日 15:42


コメントを追加

タイトル
名前
URL
コメント