私はsystem()を使用してボタンをクリックするとC++コードでIEを起動しました。 IEが起動しますが、cmdウィンドウも開いてハングアップします。私は、cmdウィンドウを閉じて、それはスムーズに動作します。最初にIEを起動すると、最初にハングするのはなぜですか?system()を使用してIEを起動すると初めてハングする
答えて
原因は、system()
がコンソールを開いてそこからコマンドを呼び出すためです。コンソールは、Internet Explorerが終了したときにのみ閉じます。
どちらかCreateProcessを使用するか、回避策ができ、それsystem()
と同様STARTコマンドを使用して:
system("start \"Internet Explorer\" \"C:\\Program Files\\Internet Explorer\\iexplore.exe\" www.google.com");
@axalisに上記のシステムコマンドを使用しました。スムーズに働いた。私はどのように私は指定されたURLでシステムコマンドを使用して既存のIEを閉じることができます –
それは実際には簡単ではない、あなたはそれを閉じることができるプロセスハンドルを取得するCreateProcessメソッドを使用する必要があります。しかし、誰かが他のウィンドウを開いている(プロセスを終了すると、すべてのIEウィンドウが閉じられる)場合、これは依然としてうまくいきません。特定のウィンドウを閉じるには、EnumWindowsを使用してすべてのウィンドウをチェックして閉じたいウィンドウを確認し、そのウィンドウにWM_CLOSEメッセージを送信する必要があります(ただし、ユーザーがすべてのタブを閉じているタブを使用している場合ウィンドウ内 - 私は特定のタブを列挙する/閉じる方法がわかりません) – axalis
このコードはCreateProcess
を使用してIEを起動します。
ただし、ユーザーデフォルトブラウザを使用するShellExecute(ShellExecute(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);
- 1. Windowsプロセスを起動して再起動するためのサービス(GUIを使用)
- 2. 初めてアプリケーションを起動したときにダイアログボックスを初めて表示する方法は?
- 3. CYGWINセッションでURLを使用してIEを起動する方法
- 4. 初めてアプリケーションを起動したときにUIAlertViewを表示する
- 5. Xcodeで初めてiPhoneアプリツアーガイドを起動する方法
- 6. 初めて初めてtaggableとして動作する方法は?
- 7. ハードウェアボタンを使用してAndroidアプリを起動するホームとロックボタン
- 8. 初めてアプリを起動したときにユーザー名とパスワードを取得して保存するには?
- 9. SDL_SetVideoModeをパラメータとして使用してSDL_OPENGLを使用するとSDLがハングする
- 10. 初めてアプリ起動イントロエラー(ビューページ)
- 11. dockerイメージを使用して手動でハイパーボーダーピアを起動する
- 12. バッチを使用してプログラムを自動再起動する
- 13. 起動時にWPFウィンドウがクラッシュする、または起動してもハングしてコンテンツがレンダリングされない
- 14. コードがLaunchDaemonとして実行されているときに、再起動せずに初めてLaunchAgentを起動する方法はありますか?
- 15. 初めてアプリを起動する方法を確認するには?
- 16. Rx Repeat()とReplay()を使用してDNSクエリをキャッシュして再起動する
- 17. バッチファイルを使用して管理者としてコマンドプロンプトを起動する方法
- 18. perlを使用してwww-データとしてApacheを再起動する
- 19. scipyが初めて低速起動する
- 20. DebugActiveProcessとWaitForDebugEventを使用するとハングしているようです
- 21. C#のプログラムを起動スイッチを使用して起動するプロセス
- 22. requireJSを使用してjquery.jstree.jsをロードするとIEで動作しません
- 23. 初めてアプリを起動したときにキーボードが表示されている間にクラッシュする
- 24. Javaジェネリックメソッド - 初めて使用する
- 25. 埋め込みJettyサーバをバックグラウンドプロセスとして起動する
- 26. system-uuidを使用してDBにデータを挿入する
- 27. Asp.Net MVCを使用して、JavaScriptを初めて使用するオブジェクトとして、モデル
- 28. BTraceエージェントを使用してアプリケーションを起動するとNullPointerExceptionが発生する
- 29. DLLをexeとして起動する
- 30. PDF生成はPDFKitとwkhtmotopdfを使用してハングします
[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) –
@JohnnyMopp私はその機能を持っていません。あなたは、 "C:\\ ProgramFiles \\ Internet Explorer \\ iexplorer.exe www.google.com"をURLとして使用してIEを起動するCreateプロセスの関数呼び出しを教えてください。 –