• ベストアンサー

Internet ExplorerをC言語プログラムから起動する

タイトルのとおりなのですが、 WinExecやCreateProcessを使用して起動は可能なのですが、 Internet Explorerの指定がフルパスでないと起動しません。 当プログラムは、様々なパソコン、様々なWondowsOS(XP,2000,NT,Me,98,95)で動作させたいので フルパス固定は出来ません。 Internet Explorerのインストールディレクトリの探し方や その他、何かよい方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • otu_otu
  • ベストアンサー率31% (17/54)
回答No.2

Win32APIを使っておられるなら、もっと簡単な方法がありますよ。 それは、ShellExecute関数を用いることです。 ShellExecute(hwnd,"open","http://----/",...); この方法で、インターネットエクスプローラが起動し、指定したURLが開きます。 なお、エラー処理などは、MSDNライブラリを参照してください。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpshell/html/_win32_shellexecute.asp
kazubon-X
質問者

お礼

ありがとうございました。 おかげで解決できました。

その他の回答 (1)

noname#11722
noname#11722
回答No.1

MFCでいいかな? やり方は、ダミーのhtmlファイルを作成して、 関連付けられているアプリケーションを探す。 で、CreateProcessで起動します。 以下コピペして使ってやってください。 引数にURL指定したら指定した場所が場所開くよ。 指定無しなら、ホームが開きます。 戻り値はプロセスIDです。 DWORD OpenIE( CString openURL ) { DWORD pID=0; char BrowserExec1[250]; FILE *fp; fp=fopen("open.html","w"); fclose(fp); CString BrowserExec; //ここに通常設定されているブラウザの名前が格納されます。 CString URL = "open.html"; //起動するHTMLのファイル名 HINSTANCE RetVal = FindExecutable(URL, NULL, BrowserExec1); BrowserExec = (CString) BrowserExec1; BrowserExec.TrimLeft(); //両端のスペースを削除します。 BrowserExec.TrimRight(); DeleteFile("open.html"); //いらなくなったので削除 long Ret = (long)RetVal; if ((Ret <= 32) || (BrowserExec.IsEmpty())){ //ブラウザが見つからなかった場合 AfxMessageBox("インターネットブラウザが見つかりません",MB_ICONEXCLAMATION); }else{ BrowserExec+= " "+openURL; strcpy(BrowserExec1,BrowserExec.GetBuffer(BrowserExec.GetLength())); BrowserExec.ReleaseBuffer(); STARTUPINFO start; PROCESS_INFORMATION info; ZeroMemory(&start,sizeof(start)); ZeroMemory(&info,sizeof(info)); start.cb = sizeof(start); CreateProcess(NULL,BrowserExec1,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&start,&info); pID = (unsigned long)info.dwProcessId; //プロセスID取得(後で使うから) WaitForInputIdle(info.hProcess,INFINITE); //入力状態まで待つ } return pID; } // 使い方 void COpenIeDlg::OnButton1() { OpenIE("www.microsoft.com/japan"); //指定無しでもOK }

kazubon-X
質問者

お礼

早速の丁寧な回答、ありがとうございました。 おかげで問題が解決しました。