「CATIAで背景色を白にした状態で、画面のキャプチャをクリップボードに取得したい」
と相談を頂きました。
クリップボードではなく、ファイルとしてであればこちらの方法がお手軽かと
思います。
背景の設定を維持しつつ背景を白でキャプチャを行う | PLM Tips Magazine
'vba sample_Capture2Clipboard ver0.0.1 by Kantoku 'CATIAのキャプチャをクリップボードに保存 '--- WinAPI --- 'capture - https://qiita.com/nezuq/items/95cad79d9a9dd920d30e #If VBA7 And Win64 Then Private Declare PtrSafe Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) #Else Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) #End If Const VK_SNAPSHOT = &H2C '[PrintScrn]キー Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す Const KEYEVENTF_KEYUP = &H2 'キーを放す 'wait #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If '--- 設定 --- 'キャプチャ時の背景色 RGB Private Const BACKCOLOR = "255,255,255" 'キャプチャ取得待ち時間 ここの時間は調整してください Private Const WAITTIME = 200 Option Explicit Sub CATMain() '現在の背景色 Dim VisSetAtt As VisualizationSettingAtt Set VisSetAtt = CATIA.SettingControllers.Item("CATVizVisualizationSettingCtrl") Dim ActColor(2) As Long Call VisSetAtt.GetBackgroundRGB(ActColor(0), ActColor(1), ActColor(2)) '背景色変更 Dim rgb As Variant rgb = Split(BACKCOLOR, ",") Call VisSetAtt.SetBackgroundRGB(rgb(0), rgb(1), rgb(2)) VisSetAtt.SaveRepository If MsgBox("キャプチャしますか?", vbYesNo + vbInformation) = vbYes Then Call Sleep(WAITTIME) Call Exec_Capture 'キャプチャ End If '背景色を戻す Call VisSetAtt.SetBackgroundRGB(ActColor(0), ActColor(1), ActColor(2)) VisSetAtt.SaveRepository End Sub 'キャプチャ Private Sub Exec_Capture() AppActivate CATIA.Caption, True keybd_event &HA4, 0&, &H1, 0& keybd_event vbKeySnapshot, 0&, &H1, 0& keybd_event vbKeySnapshot, 0&, &H1 Or &H2, 0& keybd_event &HA4, 0&, &H1 Or &H2, 0& End Sub
32bitでも対応できるようにしたつもりですが、試す環境が無い為
未テストです。
WinAPIでPrintScrnキーを押しているのですが、タイミングが難しく
確認用のダイアログを出したり、ウェイトしたりしてます。
環境によってはダイアログの残像が残ってしまう可能性があるため、
Private Const WAITTIME = 200
の数値を修正して頂く必要があるかもしれません。
又、最初に紹介した方法では、アクティブなウィンドウをキャプチャしたファイルが出来上がるのに
対して、このマクロではCATIA全体のキャプチャになってしまう為、イマイチです。
(ウィンドウハンドルとか取得すれば何とかなるのかな?)