メッセージボックスの作成(V) <TOP>
APIでメッセージボックスを作成します。ボタン種・アイコンをチェックして作成ボタンをクリックします。
GetLogicalDrives 有効なドライブの情報を取得
MessageBoxEx メッセージボックスの作成、表示、操作を行う
MessageBoxIndirect メッセージボックスの作成、表示、操作を行う
PostQuitMessage アプリケーションを停止するキューをWindowsに送る
GetCommandLine 現在のプロセスのコマンドライン文字列へのポインタを取得
lstrlen
指定された文字列のバイトまたは文字の長さを返す
CopyMemory
ある位置から別の位置にメモリブロックを移動
'================================================================ '= メッセージボックスの作成(V) '= (MessageBoxEx.bas) '================================================================ #include "Windows.bi" #define MB_ICONASTERISK &H40 'メッセージ(情報) #define MB_ICONEXCLAMATION &H30 '感嘆符アイコン #define MAX_PATH = 260 Type MSGBOXPARAMS cbSize As Long hwndOwner As Long hInstance As Long lpszText As Long lpszCaption As Long dwStyle As Long lpszIcon As Long dwContextHelpId As Long lpfnMsgBoxCallback As Long dwLanguageId As Long End Type ' 有効なドライブの情報を取得。ディスクの挿入の有無やネットワークに接続されているかなどは関係なく、現在割り当てられている全てのドライブ一覧を返す Declare Function Api_GetLogicalDrives& Lib "Kernel32" Alias "GetLogicalDrives" () ' メッセージボックスの作成、表示、操作を行う Declare Function Api_MessageBoxEx& Lib "user32" Alias "MessageBoxExA" (ByVal hWnd&, ByVal lpText$, ByVal lpCaption$, ByVal uType&, ByVal wLanguageId&) ' メッセージボックスの作成、表示、操作を行う Declare Function Api_MessageBoxIndirect& Lib "user32" Alias "MessageBoxIndirectA" (lpMsgBoxParams As MSGBOXPARAMS) ' アプリケーションを停止するキューをWindowsに送る Declare Sub Api_PostQuitMessage Lib "user32" Alias "PostQuitMessage" (ByVal nExitCode&) ' 現在のプロセスのコマンドライン文字列へのポインタを取得 Declare Function Api_GetCommandLine& Lib "kernel32" Alias "GetCommandLineA" () ' 指定された文字列のバイトまたは文字の長さを返す Declare Function Api_lstrlen& Lib "Kernel32" Alias "lstrlenA" (ByVal lpString&) ' ある位置から別の位置にメモリブロックを移動 Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length&) Var Shared Button1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Function GetCommLine() As String Function GetCommLine() As String Var SLen As Long Var RetStr As Long Var Buffer As String 'コマンドラインを含むStringのポインタを取得 RetStr = Api_GetCommandLine '文字列の長さを取得 SLen = Api_lstrlen(RetStr) If SLen > 0 Then 'バッファを初期化 Buffer = Space$(SLen) 'バッファにコピー CopyMemory Buffer, ByVal RetStr, SLen GetCommLine = Buffer End If End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var mbp As MSGBOXPARAMS Var LDs As Long Var Cnt As Long Var sDrives As String Var Ret As Long '利用可能なドライブを取得 LDs = Api_GetLogicalDrives sDrives = "利用可能なドライブ:" For Cnt = 0 To 25 If (LDs And 2 ^ Cnt) <> 0 Then sDrives = sDrives & " " & Chr$(65 + Cnt) End If Next Cnt 'コマンドラインを表示 Ret = Api_MessageBoxEx(GethWnd, "コマンドライン:" & GetCommLine & Chr$(13, 10) & Chr$(13, 10) & "このメッセージボックスはAPI関数 MessageBoxEx で作成しました。", "コマンドライン", MB_ICONEXCLAMATION, 0) '構造体サイズを設定 mbp.cbSize = Len(mbp) 'アイコンスタイルを設定 mbp.dwStyle = MB_ICONASTERISK 'オーナーウィンドウを設定 mbp.hwndOwner = GethWnd 'テキストを設定 mbp.lpszText = StrAdr(sDrives & Chr$(13, 10) & Chr$(13, 10) & "このメッセージボックスはAPI関数 MessageBoxIndirect で作成しました。" & Chr$(0)) 'キャプションを設定 mbp.lpszCaption = StrAdr("利用可能なドライブ" & Chr$(0)) 'メッセージボックスを表示 Ret = Api_MessageBoxIndirect(mbp) 'アプリケーションの終了 ' Ret = Api_PostQuitMessage(0) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End