
VBScriptにおいて、Win32API関数のGetWindowTitleをExcel経由で使用したいと考えております。
そこで、ネットで検索したところ、VBScriptからAPI関数の指定の引数の値を取り出す方法がありました。
https://blogs.yahoo.co.jp/nobuyuki_tsukasa/53646 …
この情報を基に、最前面画面のウィンドウタイトルを取得する下記サンプルコードを作成して実行したたところ、下段から3行目のところで、下記のエラーが出てしまいます。
コード:
Option Explicit
Dim AppExcel
Dim myHwnd
Dim myFixCaption
Dim myCaption
Dim strMacro
Dim ret
Set AppExcel = CreateObject("Excel.Application")
'最前面のウィンドウのウィンドウハンドルを取得
strMacro = "CALL('user32', 'GetForegroundWindow', 'J'" & ")"
strMacro = Replace(strMacro, "'", """")
myHwnd = AppExcel.ExecuteExcel4Macro(strMacro)
'タイトルの取得
'GetWindowText myHwnd, myFixCaption, Len(myFixCaption)
myFixCaption = Space(255)
strMacro = "CALL('user32', 'GetWindowText', '2JCJ', " & CStr(myHwnd) & ", '" & myFixCaption & "', " & Len(myFixCaption) & ")"
strMacro = Replace(strMacro, "'", """")
myFixCaption = AppExcel.ExecuteExcel4Macro(strMacro) '←ここで下記エラー発生
myCaption = Left(myFixCaption, InStr(myFixCaption, vbNullChar) - 1)
Set AppExcel = Nothing
エラー内容:
Application クラスの ExecuteExcel4Macro プロパティを取得できません。
環境:
OS;Windows10
Excel;Excel2013
どこがまずいのか、教えて下さい。
No.1ベストアンサー
- 回答日時:
こんばんは。
引用先のブログは、開発を投げたものてしょうから、こちらに振っても同じになるには違いないでしょう。はっきりとどこがということがわかりませんし、どこを直しても、このままでは通らないです。ExecuteExcel4Macroの中の数式のパラメータに、null文字が使えないのかとも思いました。数式のカッコ閉じる、が認識しないのです。
"CALL('user32', 'GetWindowText', '2JCJ', " & CStr(myHwnd) & ", '" & myFixCaption & "', " & Len(myFixCaption) & ")"
それと、
myFixCaption = Space(255) -> myCaption = Left(myFixCaption, InStr(myFixCaption, vbNullChar) - 1) これでは、整合性が取れませんよね。
myFixCaption は、 String(255, Chr(0)) だとは思うのですが、それを入れてしまうと、こんどは、数式のカッコが閉じなくなってしまいます。
試しに、DynamicWrapper なら、かろうじて取得できました。DynamicWrapper は、イントールというか、最初に、簡単な regsvr32.exe のレジストレーションが必要になってしまいますので、好まれないとは思いますが。
'-----DynamicWrapper ---
'サンプル
Dim objDynaWrap
Dim hWnd
Dim buf1
Dim myCap
Set objDynaWrap = CreateObject("DynamicWrapper")
objDynaWrap.Register "USER32.DLL", "GetForegroundWindow" ,"r=l" , "f=s"
objDynaWrap.Register "USER32.DLL", "GetWindowText", "i=lrl","r=l", "f=s"
buf1 =Space(20)
buf1 =String(20,Chr(0)) '30ではダメでした。
hWnd = objDynaWrap.GetForegroundWindow()
ret =objDynaWrap.GetWindowText( hWnd, buf1, Len(buf1))
myCap = Replace(buf1,Chr(0),"")
'myCap = Left(buf1,InStr(buf1,Chr(0))-1)
WScript.Echo myCap
Set objDynaWrap = Nothing
'----------------------------
かろうじて取れると書いたのは、なんとなく、このプログラムには、その作り方そのものに論理的な矛盾があるような気がしたからです。一番上のアプリのタイトルを取るけれども、これが、単独で動かしたら自分自身(VBSファイル)である可能性が高いし、そうでなく、他のプログラムから行っても、そのためのアクティベートしてしまったアプリになるわけです。なお、"i=lrl" のパラメータは合っているかわかりません。
p.s. Excelのバージョンの2013以降は、私の記憶では、オートメーションとして別起動しませんから、あえてExcelを使おうとしても、本体を使うのと同じになってしまうはずです。完全な独立プログラム・アプリを作るなら、Excelは使わないほうが良いのかもしれませんね。
WindFaller様
こんばんわ。
新年早々ご回答頂きまして、ありがとうございました。
ご指摘は非常に参考になりました。
API関数の使い方もわからずWebで検索しながら作ってみたものです。GetWindowText関数は、所定の長さの文字列を用意して置くと、呼出し後取得結果の文字列の最後にNull文字が付加されて返されるものと解していました。
いずれにしても、ExcecuteExcel4Macroでは、実現が難しそうなので、アドバイス頂いた方法等も参考にさせて頂き検討して行きたいと考えています。
なお、目的はVBScriptで表示されている画面の一覧を取得することです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
先着1,000名様に1,000円分もらえる!
教えて!gooから感謝をこめて電子書籍1,000円分プレゼント
-
VBSでuser32.dll(Win32API)を使用する方法を教えてください。
Visual Basic(VBA)
-
VBSで起動したアプリが前面表示しない
Visual Basic(VBA)
-
VBS(WSH)で開いたIEのウィンドウがアクティブにならない
Visual Basic(VBA)
-
4
GetWindowText、GetActiveWindowについて
Visual Basic(VBA)
-
5
vbscriptでIE自動入力(途中で出てくるポップアップをクリックしたい)
Visual Basic(VBA)
-
6
VBAでのExecuteExcel4Macroの値取得でエラー
Excel(エクセル)
-
7
ExecuteExcel4Macroについて
Visual Basic(VBA)
-
8
DoEvents
その他(Microsoft Office)
-
9
VBScriptからDLL参照設定したい
Visual Basic(VBA)
-
10
現在、開いているIEの子Windowの操作・情報取得はどうやってできるでしょうか。
Microsoft ASP
-
11
ウィンドウのタイトルからプロセス取得
Visual Basic(VBA)
-
12
「終了していない文字列型の定数です」とでます
JavaScript
-
13
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
14
アプリケーションをVBS(WSH?)で操作したい
Visual Basic(VBA)
-
15
vbsからのExcelマクロ呼び出しの際に保存ダイアログが表示されてしまう
その他(プログラミング・Web制作)
-
16
VBA アクティブウインドウの取得について
Visual Basic(VBA)
-
17
VBSでExcelのUserFormをエクスプローラの前面に出したい
Visual Basic(VBA)
-
18
WinAPIで電卓をクリック
Visual Basic(VBA)
-
19
起動したIEのウインドウタイトルを取得する方法
Visual Basic(VBA)
-
20
VBScriptから指定URLを開く方法
Visual Basic(VBA)
関連するQ&A
- 1 ExecuteExcel4Macro "FORMULA(""=R1C1"")"
- 2 VBA(ExecuteExcel4Macro)を用いた検索ツール
- 3 リストボックスにExecuteExcel4Macroで取得したデータを表示したいのですが
- 4 ExecuteExcel4Macroについて
- 5 ExcelVBAの使い方 ¥の使い方おしえてください。
- 6 VBScriptで32ビットIEの起動のさせ方
- 7 VBAのwav操作ついて!!
- 8 ExcelVBAでのPPT操作ついて
- 9 VBscriptでコマンドラインへ発行したい
- 10 MyApplicationのUnhandledExceptionいべんとについて
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
HEWを使用しているのですが、こ...
-
5
デバッグ中のエラーのことで教...
-
6
ビルド失敗 指定されたファイ...
-
7
fortranでプログラムを実行する...
-
8
VC++ 2008 Express EditionでWi...
-
9
multiple definitionというエラー
-
10
レコードセットをcloseする所で...
-
11
VBScriptによるExecuteExcel4Ma...
-
12
[デザイン]の画面でこのような...
-
13
ユーザフォーム開くとエラーになる
-
14
VS2013 C++で、コンパイルした...
-
15
MakeSureDirectoryPathExists
-
16
RightとLeft関数のライブ...
-
17
VB2008で定数に色の設定をした...
-
18
右オペランドを扱う演算子は定...
-
19
C# 固定長ファイルの取得 FileGet
-
20
BC30002: 型 'ListItem' が定義...
おすすめ情報