2016-04-08 8 views
-1

私はsystem()を使用してボタンをクリックするとC++コードでIEを起動しました。 IEが起動しますが、cmdウィンドウも開いてハングアップします。私は、cmdウィンドウを閉じて、それはスムーズに動作します。最初にIEを起動すると、最初にハングするのはなぜですか?system()を使用してIEを起動すると初めてハングする

+0

[CreateProcess関数](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(V = VS.85).aspxの)または[Iが呼ぶにはどうすればよいです:: Windows実行ファイルを起動するためのC++のCreateProcess?](http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable) –

+0

@JohnnyMopp私はその機能を持っていません。あなたは、 "C:\\ ProgramFiles \\ Internet Explorer \\ iexplorer.exe www.google.com"をURLとして使用してIEを起動するCreateプロセスの関数呼び出しを教えてください。 –

答えて

0

原因は、system()がコンソールを開いてそこからコマンドを呼び出すためです。コンソールは、Internet Explorerが終了したときにのみ閉じます。

どちらかCreateProcessを使用するか、回避策ができ、それsystem()と同様STARTコマンドを使用して:

system("start \"Internet Explorer\" \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" www.google.com"); 
+0

@axalisに上記のシステムコマンドを使用しました。スムーズに働いた。私はどのように私は指定されたURLでシステムコマンドを使用して既存のIEを閉じることができます –

+0

それは実際には簡単ではない、あなたはそれを閉じることができるプロセスハンドルを取得するCreateProcessメソッドを使用する必要があります。しかし、誰かが他のウィンドウを開いている(プロセスを終了すると、すべてのIEウィンドウが閉じられる)場合、これは依然としてうまくいきません。特定のウィンドウを閉じるには、EnumWindowsを使用してすべてのウィンドウをチェックして閉じたいウィンドウを確認し、そのウィンドウにWM_CLOSEメッセージを送信する必要があります(ただし、ユーザーがすべてのタブを閉じているタブを使用している場合ウィンドウ内 - 私は特定のタブを列挙する/閉じる方法がわかりません) – axalis

0

このコードはCreateProcessを使用してIEを起動します。

ただし、ユーザーデフォルトブラウザを使用するShellExecuteShellExecute(NULL, "open", "www.google.com", NULL, NULL, SW_SHOWDEFAULT);)を使用することができます。

const char *pathToExplorer = "C:\\Program Files\\Internet Explorer\\iexplore.exe"; 
const char *webPage = "www.google.com"; 

char szCmdLine[1024]; 
sprintf(szCmdLine, "\"%s\" \"%s\"", pathToExplorer, webPage); 

STARTUPINFO si = {0}; 
PROCESS_INFORMATION lp; 
si.cb = sizeof(STARTUPINFO); 
::CreateProcess(NULL, 
      szCmdLine, 
      NULL, 
      NULL, 
      FALSE, 
      CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, 
      NULL, 
      NULL, 
      &si, 
      &lp); 
関連する問題