アプリケーション停止キューをWindowsに送る          <TOP>


アプリケーションを停止するキューをWindowsに送ります。

SetLayeredWindowAttributes レイヤード ウィンドウの不透明および透明のカラーキーを設定

GetWindowLong 指定されたウィンドウに関しての情報を取得

SetWindowLong 指定されたウィンドウの属性を変更

PostQuitMessage アプリケーションを停止するキューをWindowsに送る

 

例では、ウィンドウ(Form)を透過処理し「Quit」ボタンクリックでアプリケーションを停止するキューをWindowsに送ります。(アプリケーションの終了)

 

'================================================================
'= アプリケーションを停止するキューをWindowsに送る
'=    (QuitMessage.bas)
'================================================================
#include "Windows.bi"

' レイヤード ウィンドウの不透明および透明のカラーキーを設定
Declare Function Api_SetLayeredWindowAttributes& Lib "user32" Alias "SetLayeredWindowAttributes" (ByVal hWnd&, ByVal crKey&, ByVal bAlpha&, ByVal dwFlags&)

' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある32ビット値を取得することもできる
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

' 指定されたウィンドウの属性を変更。また、拡張ウィンドウメモリの指定されたオフセットの32ビット値を書き換えることができる
Declare Function Api_SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)

' アプリケーションを停止するキューをWindowsに送る
Declare Sub Api_PostQuitMessage Lib "user32" Alias "PostQuitMessage" (ByVal nExitCode&)

#define GWL_EXSTYLE -20                 '拡張ウィンドウスタイル
#define LWA_ALPHA 2                     'bAlphaをアルファー値として使う
#define LWA_COLORKEY 1                  'crKeyを透明色として使う(dwFlagsの定数)
#define WS_EX_LAYERED &H80000           '透明なウィンドウ属性(Windows2000以上)

'================================================================
'= 
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
   Var Ret As Long
   
   Ret = Api_SetWindowLong(GethWnd, GWL_EXSTYLE, Api_GetWindowLong(GethWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
   
   '透過処理
   Ret = Api_SetLayeredWindowAttributes(GethWnd, 0, 180, LWA_ALPHA)
End Sub

'================================================================
'= アプリケーションを停止するキューをWindowsに送る
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()

    Api_PostQuitMessage(0)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End