以下に示すVBAコードスニペットは、Win32を介して開いているすべてのウィンドウを列挙するのに最適です(Googleに感謝します)。私は簡潔にするためにEnumCallBack()関数を省略しました。Win32に渡すときのVBAおよび関数演算子
EnumWindows呼び出しで数値定数の後に&演算子が表示されるという質問があります。私はEnumWindowsが2番目の引数としてポインタを期待しているので、定数の後に&演算子がWin32に定数のアドレスを渡していると推測しています。私はウェブをちょっと調べたが、これに関する文書は見つけられなかった。ちょうど私の感情を確認したいと思った。 &はVBAカスタムType..End Typeのアドレスも渡すと思いますか?
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Private ProcWinHandle As Long
Private ProcessHandle As Long
Public Function GetProcessWindowHandle(ProcID As Long) As Long
ProcessHandle = ProcID
ProcWinHandle = 0
Dim retval As Long
retval = EnumWindows(AddressOf EnumCallBack, 0&)
GetProcessWindowHandle = ProcWinHandle
End Function
関連する混乱については、https://msdn.microsoft.com/en-us/library/ee478101(v=vs.84).aspxを参照してください。変数の文字サフィックスは次のとおりです。https ://msdn.microsoft.com/en-us/library/s9cz43ek.aspx – cyboashu