ウィンドウハンドルからOLEオブジェクトの取得をするには?


simi  2003-11-08 01:48:27  No: 80319

お世話になります。
ウィンドウハンドルからOLEオブジェクトを何とか取得する方法
はないでしょうか?


simi  2003-11-08 01:59:47  No: 80320

たとえば、以下のようなプログラムで@@@@@の位置で取得したい

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


魔界の仮面弁士  2003-11-08 04:29:29  No: 80321

> ウィンドウハンドルから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がファイル名と判断して開かれ、そのインスタンスが返されます。(ファイルすら見つからない場合は、実行時エラーになります)


simi  2003-11-08 17:27:05  No: 80322

Excelを複数起動時に、一番手前にあるExcelに対して
操作を行いたかったのですが、そうするとワークブックが
特定できないので何か対処方法がないものかと思って
何とかウィンドウハンドルまでは取得できたのですが...
やはり、無理ですか...。(ーー;)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加