ShellExecuteの最後の引数について

[戻る]
江戸 2002/11/07(木) 15:46:55
お世話になっています。

エクセルをShellExecuteで起動させています。
この関数の最後の引数でアプリケーションの起動時における状態を指定すると
思うのですがヘルプにある表の引数すべてを指定しても
「裏方で起動させる」といった動作が出来ません。
そもそもそういうことは出来るのでしょうか?
それとも何か別な方法があるのでしょうか?

ShellExecuteに関するヘルプは全部読みました。
お願いします。

環境はVC++6.0/SP5/WINXP/オフィス2000です。

dairygoods 2002/11/07(木) 16:55:09
「裏方で起動させる」というのがどういった起動方法なのかはっきりしませんが、
非表示で起動するならSW_HIDE、
最小化で起動するならSW_SHOWMINIMIZEで可能です。

ヘルプにある通り、これはlpFileにEXEのパスを指定したときだけ有効です。

江戸 2002/11/07(木) 17:22:36
説明不足でした、すみません。
私もSW_HIDEがそれだと思い試してみたのですが表示された状態で起動します。
非表示で起動というのは画面上では見えないがプロセスでは動いているという
感じと考えてよろしいでしょうか?

一応下にコードを示します。
なぜでしょう?お願いします。

CString file_name;
file_name = "C:\\Documents and Settings\\Administrator\\デスクトップ\\最新\\出力
帳票.xls" ;
ShellExecute(NULL ,"open", file_name, NULL, NULL, SW_HIDE);

江戸 2002/11/07(木) 17:22:36
説明不足でした、すみません。
私もSW_HIDEがそれだと思い試してみたのですが表示された状態で起動します。
非表示で起動というのは画面上では見えないがプロセスでは動いているという
感じと考えてよろしいでしょうか?

一応下にコードを示します。
なぜでしょう?お願いします。

CString file_name;
file_name = "C:\\Documents and Settings\\Administrator\\デスクトップ\\最新\\出力
帳票.xls" ;
ShellExecute(NULL ,"open", file_name, NULL, NULL, SW_HIDE);

tib 2002/11/07(木) 17:27:59
>これはlpFileにEXEのパスを指定したときだけ有効です。
に対して、

>file_name = "(中略).xls" ;
>ShellExecute(NULL ,"open", file_name, NULL, NULL, SW_HIDE);

という風に「exeのパスを指定していないから」ではないでしょうか。

edo 2002/11/07(木) 17:40:55
file_name = 
"C:\\Documents and Settings\\Administrator\\デスクトップ\\最新\\出力帳票.xls" ;

すみません、2段になってて見にくくなっているからでしょうか?
出力帳票.xlsまでのパスはフルパスで打ってあります。

違うところの指摘だったらすみません!

PAI 2002/11/07(木) 17:43:43
.xlsのパスじゃなくて、.exeのパスだよぅ。

江戸 2002/11/07(木) 18:06:42
エクセルのエクゼですか?
それを起動してしまったら私の起動したい
出力帳票.xlsをHIDE状態で起動することは無理なのでしょうか?

お願いします!

tib 2002/11/07(木) 18:11:08
xlsファイルは第4引数で指定してください。

dairygoods 2002/11/07(木) 18:15:29
ヘルプのlpParametersの説明に書いてあるとおり、
lpFileにEXEを指定した場合、lpParametersにアプリケーションに
渡すパラメータを指定します。

ヘルプを全部読んでも理解してなかったら意味ないです…。

江戸 2002/11/07(木) 18:21:08
おおそうでしたか!
ヘルプが英語なので見落としてました!
と思ったんですが、試してみたところだめでした。
実行時にわけの分からないエラーが出てしまいます。

C:\Documents.xlsが見つかりません。
and.xlsが見つかりません。
(省略)\出力帳票.xlsが見つかりません。

最初の2つなんて読んでる覚えはないし
最後の1つはあるのに無いといわれます・・・

exe_name = "C:\\Program Files\\Microsoft Office\\Office\\EXCEL.EXE";
file_name = "C:\\Documents and Settings\\Administrator\\デスクトップ\\最新\\出力
帳票.xls" ;
ShellExecute(NULL ,"open", exe_name, file_name, NULL, SW_HIDE);

お願いします。

tib 2002/11/07(木) 18:32:21
xlsファイルのパスが空白を含む場合はそのパスを第5引数に設定してください。

tib 2002/11/07(木) 19:22:57
ちょっと書き方が不適切だったかな...?

第4引数:第3引数に指定したexeに渡すパラメータ。この場合はexcelに「xlsファイル
名」を与えてそのファイルをオープンさせる。

第5引数:第3引数に指定したexeを起動する際のデフォルトのディレクトリ(作業ディレク
トリ)。この場合は第4引数に指定した「xlsファイル」が存在する「ディレクトリ」を指
定する。

MASATO [E-Mail] [HomePage] 2002/11/07(木) 21:24:41
file_name = "\"C:\\Documents and Settings\\Administrator\\デスクトップ\\最新\\出
力帳票.xls\"" ;

としてみてはどうでしょう

江戸 2002/11/08(金) 09:31:10
tibさん、MASATOさん!
有難うございます。

下のようにしてみたら出来ました!!!!!
1つ聞きたいんですが、今は消えた状態で起動してるんですけど
表示したり消えたりの変更って出来るんですか?
最小化したり、最大化したりをプログラミングで制御可能かどうかを聞きたいです。

CString file_name;
CString exe_name;
CString direct_name;
exe_name = "C:\\Program Files\\Microsoft Office\\Office\\EXCEL.EXE";
file_name = "出力帳票.xls" ;
direct_name = "C:\\Documents and Settings\\Administrator\\デスクトップ\\最新\\";

ShellExecute(NULL ,"open", exe_name, file_name, direct_name, SW_SHOWNORMAL);

西風 [HomePage] 2002/11/09(土) 01:18:22
ShellExecute() ではなく、
CreateProcess() と EnumThreadWindows() ではどうでしょうか。

あまり詳しくないので、この程度しか言えませんけどね、、(苦笑。
見当違いでしたら、すみません・・・。

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