私は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. 'system(...)'を使用してプログラムからコマンドプロンプトを起動する
- 2. VBAを使用してIEでイベントハンドラを起動する
- 3. UWP - DataTemplateのストーリーボードControlStoryboardActionが初めて初めて起動する
- 4. javafx述語が初めて初めて起動する
- 5. 初めてログインしたときにアプリを起動する
- 6. Capybara、Selenium、Rubyを使用してIEとChromeブラウザを起動します。
- 7. 私が初めてセレンを使用していChromeを起動し、セレン
- 8. Windowsプロセスを起動して再起動するためのサービス(GUIを使用)
- 9. CYGWINセッションでURLを使用してIEを起動する方法
- 10. 初めてアプリケーションを起動したときにダイアログボックスを初めて表示する方法は?
- 11. jQueryを初めて初めて使用するデタッチイベント
- 12. 初めてアプリケーションを起動したときにUIAlertViewを表示する
- 13. -wpfキャンバスイベント初めてのために起動する
- 14. テキストは私が初めてアプリを起動すると、正しく後libgdxアプリ
- 15. 初めてVBでVBboxを起動する
- 16. Xcodeで初めてiPhoneアプリツアーガイドを起動する方法
- 17. 初めてFullCalendarを使用する
- 18. 初めてsocket.ioを使用する
- 19. 初めて初めてtaggableとして動作する方法は?
- 20. powershellを使用してメールアプリケーションとカレンダーアプリケーションを起動する方法
- 21. HTTPを使用してタスクを起動するCloudsteamとCloudfoundary Tasklauncher
- 22. ハードウェアボタンを使用してAndroidアプリを起動するホームとロックボタン
- 23. SDL_SetVideoModeをパラメータとして使用してSDL_OPENGLを使用するとSDLがハングする
- 24. Android:別のアプリをインストールして初めて起動するときを検出する
- 25. 初めてアプリを起動したときにユーザー名とパスワードを取得して保存するには?
- 26. EC2クラウド初期起動スクリプトを使用して長時間実行するタスク
- 27. 初めてアプリ起動イントロエラー(ビューページ)
- 28. 起動時にWPFウィンドウがクラッシュする、または起動してもハングしてコンテンツがレンダリングされない
- 29. dockerイメージを使用して手動でハイパーボーダーピアを起動する
- 30. バッチを使用してプログラムを自動再起動する
[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プロセスの関数呼び出しを教えてください。 –