- - PR -
VB.NETからCreateProcessでexplorer.exeが上手く起動できない。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-07-17 09:04
初めての投稿です。
VB.NETでCreateProcessを用いて、explorer.exeを好みの位置とサイズで 起動するプログラムを作っていますが、設定する位置とサイズで起動できな くて難儀しています。どうしても前回起動した位置とサイズとなってしまし ます。関数宣言、引数はリファレンス通りに設定しています、データ型もVB .NET用に変換しています。explorer.exeでは何か特別な設定が必要なので しょうか?。 どなたか教えて下さい。宜しくお願いします。 | ||||
|
投稿日時: 2004-07-17 14:16
explorer に限らず、起動側が示した位置・サイズでウィンドウを開くかどうかは、起動される方のプログラムの実装次第なので、StartupInfo で指定した設定が必ず採用される保証はありません。 どうしても位置とサイズを起動側から制御したいとしたら、別の方法を探さなくてはなりません。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2004-07-18 01:51
ひどりさんへ
早速のレス・アドバイス有難うございます。 やはり特別なことが必要なんですね。explorer.exeのレジストリ内の情報を 活用すれば出来そうとは思っているのですが、レジストリ情報の意味がわから ず、恐いので手を付けないでいます。 でもどうしても好みの位置とサイズで起動させたいので、まどろっこしいです が、一度起動させてから移動させるとかの別方法をトライします。 いいアドバイスがありましたら、有難いと思います。宜しくお願いします。 | ||||
|
投稿日時: 2004-07-18 08:15
諸農です。
Processクラスを使っているのでしたら、Process.MainWindowHandleを MoveWindow() Win32APIの引数に使って移動させてみてはいかがでしょうか。 #試していませんm(__)m _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-07-18 08:56
Jubei 諸農さん有難うございます。
実はMoveWindowで移動させようかと考えていました。ただ一度は希望しない 位置・サイズで表示されてしまいますので、これがほんのちょいの間とはいえ スマートでないのでちゅうちょしています。 Process.MainWindowHandleをMoveWindowのHandleに使うのは考えて もいなかったので試してみたいと思います。結果はアップします。 アドバイス有難うございました。 | ||||
|
投稿日時: 2004-07-19 11:24
位置・サイズ指定は言うこと聞かないかもしれませんが、最小化くらいは聞き届けるかもしれません。 なので、StartupInfo で explorer を最小化状態で起動するようにして、その状態で移動・サイズ指定を行ってから通常表示に戻してみるとか。 それでも駄目なら、シェルをオートメーションでもするのかな。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2004-07-20 01:24
ひどりさんへ
最小化効きませんでした。ちょいの間表示は我慢ですかね。 シェルのオートメーションはよくわかりませんが、explorerを 好きな位置・サイズで表示させる程度にしてはコードが長くな り過ぎるような気がします。面白くありませんがちょいの間表 示我慢は今のところ受けざるを得ません。 アドバイス有難うございました。 | ||||
|
投稿日時: 2004-07-20 02:07
Jubei 諸農さんへ
ProcessクラスのMainWindowHandleで試そうとしているのですが、肝心の MainWindowHandleが取得できませんでした。コードは次のとおりです。 Private Sub Button2_Click〜 Dim strExpExe As String = "explorer.exe" Dim ExpPrcs As New System.Diagnostics.Process Dim ExpMainWndHdl As IntPtr Dim intExpMainWndHdl As Integer ExpPrcs.Start(strExpExe) ExpPrcs.WaitForInputIdle(500) ExpMainWndHdl = ExpPrcs.MainWindowHandle intExpMainWndHdl = ExpMainWndHdl.ToInt32 Label1.Text = intExpMainWndHdl End Sub Processクラスの使い方をよく理解しきれていないのが原因だと思いますが、 宜しければアドバイスをお願いします。 それから、ひどりさんからアドバイスありました最小化表示はCreatePro cessでも効きませんでした。ですのでMoveWindowを使用しても一度は表示 してからの移動と今のところならざるを得ません。 explorer.exeのレジストリの内容がわかれば、リスクはありますが、直接 位置・サイズを更新すればshellでもstartでも希望の位置・サイズでexpl orer.exeを起動できると思って、色々と調べているのですがわかりません。 NotePad.exeのレジストリはわかり易くて、位置・サイズの情報が変更され るのがregeditでよくわかります。 どなたかexplorer.exeのレジストリの内容を知っていれば、教えて下さい。 |