HOME > エクセルVBA > サンプル > FlashWindow

FlashWindow


【ファイル名】FlashWindow.xlsm
【バージョン】Ver 1.0.0.0
【作成日】2021年05月18日
【動作確認】Windows 10
【必要なソフト】Microsoft Excel 2010
【ダウンロード】FlashWindow.zip
【説明】Windows APIのFlashWindow関数で、ウィンドウとタスクバーのボタンを点滅するサンプルです。
画面

【外部リンク】Windows > Apps > Win32 > API > Winuser.h >  FlashWindow function

FlashWindow関数よりも高機能なFlashWindowEx関数があります。
Win64でFlashWindowEx関数のユーザー定義型のFLASHWINFOのcbSizeとdwTimeoutの型がwinuser.hファイルによるとLongですが、LongPtrで動作します。
しかし今は動作しても修正され動作しなくなるかもしれません。FlashWindowEx関数の使用は控えた方が良いでしょう。

customUI14.xml
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoad">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="Tab1" label="サンプル" insertBeforeMso="TabHome" keytip="S">
        <group id="Group1" label="FlashWindow">
              <button id="FlashWindowButton" label="ウィンドウを点滅" keytip="F" size="large"
                      imageMso="HappyFace" supertip="ウィンドウのタイトルバーとタスクバーのボタンを点滅します。" onAction="onAction" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
このページの上

Module1
Option Explicit

Private rbRibbonUI As IRibbonUI   ' リボン

#If Win64 Then
  ' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-flashwindow
  Private Declare PtrSafe Function FlashWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal bInvert As Long) As Long
#Else
  Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
#End If

Sub onLoad(ribbon As IRibbonUI) ' リボンの初期処理
  Set rbRibbonUI = ribbon ' リボンの表示を更新できるようにするためにリボンをセットする
  rbRibbonUI.Invalidate ' リボンの表示を更新します。
End Sub

Sub onAction(control As IRibbonControl) ' 各メニューの処理
  On Error GoTo ErrorHandler ' エラー処理ルーチン
  
  Select Case control.ID
    Case "FlashWindowButton"
      FlashWindow Application.hwnd, 1
    Case Else
      Beep ' 警告音
      MsgBox Prompt:=control.ID & "の処理がありません!", Buttons:=vbCritical + vbSystemModal, Title:="エラー"
      Exit Sub
  End Select
  
  Exit Sub
'
ErrorHandler: ' エラー処理ルーチン
  Beep ' 警告音
  MsgBox Prompt:="エラー番号:" & Err.Number & vbCrLf & Err.Description, Buttons:=vbCritical + vbSystemModal, Title:="エラー"
End Sub
このページの上