Microsoft WordでActiveDocumentのWindowsハンドルを取得するにはどうすればよいですか?ActiveDocumentのハンドルを変数に保存するにはどうすればよいですか?
ハンドル値を変数に保存したいとします。
Microsoft WordでActiveDocumentのWindowsハンドルを取得するにはどうすればよいですか?ActiveDocumentのハンドルを変数に保存するにはどうすればよいですか?
ハンドル値を変数に保存したいとします。
あなたは、現在アクティブなワードアプリケーションウィンドウのハンドルを取得するには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
Word VBAの' Set ws = ActiveSheet'と同じような方法はありませんか? – stanigator
残念ながら、Win32 APIを使用する必要があります。私はそれがActiveSheet.hWndと同じくらい簡単だったと思います。別のトリックはSpy ++を使用することです。そのSpy ++はVisual Studioに付属しています。あなたがそれを持っていない場合は、http://www.catch22.net/software/winspy-17を試すことができる –
私のプロジェクトを放棄する時間。おそらくC#でアプリを書くために私の友人を得ることができます。キモい。アドバイスありがとうございます。 – stanigator
ティム・ウィリアムズは指摘したように、それはです。
'Set myDoc = ActiveDocument' –