C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: 開こうとしているEXCELファイルのファイル名の取得


(過去ログ 76 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■45092 / inTopicNo.1)  開こうとしているEXCELファイルのファイル名の取得
  
□投稿者/ みじゅ (1回)-(2009/12/29(Tue) 16:56:54)

分類:[VB.NET/VB2005 以降] 

VB2008EE

はじめまして

パスワード入力待ち状態のEXCELファイルのファイル名を取得することはできるでしょうか。
すでに開いているファイルならウインドウタイトルにファイル名が表示されるので、そこから取得できますが、
パスワード入力待ち状態の場合はまだ表示されません。
パスワード入力ウインドウ内に、「"*******.xlsx"は保護されています」とファイル名が表示されますが、これ
を取得することはできるのでしょうか。またほかに方法はあるのでしょうか。

よろしくお願いします。

引用返信 編集キー/
■45095 / inTopicNo.2)  Re[1]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ やじゅ (1432回)-(2009/12/29(Tue) 21:28:30)
やじゅ さんの Web サイト
No45092 (みじゅ さん) に返信
> パスワード入力待ち状態のEXCELファイルのファイル名を取得することはできるでしょうか。
> すでに開いているファイルならウインドウタイトルにファイル名が表示されるので、そこから取得できますが、
> パスワード入力待ち状態の場合はまだ表示されません。
> パスワード入力ウインドウ内に、「"*******.xlsx"は保護されています」とファイル名が表示されますが、これ
> を取得することはできるのでしょうか。またほかに方法はあるのでしょうか。

そのファイルはどうやって開いているのでしょうか? って疑問が沸きますが、それは置いといて
Excelのパスワード入力ウインドウ内のウィンドウハンドルを取得さえ出来れば、ファイル名を取得が可能です。

マウスの位置からコントロールのハンドルを取得してテキストを取得する。
↓下記のツールで取得できるのは確認しました。
http://mt-soft.sakura.ne.jp/web_dl/petit_tool/get_string/

「ウィンドウハンドル 取得 他アプリ」あたりのキーワードで検索してみるといいかも
引用返信 編集キー/
■45096 / inTopicNo.3)  Re[2]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ .SHO (1086回)-(2009/12/30(Wed) 00:14:02)
> Excelのパスワード入力ウインドウ内のウィンドウハンドルを取得さえ出来れば、ファイル名を取得が可能です。
>
> マウスの位置からコントロールのハンドルを取得してテキストを取得する。
> ↓下記のツールで取得できるのは確認しました。
> http://mt-soft.sakura.ne.jp/web_dl/petit_tool/get_string/
>
> 「ウィンドウハンドル 取得 他アプリ」あたりのキーワードで検索してみるといいかも

マウスで指定するという操作が入っていいならウィンドウハンドルを取れますが
マウス指定なしで取得するとなると、探すのが結構骨かも?

パスワード入力ウィンドウ(ダイアログ?)のタイトルが固定なら
そこから探せそうですが。。。
引用返信 編集キー/
■45104 / inTopicNo.4)  Re[3]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ みじゅ (2回)-(2009/12/30(Wed) 09:35:47)
やじゅさん、.SHOさんありがとうございます。

ウィンドウハンドルがわかれば取得できるんですね。知りませんでした。
画面の最前面のウィンドウのウィンドウハンドルを取得する方法でパスワード入力ウィンドウのウィンドウハンドル
を取得できましたので、パスワード入力ウィンドウ内部のコントロールのハンドルを取得してテキストを取得する
方法を調べてみます。

やじゅさんへ
>そのファイルはどうやって開いているのでしょうか? って疑問が沸きますが、それは置いといて
ファイルのアイコンをダブルクリックするなどして開いているファイルです。

.SHO さんへ
> パスワード入力ウィンドウ(ダイアログ?)のタイトルが固定なら
> そこから探せそうですが。。。
タイトルは「パスワード」で固定です。

引用返信 編集キー/
■45109 / inTopicNo.5)  Re[4]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ .SHO (1087回)-(2009/12/30(Wed) 13:30:45)
>>パスワード入力ウィンドウ(ダイアログ?)のタイトルが固定なら
>>そこから探せそうですが。。。
> タイトルは「パスワード」で固定です。

それならまずパスワード入力ウィンドウのウィンドウハンドルを取得して
その配下のコントロールのウィンドウハンドルを取得すれば出来そうです。
引用返信 編集キー/
■45144 / inTopicNo.6)  Re[5]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ みじゅ (3回)-(2010/01/02(Sat) 10:46:58)
ウィンドウ内部のコントロールのハンドルを取得する方法を調べたところ、下記の2つを見つけので確認してみました。

1)「全てのウィンドウとコントロールの情報を表示するサンプル(VB.NET)」
http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleEnumWindows.html
  (ソースコードから実行ファイルを作成して実施)

2)「自作あぷりからAPIで他のあぷりをいじるときのめも」
http://d.hatena.ne.jp/maeyan/20091227/1262029121
  (実行ファイル EnumWindows.zip をダウンロードして実施)

どちらも EnumChildWindows と SendMessage の WM_GETTEXT を使用する方法でしたが取得できませんでした。
取得できたハンドルはパスワード入力Boxだけでその内容しか取得できません。OKボタン等のハンドルも取得で
きません。
ちなみにExcelファイルを変更してファイルを閉じるときに表示される保存を確認するダイアログは、テキスト部分
「****.xlsx への変更を保存しますか?」も、ボタンのテキスト(はい(&Y)、いいえ(&N)等)もすべて取得できます。

やじゅさんに紹介して頂いたマウスの位置から取得する方法の
http://mt-soft.sakura.ne.jp/web_dl/petit_tool/get_string/
は、同サイトの
http://mt-soft.sakura.ne.jp/web_dl/vb-parts/getstring_accessibility/
の「IAccessible による表示文字取得(VB6)」を使って取得しているのではないかと思いますが、この方法でない
とできないのでしょうか。(サンプルコードがVB6なのでまだやってませんが)

引用返信 編集キー/
■45148 / inTopicNo.7)  Re[6]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ .SHO (1092回)-(2010/01/03(Sun) 09:00:25)
No45144 (みじゅ さん) に返信

今、確認できる環境がないので残念なんですが・・・

> どちらも EnumChildWindows と SendMessage の WM_GETTEXT を使用する方法でしたが取得できませんでした。

この方法でいけると思うのですが。。

> 取得できたハンドルはパスワード入力Boxだけでその内容しか取得できません。OKボタン等のハンドルも取得で
> きません。

OKボタンも取れないとなるとExcelが何か特殊なことしてるのかな?
パスワード入力Boxのハンドルは、間違いなくパスワード入力Boxのハンドルですか?

> の「IAccessible による表示文字取得(VB6)」を使って取得しているのではないかと思いますが、この方法でない
> とできないのでしょうか。(サンプルコードがVB6なのでまだやってませんが)

この方法なら取れるのか是非試してみてください。
引用返信 編集キー/
■45149 / inTopicNo.8)  Re[7]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ みじゅ (4回)-(2010/01/03(Sun) 09:40:49)
No45148 (.SHO さん) に返信

>>取得できたハンドルはパスワード入力Boxだけでその内容しか取得できません。OKボタン等のハンドルも取得で
>>きません。
>
> OKボタンも取れないとなるとExcelが何か特殊なことしてるのかな?
> パスワード入力Boxのハンドルは、間違いなくパスワード入力Boxのハンドルですか?

下記のサンプルはツリー構造でクラス名とテキストが表示されます。
実際にパスワード入力Boxに入力した文字が表示されるので間違いないと思います。
1)「全てのウィンドウとコントロールの情報を表示するサンプル(VB.NET)」
http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleEnumWindows.html

bosa_adm_XL9 ・・・ パスワード (ウィンドウタイトル)
  |
  -- EDTBX ・・・ (入力した内容)

>>の「IAccessible による表示文字取得(VB6)」を使って取得しているのではないかと思いますが、この方法でない
>>とできないのでしょうか。(サンプルコードがVB6なのでまだやってませんが)
>
> この方法なら取れるのか是非試してみてください。

試してみたいと思います。

引用返信 編集キー/
■45150 / inTopicNo.9)  Re[8]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ Azulean (492回)-(2010/01/03(Sun) 10:18:11)
ダイアログに書かれている文字列がコントロール(ウィンドウ)である保障はありません。
OnPaint/OnDraw などで描画していれば、ウィンドウから文字列を取るアプローチは不可能ですよね。

Excel 2007 で見る限り、そのウィンドウには EDITBOX しかないように見えるため、今のアプローチは不可能だと思われます。
(この見えるボタンはコントロールじゃないのか...)
引用返信 編集キー/
■45152 / inTopicNo.10)  Re[8]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ やじゅ (1433回)-(2010/01/03(Sun) 11:59:51)
やじゅ さんの Web サイト
No45149 (みじゅ さん) に返信
>取得できたハンドルはパスワード入力Boxだけでその内容しか取得できません。OKボタン等のハンドルも取得で
>きません。

spy++が無いので、似たツールとして下記のツールで見ると、確かに子ウィンドウはEDITBOXしかないですね。
WinSpy++ 1.7 http://www.catch22.net/software/winspy

>「IAccessible による表示文字取得(VB6)」を使って取得しているのではないかと思いますが、この方法でない
>とできないのでしょうか。(サンプルコードがVB6なのでまだやってませんが)

下記のツールで、Choose Windowで「パスワード」を参照すると、ラベルやボタンなど4つ子ウィンドウが取得できます。
Active Accessibility 2.0 SDK Tools AccExplorer32.exe
http://www.microsoft.com/downloads/details.aspx?familyid=3755582a-a707-460a-bf21-1373316e13f0&displaylang=en

IAccessibleによる表示文字取得
http://mt-soft.sakura.ne.jp/web_dl/vb-parts/getstring_accessibility/
サンプルコードのダウンロードにEXEがあるので試すと取得できましたよ。
引用返信 編集キー/
■45154 / inTopicNo.11)  Re[9]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ .SHO (1093回)-(2010/01/03(Sun) 13:36:06)
No45152 (やじゅ さん) に返信

> 下記のツールで、Choose Windowで「パスワード」を参照すると、ラベルやボタンなど4つ子ウィンドウが取得できます。

OKボタンもコントロール使わずに、自分で描画して処理してるってことですね。
面倒なことするなぁ。

パスワード入力だからセキュリティが関係してるのかな?
引用返信 編集キー/
■45155 / inTopicNo.12)  Re[10]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ みじゅ (5回)-(2010/01/03(Sun) 20:49:04)
やじゅさん、.SHOさん、Azuleanさん、ありがとうございます。

なぜコントロールを使ってないのか疑問は残りますが、IAccessibleによる方法がありますのでそれでやってみます。

やじゅさん、
> IAccessibleによる表示文字取得
> http://mt-soft.sakura.ne.jp/web_dl/vb-parts/getstring_accessibility/
> サンプルコードのダウンロードにEXEがあるので試すと取得できましたよ。

確認ありがとうございます。VB.NETに置き換えてやってみます。
また、ツールを教えて頂きありがとうございます。

引用返信 編集キー/
■45156 / inTopicNo.13)  Re[11]: 開こうとしているEXCELファイルのファイル名の取得
□投稿者/ みじゅ (6回)-(2010/01/03(Sun) 21:34:40)
Accessibleによる方法で取得できることが確認できました。

ご協力ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -