http;//wwwを表示させようtすれば

[戻る]
いけ 2007/03/04(日) 20:23:03
VC++6のユーザーです。

プログラムの途中で、
所定の
http;//www
あるいは、
\\___\\___\\___\\AAA.doc
なるサーバー上の特定のファイルを表示させようと思います。
これって、簡単に出来るのでしょうか?
特に、ネット上の特定のサイトのものを表示させたいのです。
手法論と必要なヘッダーなどがあれば、お教えください。

Blue 2007/03/04(日) 22:03:17
普通に ShellExecuteで出来るのでは?
サンプル等はネット検索すればたくさん出てくるのでご自分で探してください。

>http;//www
http://wwwでは?

PATIO 2007/03/06(火) 11:08:39
Blueさんが言われている方法で直接起動すれば、
Windows上で関連付けられているアプリが起動して
表示されると思います。
まあ、とにかくMSDNとかで調べてみる事をお勧めします。

いけ 2007/03/08(木) 06:35:49
みなさん
ありがとうございます。
ShellExecute
を使って。実際表示されました。
感激です。
逆に、表示されたサイトやファイルを
画面から消す(閉じる)方法はないのでしょうか?
それと、ShellExecute
のファイルやURLの開きは
やや遅いような気がするのですが、
スピードアップの秘策は何かないでしょうか?

Blue 2007/03/08(木) 08:37:23
ShellExecuteは別のexeを立ち上げるので立ちあげた後の操作は不可能です。
IE限定であれば(exeが限定できれば)操作は可能ですけど。

>スピードアップの秘策は何かないでしょうか?
ないです。
マシンスペックをあげてください。
また、ネットワークを介するもの(たとえばWebページ等)は回線速度も大きくかかわりま
すので。



一番の問題は、「どんなファイルでも開きたい」というところです。
htmlだけとかdocだけとか限定していれば、やれることは増えます。

PATIO 2007/03/08(木) 10:57:23
> 逆に、表示されたサイトやファイルを
> 画面から消す(閉じる)方法はないのでしょうか?

Blueさんも言われていますけれど、起動されるのは別のアプリです。
で、別のアプリを簡単に操作する事は出来ません。
自アプリのウインドウではないのでウインドウを特定する為の
ウインドウハンドルがわかりませんから。
しかもWindowsの拡張子の関連付けで起動している関係上、
どんなソフトが起動されて表示されるのか予想できないので
最適な閉じる為の手段を特定できません。
アプリケーションを特定できるような起動方法なら
手段もあるかもしれませんけれど。
もっとも全てのアプリケーションを安全に終了させる事を
可能にするたった一つの手段と言うのはありませんから
事実上無理でしょうね。


> それと、ShellExecute
> のファイルやURLの開きは
> やや遅いような気がするのですが、
> スピードアップの秘策は何かないでしょうか?
これも無いと思います。
起動されるのはあくまでも別のアプリケーションなので
そのアプリのロード時間とか色々掛かります。
ネットワーク経由でファイルを取得するとなると
その通信時間も掛かりますし。
結局は起動される側のアプリのつくりにも拠る話なので
利用側でどうこうできる類の話では無いと思います。
出来るとしたらデフラグでもして起動時間を多少短くするくらいでしょうか。
と言ってもこれはアプリがする事ではありませんね。

ぬふや 2007/03/08(木) 21:52:11
対策もう一つ。
予め非表示で起動しておいて、表示させたいときに改めて表示させる。
…これは無しですか。

あとは、表示用のソフトウェアを自分で指定してなるべく軽いソフトを使うとか、自
前で表示用のソフトウェアを用意する…って辺りでしょうか。

開いた画面を消すのは使うソフトを特定して操作しないと基本的には無理です
が…、起動に使うAPIを変えて起動したプロセスのウィンドウに片っ端から終了メッ
セージを送りつける、とか危険な裏技も無くは無いです。
片っ端から終了させるのは失敗したときが怖いので最後の手段と思って、別の方
法を探してください。

通りすがっちゃった 2007/03/13(火) 12:27:16
ShellExecuteEx()を使用して
引数で渡すSHELLEXECUTEINFOのfMaskメンバに 
SEE_MASK_NOCLOSEPROCESS を指定していると
SHELLEXECUTEINFOのhProcessメンバに起動した
プロセスのハンドルが格納されます。

それを使用してプロセスを終了することはできますが
あまりオススメしません。

Blue 2007/03/13(火) 12:55:05
>それを使用してプロセスを終了することはできますが
起動されるexeのなかにexplorerがありうるのでやめておいたほうがいいと思う。


CreateProcessからプロセスIDをキーに
EnumWindowsから特定のウィンドウハンドルを取得して、
PostMessage(WM_SYSCOMMAND,SC_CLOSEを指定)することならば
安全でしょう。

ただし、ここもexplorerだけは例外で、その方法ではウィンドウハンドルを取得するこ
とができないようです。
参考:http://homepage1.nifty.com/MADIA/vc/vc_bbs/200603_06030036.html

Blue 2007/03/13(火) 12:58:30
って、ぬふやさんが
>動に使うAPIを変えて起動したプロセスのウィンドウに片っ端から終了メッ
>セージを送りつける、とか危険な裏技も無くは無いです。
>片っ端から終了させるのは失敗したときが怖いので最後の手段と思って、別の方
>法を探してください。
っておっしゃっていますね。。。

まぁプロセス殺すよりも多少安全ということで。

PATIO 2007/03/13(火) 13:17:14
結局は

もっとも全てのアプリケーションを安全に終了させる事を
可能にするたった一つの手段と言うのはありませんから
事実上無理でしょうね。

と言うのが結論かと。

外部のアプリケーションの力を借りて楽をしているわけですし、
細かい部分までできないとだめと言うのはわがままかなとも思いますし。
細かい制御が必要なら表示する対象を絞り込んできちんと自分で
制御するような作りにしないと駄目だと思います。

古いスレッドには追加発言できません。