#031 AccessからWindowsを終了させるには? VBA、API

一般に"ユーティリティ"と呼ばれるようなソフトではよく[スタート]ボタンを使わずにWindowsを一発で終了させてくれるようなものがありますが、Accessを使ってそのような機能だけのソフトを作る人はあまりいないでしょう。しかし、あるパソコンがAccessで作ったデータベースアプリケーションの専用パソコンとして運用されているような場合にはこの「AccessからWindowsを終了させる方法」も便利な手段です。

例えば、受注管理システムというものがあって、受注伝票を入力するためだけに専用のパソコンが置かれているとします。もし入力作業を行う人がその用途以外にはそのパソコンを使うことがないとしたら、Windowsそのものの終了操作はさせずに、アプリケーション上の[システム終了]ボタンのようなものでパソコンを切れる状態にまでしてやった方が親切でしょう。また、最近ではバーコードなどによる入力手段も普及しているので、そのような作業をパソコンに不慣れな人が行っていることも少なくないと思います。そのような場合にも不測の操作を防止し、Windowsを安全に終了させることができます。

さて、このような機能を実現させるためには、WindowsAPIの ExitWindowsEx 関数を使います。その宣言と使用例は次の通りです。なお、リソースが極端に減るなど、"パソコンの調子がどうもおかしい"というときのために、「再起動」のサンプルも用意しました(もっともそのような状態でこのコードが動くかどうかは分かりませんが....)。
Declare Function ExitWindowsEx  Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Const EWX_SHUTDOWN As Long = 1   '電源を切れる状態にする
Public Const EWX_REBOOT  As Long = 2    'コンピューターを再起動する


Public Function QuitWindows(lngExitMode As Long) As Long
  If lngExitMode = 1 Then
    '応答のないプロセスを無視して電源を切れる状態にする
    QuitWindows = ExitWindowsEx(EWX_SHUTDOWN, 0&)
  ElseIf lngExitMode = 2 Then
    '応答のないプロセスを無視してコンピューターを再起動する
    QuitWindows = ExitWindowsEx(EWX_REBOOT, 0&)
  End If

End Function

※ここでは分かりやすくするためにIf文を使いましたが、引数 lngExitMode に与える値と、定数 EWX_SHUTDOWNとEWX_REBOOT の値は同じですので、QuitWindowsプロシージャの中味を次の1行だけにしても同じ動作となります。
   QuitWindows = ExitWindowsEx(lngExitMode, 0&)
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved