• 締切済み

VBAでウィンドウのキャプションとフルパスを取得

ExcelVBAを用いて、以下のことをやりたいと考えています。 (1)全ウィンドウのハンドルを取得する。 (2)取得したハンドルを、可視ウィンドウのハンドルのみに絞り込む (3)ハンドルから、ウィンドウのキャプション、ファイル名を含むフルパスの2つを抽出する。 (4)Excelのセルへ 「キャプション フルパス ハンドル」 の順に横に並ぶように出力する。 (5)Excelの行を下へ移動する。 (6)(3)~(6)を、全ての可視ウィンドウに対して順に行う。 結果としては 1つめのキャプション 1つめのフルパス 1つめのハンドル 2つめのキャプション 2つめのフルパス 2つめのハンドル 3つめのキャプション 3つめのフルパス …… と結果出力を行いたいと考えています。 まず、他の質問サイトなどの過去暦も含めて探ってみました。 その結果、全可視ウィンドウのキャプションを取得する方法とアクティブウィンドウのフルパスを取得する方法がそれぞれ見つかったのですが、自分なりに組み合わせても上手く動作しませんでした。 なんとか、解決方法を教えていただければと思います。

みんなの回答

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.1

何がどう上手くいかないのか・・・。せっかく試行錯誤しても、結局「コード書いて!」になってちゃ悲しいですよ。 ステップ実行やブレイクポイントで止めて、ローカルウィンドウで変数の中をチェック。Debug.Printでイミディエイトにログ出力もできます。デバッグのしやすさがVBA最大の魅力。使いこなして!! #ハマるとしたら固定長文字列のあたりかな、と。以下、参考になれば Sub test()  Call EnumWindows(AddressOf GetWndProc, 0) End Sub Function GetWndProc(ByVal hWnd As Long, lParam As Long) As Boolean  Dim ret As Long  Dim myCaption As String * 128  If IsWindowVisible(hWnd) Then   ret = GetWindowText(hWnd, myCaption, Len(myCaption))   Debug.Print " * " & Left(myCaption, InStr(myCaption, vbNullChar) - 1)  End If  GetWndProc = True End Function

関連するQ&A

  • VBAで、VBのapp.pathと同じ機能は?

    ExcelVBAで、そのExcelファイルが起動されたフォルダーパスを取得する方法はあるのでしょうか? application.pathでは、excel.exeのあるフォルダーパスが返されます。 VB(ver6)のapp.pathのように、そのファイルが起動された(保存されている)パスを知りたいのですが、何か方法はないでしょうか? よろしくお願いします。

  • アクティブウィンドウ(ドキュメントファイル)のパス

    VB初心者です。 VB等でアクティブウィンドウのパスを取得する方法を探しています。 タイトルであればGetWindowTextで取得で可能ですし、 アプリケーションのパスであれば、  http://sumishiro.blogspot.jp/2009/09/blog-post_30.htmlが参考になりました。  しかしドキュメントファイルのパスを取得する方法がどうしてもわかりません。 例えば、ワードでtest.docxを開いているとき、そのウィンドウハンドルからwinword.exeのフルパスでなく、test.docxのフルパスを取得する方法です。(ワード、エクセル等だけでなく画像ビューアーが画像ファイルを開いているとき、その画像ファイルのフルパスの取得) どうぞよろしくお願いいたします。

  • 【VBAでapp.path が取得できない】

    VBAでapp.path を取得しようとすると、「オブジェクトが必要です」エラーが表示されます。 アプリケーション実行パスを取得する方法はありますか? Excel2000を使用しています。 宜しくお願いいたします。

  • ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法

    ●やりたいこと ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている エディットテキストを取得して、セルに出力したい 使用する関数・宣言、できればコードを教えていただけませんでしょうか。 イメージはこちらをご参考いただけると幸いです。 ​http://situmon-img.blogspot.com/2008/08/1.html​ 変数hwindowに親ウィンドウのハンドルが取得されています。 エディットボックスのハンドル、IDは分かりません。 エディットボックスのハンドルを取得し、 分かっているクラス・ハンドルの文字列を取得 といった流れになるのではと思っております。 変数にさえ文字列が取得できれば、 当然ですが、Range("B2")=変数 で大丈夫です。 変数は、ひとつを使いまわしで構いません。 変数をエディットテキストの数だけ用意しても構いません。

  • 表示されているファイルの完全パスの取得

    Windows上で、最前面に表示されているOfficeファイルの 完全パスを取得したいのですが、方法がわかりません。 GetForegroundWindowにてハンドルを取得し、 GetWindowThreadProcessId → EnumProcessModules → GetModuleFileNameExで、取得できるのは当然のことながら、 起動したOfficeアプリの完全パス(C:\Program Files~\POWERPNT.EXE等)に なってしまいます。 取得したいのは、アプリの完全パスではなく、 ファイル自体の完全パス(C:\Documents and Setting~新規ファイル.ppt等)なんですが、 どうにかして、最前面に表示されているウィンドウ(Officeアプリ)から 表示しているファイル自体の完全パスを取得する方法はないでしょうか? よろしくお願いします。 開発環境:Visual Studio2008 / C++プロジェクト

  • Excel2010VBAでエラーが出る相対パス指定

     ExcelVBAで,Excel2007と2013で問題無いのに, Excel2010ではエラーが出る相対パス指定について, ご教示を頂けると助かります.  ExcelVBAにて, ○○.dll ファイルを 以下のように宣言して使っています. Private Declare Function LoadTT Lib ".\○○.dll" _ () As Integer  プログラムの中で, ret = LoadTT() を実行すると, Excel 2007では相対パスでの指定で問題無く動作しますが, Excel 2010では相対パスでの指定ではエラー(ファイルが見つからない)"48"が出ます. そこで,相対パス指定をやめて絶対パスに変更すると問題無く動作します.  念のため Excel2013でも試したところ, 2007と同様に,相対パス指定でも問題なく動作しました.  なお,ExcelVBAのファイル「○.xlsm」と「○○.dll」は同じフォルダーに入れています.  また, ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path の実行によるカレントフォルダーの確認も,どのバージョンでも同じに正しく確認出来ています.    因みに,バージョンの違う各Excelは別々のPCでの動作ですが,使用OSは Windows7 Professional 32bit で同じです.  以上のように Excel2010だけ動作が異なります.  とりあえずは絶対パス指定にすれば問題は解消するのですが, Excel2010で特に何か設定したということは無いので気持ち悪く, 原因と思われることでご存じ方がいらしたらご教示を頂けると助かります.  どうぞよろしくお願い致します. ==

  • ウィンドウのハンドルからファイル名を取得について

    ウィンドウのハンドルからファイル名を取得する方法について質問です。 GetWindowThreadProcessIdで、スレッドのIDを取得、 OpenProcessで、ハンドルを開く、 EnumProcessModulesで、モジュールのハンドルを取得、 GetModuleFileNameExで、パス名を取得、 でファイル名を取得しようとしているのですが一部のウィンドウのハンドルは失敗します。 Windows XPでは取得できるのですが、Windows 7では失敗します。 EnumProcessModulesで取得が失敗しているようです。 私の予想ではOpenProcessでのアクセス権の指定に問題があるのではと 思って調べてみたのですが分かりませんでした。 GetWindowModuleFileNameでも試してみたのですが、 取得に失敗します。 ちなみに、OpenProcessのアクセスフラグは 「PROCESS_QUERY_INFORMATION | PROCESS_VM_READ」です。 どうすればいいのでしょうか? 他の方法があれば、それでも構いません。 とにかく、他のウィンドウ(プロセス)のファイル名を取得出来れば、 どんな方法でも構いません。 よろしくお願いします。

  • PHPでパスの取得に関して

    PHPExcelというものを使用して、EXCELファイルを出力するプログラム を作成しています。 その中で、できないのではないかと想定はしていますが、出力するファイルを自パソコン側へ 作成したいと考えています。 その為、出力ファイル先を自PCの例えば、、、Cドライブやデスクトップという指定をしたいと 考えていますが、PHPでそれらのパスを取得する事は可能なのでしょうか??? 教えて頂きたいと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • パスをセルから取得し保存 VBA

    エクセルVBAでの質問です。 Cドライブにテキスト形式で保存する場合は = xlAPP.GetSaveAsFilename(InitialFileName:="C:\test.txt",FileFilter:=cnsFILTER,Title:=cnsTITLE) となると思いますが、上記で使われている”C:\”の部分をセル(保存したいパスを入力)から取得する場合はどのように記述すればよいでしょうか? よろしくお願いします。

  • デスクトップのパスを取得したい

    いつもお世話になっております。 WINDOWS2000のデスクトップのパスを取得したいのですがなにかいい方法はないでしょうか? できれば簡単なソースなどをつけていただけると非常にたすかります。 よろしくおねがいします

専門家に質問してみよう