- PR -

VB.NETからCreateProcessでexplorer.exeが上手く起動できない。

投稿者投稿内容
ysue
会議室デビュー日: 2004/07/17
投稿数: 12
投稿日時: 2004-07-17 09:04
 初めての投稿です。

VB.NETでCreateProcessを用いて、explorer.exeを好みの位置とサイズで
起動するプログラムを作っていますが、設定する位置とサイズで起動できな
くて難儀しています。どうしても前回起動した位置とサイズとなってしまし
ます。関数宣言、引数はリファレンス通りに設定しています、データ型もVB
.NET用に変換しています。explorer.exeでは何か特別な設定が必要なので
しょうか?。

 どなたか教えて下さい。宜しくお願いします。



 

 
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-07-17 14:16
引用:

explorer.exeでは何か特別な設定が必要なので



explorer に限らず、起動側が示した位置・サイズでウィンドウを開くかどうかは、起動される方のプログラムの実装次第なので、StartupInfo で指定した設定が必ず採用される保証はありません。

どうしても位置とサイズを起動側から制御したいとしたら、別の方法を探さなくてはなりません。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ysue
会議室デビュー日: 2004/07/17
投稿数: 12
投稿日時: 2004-07-18 01:51
 ひどりさんへ

早速のレス・アドバイス有難うございます。
やはり特別なことが必要なんですね。explorer.exeのレジストリ内の情報を
活用すれば出来そうとは思っているのですが、レジストリ情報の意味がわから
ず、恐いので手を付けないでいます。
でもどうしても好みの位置とサイズで起動させたいので、まどろっこしいです
が、一度起動させてから移動させるとかの別方法をトライします。
いいアドバイスがありましたら、有難いと思います。宜しくお願いします。



Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 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/
ysue
会議室デビュー日: 2004/07/17
投稿数: 12
投稿日時: 2004-07-18 08:56
Jubei 諸農さん有難うございます。
実はMoveWindowで移動させようかと考えていました。ただ一度は希望しない
位置・サイズで表示されてしまいますので、これがほんのちょいの間とはいえ
スマートでないのでちゅうちょしています。
Process.MainWindowHandleをMoveWindowのHandleに使うのは考えて
もいなかったので試してみたいと思います。結果はアップします。
アドバイス有難うございました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-07-19 11:24
引用:

実はMoveWindowで移動させようかと考えていました。ただ一度は希望しない
位置・サイズで表示されてしまいますので、これがほんのちょいの間とはいえ
スマートでないのでちゅうちょしています。



位置・サイズ指定は言うこと聞かないかもしれませんが、最小化くらいは聞き届けるかもしれません。
なので、StartupInfo で explorer を最小化状態で起動するようにして、その状態で移動・サイズ指定を行ってから通常表示に戻してみるとか。
それでも駄目なら、シェルをオートメーションでもするのかな。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ysue
会議室デビュー日: 2004/07/17
投稿数: 12
投稿日時: 2004-07-20 01:24
ひどりさんへ

最小化効きませんでした。ちょいの間表示は我慢ですかね。
シェルのオートメーションはよくわかりませんが、explorerを
好きな位置・サイズで表示させる程度にしてはコードが長くな
り過ぎるような気がします。面白くありませんがちょいの間表
示我慢は今のところ受けざるを得ません。
アドバイス有難うございました。

ysue
会議室デビュー日: 2004/07/17
投稿数: 12
投稿日時: 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のレジストリの内容を知っていれば、教えて下さい。





スキルアップ/キャリアアップ(JOB@IT)