SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

VB テクニック編37 - 二重起動禁止、常に手前に表示、SetWindowPos

■SAK 関数利用規程

  ・テクニック編で紹介する関数は、私こと Y.SAK の開発関数である。
  ・著作権明示部分の改編は認めない。
  ・個人、企業がこれらの関数を使用したり、一部を使用して新たなシステムや
    プログラムを開発することは自由です。
  ・但し、これらの関数を一部でも使用しているソフトウェアをシェアウェア、
    その他有償プロダクトとして配布・販売するには、私の許可が必要です。
    (無償のフリーソフトウェアなら、自由に配布しても良い。)
  ・これらの関数を使用して発生した、いかなる形での損害も私こと Y.SAK は
    賠償しません。

■二重起動禁止 (VB)

  ・VB 実行プログラムの二重起動を禁止するには、次のようにする。
    (二重起動防止、二重実行禁止、二重実行防止、複数起動禁止、複数起動防止)

Private Sub Form_Load()

'** 二重起動チェック
  if App.PrevInstance then
    msgbox "既に起動されています。"
    end
  end if

End Sub

■二重起動禁止 (一般プログラム)

  ・一般プログラムの二重起動を禁止する方法は色々あるが、次のようにクラス
    名で処理すれば簡単である。
    (二重起動防止、二重実行禁止、二重実行防止、複数起動禁止、複数起動防止)
    この例では、電卓が起動されていなければ起動し、既に起動されていれば、
    エラーメッセージを表示する。
    キャプションが固定のプログラムであれば、クラス名を使用せずにキャプシ
    ョンだけでの制御も可能である。
    但し、Excel などはキャプションがオープンシートで変化するのが常のため、
    クラス名で制御した方が良い。

  dim hwindow as long

  hwindow = FindWindow("SciCalc", vbNullString)
  if hwindow = 0 then
    shell "calc.exe", 1
  else
    msgbox "既に起動されています。"
  end if

■常に手前に表示

  ・VB で自分自身のウィンドウを常に手前に表示するには、次のようにする。
    (常に前面に表示、フォームを手前に表示、Form を手前に表示)
    (フォームを前面に表示、Form を前面に表示)

Private Sub Command1_Click()

'** 常に手前に表示
  SetWindowPos HWND, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE

End Sub

Private Sub Command2_Click()

'** 常に手前に表示解除
  SetWindowPos HWND, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE

End Sub

  ・他のプログラムのウィンドウを常に手前に表示するには、次のようにする。
    ウィンドウハンドルさえ取得できれば制御は簡単である。
    (常に前面に表示、ウィンドウを手前に表示、ウィンドウを前面に表示)

Private Sub Command1_Click()

  dim hwindow as long

  hwindow = FindWindow("SciCalc", vbNullString)
  if hwindow = 0 then
    on local error resume next
    shell "calc.exe", 1
    on local error goto 0
    hwindow = FindWindow("SciCalc", vbNullString)
    if hwindow = 0 then
      msgbox "電卓が起動できない。"
      exit sub
    end if
  end if

'** 常に手前に表示
  SetWindowPos hwindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE

End Sub

Private Sub Command2_Click()

  dim hwindow as long

  hwindow = FindWindow("SciCalc", vbNullString)
  if hwindow = 0 then
    msgbox "電卓が起動されていない。"
    exit sub
  end if

'** 常に手前に表示解除
  SetWindowPos hwindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE

End Sub

  Public Const HWND_NOTOPMOST = -2
  Public Const HWND_TOPMOST   = -1
  Public Const SWP_NOMOVE     = 2
  Public Const SWP_NOSIZE     = 1

  Public Declare Function SetWindowPos Lib "user32" (ByVal hwindow as long, ByVal hinsertafter as long, ByVal x as long, ByVal y as long, ByVal cx as long, ByVal cy as long, ByVal flag as long) As Long

■VB テクニック編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK