• 締切済み

IEを新しい窓で CraeteProcess( )

CraeteProcess( ) を使ってサイトを新しいウインドウで 開くためのSDK、BCC32用のソースを教えてください。 ShellExecute(NULL,"open","http://~",NULL,NULL,SW_SHOWNORMAL); ではIEの設定に左右されるらしいから CraeteProcess( ) で やろうと思いました。 もう1つ質問なんだけど、C に限らず、   真理値は偽なら 0 、真なら 0 以外。 ということ説明をたまに見かけます。 実際やった結果では、どれも 真理値は偽なら 0 、真なら 1。 でした。 真の場合に 1 意外の値を返す場合があるから 1 ではなく、 0 以外 というふうに書いてあるんだと思うんだけど 真で 1 意外の値が帰って来た経験がある方はいらっしゃいますか?

  • A__
  • お礼率59% (194/328)

みんなの回答

noname#30727
noname#30727
回答No.2

Windows XP + VC++6.0 で試したのですが、とりあえず問題なかったけど、何かミスがあるのかな・・・。 私のところでもログオンしてから30~60秒くらいは、シェル関係の呼び出しが、ちゃんと出来ません。デバイスを全て認識するのに時間がかかっていて、待たされるようです。

A__
質問者

お礼

ありがとうございます。 そういえば、Windows っていうOSは、起動して というか、起動し始めて、しばらく待たないと 一見、落ち着いたように見えても、正常に動作しない 部分があるらしいですねー。 BCC32 でコンパイルして、Win98 でまだ成功していません。

noname#30727
noname#30727
回答No.1

自分でも使えそうなので作ってみました。適当にリファインしてみてください。 static TCHAR iesk[] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE"); static TCHAR url[] = _T("http://oshiete.goo.ne.jp/"); static TCHAR curdir[] = _T("C:\\"); TCHAR cmdline[1024]; HKEY key; DWORD type = REG_SZ; DWORD size = 1024; STARTUPINFO si; PROCESS_INFORMATION pi; RegOpenKeyEx(HKEY_LOCAL_MACHINE, iesk, 0, KEY_QUERY_VALUE, &key); RegQueryValueEx(key, NULL, NULL, &type, (LPBYTE)cmdline, &size); lstrcat(cmdline, _T(" ")); lstrcat(cmdline, url); ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.wShowWindow = SW_SHOW; CreateProcess(NULL, cmdline, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, curdir, &si, &pi);

A__
質問者

補足

ありがとうございます。 もう少しでできそうなとこまでいきました。 新しいウインドウで開くことができたけど、 Win98から、IEのページ違反だったかな? 何かのエラーダイアログが表示されて、 IEが使えなくなってしまうんです。 IEを使うためにはWin98を再起動する必要がある状態です。 再起動してもう1度、EXEを実行しても、 CreateProcess は実行されません。 起動後にしばらくパソコンを使うと、いつのまにか CreateProcess が使える状態になっています。 今は、IEのエラーダイアログの原因より、 この、起動後すぐには CreateProcess が使えない という原因究明を考えています。 だいたい、起動後10分ぐらい、適当にパソコンを使っていると CreateProcess が実行できるようになります。 実行できない時の場合はエラー表示はありません。 今は CreateProcess でメモ帳を指定してやっています。 メモ帳なら、ページ違反とかいう問題もなく CreateProcess で実行できているけど、Win98起動後すぐに は CreateProcess でメモ帳も起動することができません。

関連するQ&A

  • VC++からブラウザを起動して・・・

    VC++&MFCで画面を作成しています。 作成した画面のあるボタンをクリックすると、規定のブラウザが起動され、 指定したURLを表示にいくという処理を行いたいので、 ShellExecute( NULL, "open", "http://xxx.xxx.co.jp/", NULL, NULL, SW_SHOWNORMAL ); という様な感じでブラウザを起動しているのですが、このブラウザの起動時に、 アドレスバー・ツールバー等を非表示にしたいのです。 ShellExecute()じゃなくても良いので、VC++(SDK、MFC何でも可)で 実現する方法はあるのでしょうか?。 よろしくお願いします。

  • 98でBorlandC++5.51でメール送信させるため

    ShellExecute(NULL, "open", "mailto:****@abcdefg.com?subject=件名&body=本文。", NULL, NULL, SW_SHOWNORMAL); としたのですがこれだとメールウィンドウが最大化されずまた前面表示されない場合があります どうしたら最大化と確実な前面表示を実現できるでしょうか?

  • ShellExecuteで外部アプリを起動したい

    こんにちは。 ShellExecuteを使って外部アプリを起動するために、 ShellExecute(NULL,NULL,"Program Files/XWaveClient/XWavePDA.exe",NULL,NULL,SW_SHOWNORMAL); というコードをかいているのですが、この行で  error C2065: 'ShellExecute' : undeclared identifier というコンパイルエラーがでてしまい、困っています。 ShellExecuteを使うためにはなにかヘッダファイルを includeしなくてはならないのでしょうか? 環境は、eVC++4.0です。 よろしくお願い致します。

  • ShellExecuteのコマンドについて

    すみません、どなたか教えてください。 下記のコマンドですが、 ShellExecute(null,"open","cmd.exe","実行したいもの",NULL,SW_HIDE); "実行したいもの" の書き方なんですが、 "/c c:\\work\\test.bat" のように書くと、cmd.exeにtest.batを実行させることができたんですが、 実行したいtest.batが指定できず、変数でセットする場合の書き方が分かりません。 ShellExecute(null,"open","cmd.exe","/c c:\\work\\test.bat",NULL,SW_HIDE); ↓ ShellExecute(null,"open","cmd.exe","/c c:\\work\\ "" & 変数 & "",NULL,SW_HIDE); こんな感じだと思うのですが、変数をダブルクォーテーションで囲むときに、ダブルクォーテーションをいくつ重ねるのかが分かりません。ググっているのですが、どこを調べていいのか分からず、はまっています。どなかたアドバイスお願いします。C++です。

  • Delphiの型変換について教えてください

    DelphiからRubyプログラムを起動するには ShellExecuteを使えばいけそうなことがわかったのですが、コンパイルでエラーが出ます。 ShellExecute(Handle,'open'、'xxx.rb',OpenDialog1.FileName,syori,SW_SHOWNORMAL)としたのですが TFileNameとPAnsiCharには互換性がありませんとエラーが出ます。 どんな関数を使って変換すればいいのでしょうか?

  • ShellExecuteでDOSコマンド実行したら...

    VC++6.0においてShellExecuteでDOS窓をたち上げてコマンドを 実行したいのですが、うまくいきません。 1.ShellExecute(m_hWnd,"open","command.com","dir",NULL,SW_SHOW); ...とすると”指定された COMMAND 検索ディレクトリが違います.”となり、 なにも実行されません。 2.ShellExecute(m_hWnd,"open","command.com","dir /?",NULL,SW_SHOW); ...とするとちゃんとdirのヘルプが表示されますが、すぐに窓が閉じます。 3.ShellExecute(m_hWnd,"open","command.com","dir /? > out.txt",NULL,SW_SHOW); ...としてもファイルが作られず、2.と全く同じ結果になってしまいます。 これはどうしてこのような現象が起きるのでしょうか? DOSプロンプトをたち上げて同様なコマンドを実行した場合はちゃんと期待通りの結果が得られます。 あと、DOS窓が閉じないようにするにはどうすればいいのでしょうか?

  • 任意のIEにリンクを指定したいです

    2つのIEが起動しており、そのうち指定するIEの方にリンク先を上書きする方法をご教授頂ければと思います。 環境はVisual C++ 2005 Express Editionのwin32コンソールで作成しています。 IEを起動する方法として、FindWindow関数で上書きしたいIEのウィンドウ名のハンドルを取得し、ShellExecute関数でそのハンドルにリンク先を指定する方法を取っています。 下記は作成したプログラムです。 確かに指定したウィンドウ名を参照し、hWndにNULL以外の値が入っておるのですが、URLを上書きするウィンドウが指定したウィンドウではなく、最後に起動したIEのウィンドウに表示されてしまいます・・・。 説明べたなので例を示します・・・。以下のような動作になります。 (1)作成したプログラムからIEを起動する。ウィンドウ名:test - Windows Internet Explorer (2)デスクトップから新規にIEを起動する。ウィンドウ名:yahoo - Windows Internet Explorer (3)もう一度作成したプログラムからIEを起動すると、(2)で起動したIEに上書きしてしまう。本当は(1)に上書きしたいのに・・・。 また、ShellExecuteの第一引数はそのハンドルを持つウィンドウを差していると認識しているのですが、違いますでしょうか? /////////////////////////////////////////////////// HWND hWnd = FindWindow( NULL, "ウィンドウ名") ); if ( hWnd != NULL ) {   ShellExecute( hWnd, "Open", URL, NULL, NULL, SW_SHOW ); } else {   ShellExecute( NULL, "Open", "IExplore",​ URL, NULL, SW_SHOW ); } ///////////////////////////////////////////////////

  • mailto構文によるメール作成

    こんにちわ。 メールウインドウを開かせて、雛型をセットする処理を作っています。 そこで、mailto構文を使ってShellExecuteで下記の様に実現させようとしたのですが、 CSTring ADD="メアド",SUBJ="タイトル",BODY="本文"; MAIL="mailto:"+ADD+"?subject="+SUBJ+"&body="+BODY; ShellExecute(NULL,"open",MAIL,NULL,NULL,SW_SHOWNORMAL); こうすると、確かに思い通りの動作をしてくれましたが、 問題が1つありまして、本文が長く(恐らく255byteぐらい)なると、 メールウィンドウ自体開いてくれなくなります。 その状態から本文を削っていくと、正常に表示されます。 この方法での本文の長さは上限が決まっていて対処方法はないのでしょうか? よろしくお願い致します。

  • ShellExecuteのことで。

    はじめまして。 最近c言語のプログラミングを始めて、 cでフォルダを開くプログラムをテストしていましたら、 あるフォルダだけ、エラーが発生して、開けません。 フォルダのほうも色々見たのですが、 どうしてもわからないのでどなたか教えてください。 普通に開けたときは33だったのですが 開けなかったフォルダでの戻り値は42でした。 #include<stdio.h> #include<windows.h> int main(void){ HINSTANCE a; a=ShellExecute(NULL,"open","test",NULL,"D:\\",SW_SHOWNORMAL); printf("return = %d",a); return 0; }

  • PATHを効かせてコマンド実行したい

    コンソールコンパイラランチャのアプリケーションを作っているのですが、 command.comの設定でつまずいてしまいました。 やりたいことは 1.コンパイラのパスを設定する 2.コンパイルコマンドをパラメータ付きで実行する の2ステップなんですが、ShellExecuteを使って別々なら出来るんですけど、 下記の方法では1.のパス設定が2回目のShellでは無効になってしまいます。 なにか良い方法はないでしょうか? ShellExecute(NULL,"open","command.com", "/c set PATH=%PATH%"+m_strCompPath,NULL,SW_SHOW); ShellExecute(NULL,"open","command.com", "/k "+CommandString,NULL,SW_SHOW); 環境はVC++6.0,MFCです。