OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

SetWindowPosについて

  • 困ってます
  • 質問No.203891
  • 閲覧数1145
  • ありがとう数5
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 85% (17/20)

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

質問者が選んだベストアンサー

  • 回答No.5
レベル12

ベストアンサー率 40% (230/562)

>他アプリケーションの起動にはCreateProcess関数を使っていますが・・・。
CreateProcess関数のpStartupInfoに指定するSTARTUPINFO構造体のdwFlagsメンバにSTARTF_USESHOWWINDOWを指定すると、wShowWindowメンバの値が有効になります。
これはShowWindowやShellExecuteで指定するウィンドウのスタイルと同じ値です。
こうすれば、起動時のウィンドウのスタイルを指定できます。

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

お礼率 85% (17/20)

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

その他の回答 (全4件)

  • 回答No.1
レベル12

ベストアンサー率 40% (230/562)

APIのShellExecute関数の最後の引数にSW_SHOWNOACTIVATEを指定すると、起動したアプリケーションがアクティブにならずに起動しますよ。 ...続きを読む
APIのShellExecute関数の最後の引数にSW_SHOWNOACTIVATEを指定すると、起動したアプリケーションがアクティブにならずに起動しますよ。
お礼コメント
kudo1

お礼率 85% (17/20)

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


  • 回答No.2
レベル8

ベストアンサー率 60% (20/33)

最前面表示は、次のソースで実現できます。 APIの定義および定数は、自分で調べてください。 Private Sub Form_Load() '最前面表示 SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE End Sub ...続きを読む
最前面表示は、次のソースで実現できます。
APIの定義および定数は、自分で調べてください。

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

End Sub
お礼コメント
kudo1

お礼率 85% (17/20)

回答ありがとうございます。
SetWindowPos関数の最後の引数に適切な値を指定してやれば
よいのですね。でも具体的に何を指定すればよいのか分から
なかったのです。もう少し自分で調べてみます。
大変参考になりました。重ねて御礼申し上げます。
投稿日時 - 2002-01-25 16:50:59
  • 回答No.3
レベル12

ベストアンサー率 40% (230/562)

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

"常に手前に表示" にしたとしても、どのウィンドウがアクティブになるかは変わらないでしょう。
  • 回答No.4
レベル9

ベストアンサー率 33% (33/98)

無理にAPIを使わなくても、 他のアプリケーション起動時にフォーカスを持たないようにすることは可能です。 Shell 関数の第二引数を調べてみてください。 vbNormalNoFocus というのがそれにあたると思います。 ...続きを読む
無理にAPIを使わなくても、
他のアプリケーション起動時にフォーカスを持たないようにすることは可能です。
Shell 関数の第二引数を調べてみてください。
vbNormalNoFocus
というのがそれにあたると思います。
お礼コメント
kudo1

お礼率 85% (17/20)

回答ありがとうございます。
他アプリケーションの起動にはCreateProcess関数を使っていますが、
そちらの引数wShowWindowでフォーカスを持たせずに起動することも
可能なことが分かりました。Shell関数を用いた方法も調べてみよう
と思います。大変参考になりました。重ねて御礼申し上げます。
投稿日時 - 2002-01-25 16:46:03
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ