2012-04-15 6 views

答えて

3

あなたは、現在アクティブなワードアプリケーションウィンドウのハンドルを取得するにはFindWindow関数を使用することができます。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long 

MS Wordのクラス名は「OpusApp」です。あなたが唯一のWordのアプリを開いている場合は、以下がそのウィンドウへのハンドルを返します:

Public Function Test1() 
Dim lhWnd As Long 
lhWnd = FindWindow("OpusApp", vbNullString) 
End Function 

注意を使用すると、複数のアクティブなWordのアプリケーションを持っているとき、あなたはウィンドウキャプションの名前を追加することができます。たとえば、 "Stanigator.doc"として保存されている場合、キャプションは "Stanigator - Microsoft Word"と表示されます。だから、:

Public Function Test2() 
Dim lhWnd As Long 
lhWnd = FindWindow(vbNullString, "Stanigator - Microsoft Word") 
End Function 

便利になることがあり、他のAPIは次のとおりです。

Private Declare Function GetActiveWindow Lib "user32"() As Long 

編集:

私はVSTOのアプローチをお勧めするつもりはなく、「doesnのこのリンクに基づいていました賢明であるように見える: Connect Issue: VSTO API support for MS Word Main Window Handle

+0

Word VBAの' Set ws = ActiveSheet'と同じような方法はありませんか? – stanigator

+0

残念ながら、Win32 APIを使用する必要があります。私はそれがActiveSheet.hWndと同じくらい簡単だったと思います。別のトリックはSpy ++を使用することです。そのSpy ++はVisual Studioに付属しています。あなたがそれを持っていない場合は、http://www.catch22.net/software/winspy-17を試すことができる –

+0

私のプロジェクトを放棄する時間。おそらくC#でアプリを書くために私の友人を得ることができます。キモい。アドバイスありがとうございます。 – stanigator

0

ティム・ウィリアムズは指摘したように、それはです。

関連する問題