【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言

初心者です。
メインのFormのLoad時に、他のアプリケーションも起動させるプログラムを
作っています。問題は、他のアプリケーション起動時に、フォーカスが
そちらへ移ってしまうことです。そこで、メインのFormを常に前面に
表示し、フォーカスを持たせる為に、SetWindowPos関数を使おうと考えて
います。が、どのようなパラメータを与えてやればよいのか分かりません。
また、もしこれよりもよい方法があれば教えて頂きたいのです。m(_ _)m
環境:VB6SP5, Win2000Pro

A 回答 (5件)

>他アプリケーションの起動にはCreateProcess関数を使っていますが・・・。


CreateProcess関数のpStartupInfoに指定するSTARTUPINFO構造体のdwFlagsメンバにSTARTF_USESHOWWINDOWを指定すると、wShowWindowメンバの値が有効になります。
これはShowWindowやShellExecuteで指定するウィンドウのスタイルと同じ値です。
こうすれば、起動時のウィンドウのスタイルを指定できます。

ちなみにCreateProcessでアプリケーションを起動した場合、pProcessInformationで指定した構造体にプロセスとスレッドのハンドルを受け取ります。
これらが必要ない場合は、即座にハンドルを閉じましょう。
さもないと、プログラム終了時までそのハンドルが残り、これを繰り返すとパフォーマンスが低下します。
    • good
    • 0
この回答へのお礼

再度回答ありがとうございます。
>これらが必要ない場合は、即座にハンドルを閉じましょう。
CloseHandle関数で閉じるのですね?(たぶん)勉強します。
重ねて御礼申し上げます。

お礼日時:2002/01/28 11:24

無理にAPIを使わなくても、


他のアプリケーション起動時にフォーカスを持たないようにすることは可能です。
Shell 関数の第二引数を調べてみてください。
vbNormalNoFocus
というのがそれにあたると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
他アプリケーションの起動にはCreateProcess関数を使っていますが、
そちらの引数wShowWindowでフォーカスを持たせずに起動することも
可能なことが分かりました。Shell関数を用いた方法も調べてみよう
と思います。大変参考になりました。重ねて御礼申し上げます。

お礼日時:2002/01/25 16:46

追記



"常に手前に表示" にしたとしても、どのウィンドウがアクティブになるかは変わらないでしょう。
    • good
    • 0

最前面表示は、次のソースで実現できます。


APIの定義および定数は、自分で調べてください。

Private Sub Form_Load()
'最前面表示
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
SetWindowPos関数の最後の引数に適切な値を指定してやれば
よいのですね。でも具体的に何を指定すればよいのか分から
なかったのです。もう少し自分で調べてみます。
大変参考になりました。重ねて御礼申し上げます。

お礼日時:2002/01/25 16:50

APIのShellExecute関数の最後の引数にSW_SHOWNOACTIVATEを指定すると、起動したアプリケーションがアクティブにならずに起動しますよ。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
他アプリケーションの起動にはCreateProcess関数を使っていますが、
そちらの引数wShowWindowでフォーカスを持たせずに起動することも
可能なことが分かりました。Shell関数を用いた方法も調べてみよう
と思います。大変参考になりました。重ねて御礼申し上げます。

お礼日時:2002/01/25 16:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報