お世話になります。
ウィンドウハンドルからOLEオブジェクトを何とか取得する方法
はないでしょうか?
たとえば、以下のようなプログラムで@@@@@の位置で取得したい
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
Dim hWnd As Long
' 起動済みのExcelウィンドウハンドルを取得
hWnd = FindWindow("XLMAIN", vbNullString)
' ウィンドウハンドルが取得できた場合は
If hWnd <> 0& Then
'@@@@@ここでExcelオブジェクトを取得したい@@@@@
End If
End Sub
> ウィンドウハンドルからOLEオブジェクトを何とか取得する方法
一般的な方法はありません。そもそも、ウィンドウハンドルを持たないオブジェクトだってありますし。
対象とするオブジェクトによって、取得方法は異なります。(後から取得出来ないものもあります)
たとえば InternetExplorerオブジェクトならば、ObjectFromLresult APIを使う方法と、ShellWindowsコレクションを使う方法とがあります。
> ' 起動済みのExcelウィンドウハンドルを取得
Excelの場合は、1つしか起動されていなければ、
Set xlApp = GetObject(, "Excel.Application")
にて取得出来ます。(起動されていなかった場合は、エラーになります)
ただしこの方法ですと、Excelが複数起動されていた時に、それらを選択して取得する事はできません。
その場合は、ワークブック名経由での取得を行う方法があります。
Set xlApp = GetObject(MyWorkbookName).Application
ここで指定する MyWorkbookName は、Excel.WorkbookオブジェクトのFullNameプロパティで返される値です。
この場合、対象となるワークブック名を開いているExcelが見つからない場合は、そのMyWorkbookNameがファイル名と判断して開かれ、そのインスタンスが返されます。(ファイルすら見つからない場合は、実行時エラーになります)
Excelを複数起動時に、一番手前にあるExcelに対して
操作を行いたかったのですが、そうするとワークブックが
特定できないので何か対処方法がないものかと思って
何とかウィンドウハンドルまでは取得できたのですが...
やはり、無理ですか...。(ーー;)
ツイート | ![]() |