POSTMESSAGEのファイルの保存のmsgコードは?

解決


タッキー  2004-05-16 08:36:25  No: 83381  IP: [192.*.*.*]

こんにちは
APIのPostMessageを使って”名前を付けて保存”のダイアログボックスに
”保存する”を送ろうとしていますが、msgコード、パラメータを知りたく
お願い致します。
また、windowsの既定のダイアログボックスのボタンに対するmsgコード、
パラメータが判る一覧表などは無いのでしょうか?
例えば、開く、保存、キャンセルなど

編集 削除
岡田 之仁  2004-05-16 11:36:20  No: 83382  IP: [192.*.*.*]

VisualStudio6 の、VC関係をインストールされていましたら
SPY++がありますので、それでウィンドウ上に発行されるメッ
セージをキャプチャして調べましょう。

OSが違うとメッセージの順番も若干違ったりしますので
その手のお話でしたら、動作環境をもっと詳細に書いてもら
わないと、書けませんので・・・

ご検討下さい。

以上。

編集 削除
タッキー  2004-05-16 11:57:26  No: 83383  IP: [192.*.*.*]

岡田さま
VBAベースで、この処理が必要になり、あれこれ当っています。
近くの本屋でもAPIの解説書もなく、WEBで探しまくっています。
SPY++も検索で見つけましたが、VCのインストールをしておらず
Q&A掲示板でお願いしたものです。
尚、OSはWIN98で、対象のダイアログボックスは、
”名前を付けて保存”で、そのhWndは、1108と出て来ます。
プログラムは
RET=PostMessage(hWnd,msg,WP,LP)のものです。
msgコードは、WM_XXX表記ではVBA(EXCEL)が上手く動くかどうか
判りませんので、16進コードでも教えていただければ幸いです。
VCの知見は、皆無に近く、詳しい説明が出来ず申し訳けありません。
よろしくお願いします。

編集 削除
岡田 之仁  2004-05-16 16:17:14  No: 83384  IP: [192.*.*.*]

ダイアログボックスを含むウィンドウは、どのようなものであれ
毎回ウィンドウハンドルは違います。
よって、FindWindow等のAPIで該当のウィンドウを探し、その
ウィンドウハンドルを得てからそのウィンドウにPostMEssage
なり、SendMessageなりを行うことになります。
一発技では、出来ません。

"名前を付けて保存"と言うのはダイアログ中のメッセージだと
思いますが、その場合のタイトルには何と表示されていますか?
FindWindou等のAPIでは、タイトルに表示されているテキストを
対象にするか、もしくはウィンドウのクラス名で検索すること
になっています。

クラス名を取得するには、一番いい方法は、SPY++しか無いよう
に思います。あとは、タイトルに表示されている文字列で検索
しウィンドウハンドルを得ることです。ウィンドウハンドルを
得ないことには、その先何もできません。

EnumWindou等でのウィンドウの列挙や、FindWindou等での検索
関係のAPIをインプリし、なんとか該当のウィンドウハンドルを
得ることに注力して下さい。

得た後は、PostMessageとか・・・やりたいことがやっと可能
になります。

以上。

編集 削除
タッキー  2004-05-16 17:19:19  No: 83385  IP: [192.*.*.*]

岡田様

ダイアログボックスのタイトル(見た目に現れている)は、
”名前を付け保存””です。
プログラムは、GetWindowTextからNAMEを取得し、
”名前を付け保存”のダイアログボックスであること
を確認して、OK時に、取得している当該のダイアログ
ボックスの値をhWndにしてPostMessageでmsgを送る形です。

”名前を付け保存”には、保存とキャンセルの2つのボタンが
あり、”保存”をさせるべく送り込むmsgコードを当っています。

編集 削除
タッキー  2004-05-16 18:00:38  No: 83386  IP: [192.*.*.*]

岡田様

SPY++は持っていませんが、次の値を得て
います。
ここで保存のボタンを押す形です。

msgコードでボタン押しが可能なのか?
WM_COMMANDをmsgにした時、パラメータ値
は何か?  
で付き当っております。
よろしく願います。  

<当該ダイアログボックスWINDOW>
キャプチャ  ”名前を付けて保存”
クラス名    #32770
<その中の保存ボタン>  
キャプチャ  保存(&S)
クラス名    BUTTOM

編集 削除
岡田 之仁  2004-05-17 00:05:41  No: 83387  IP: [192.*.*.*]

Cのヘッダーファイルには・・・
/*
 * Dialog Box Command IDs
 */
#define IDOK                1
#define IDCANCEL            2
#define IDABORT             3
#define IDRETRY             4
#define IDIGNORE            5
#define IDYES               6
#define IDNO                7
#if(WINVER >= 0x0400)
#define IDCLOSE         8
#define IDHELP          9
#endif /* WINVER >= 0x0400 */
このように記述されています。

よって、IDOKを送信するので、『1』のはずです。
PostMessageへの渡し方は解っておられますか?

PostMessage( hWnd , WM_COMMAND , IDOK , 0 )

お試し下さい。

以上。

編集 削除
IMA  2004-05-17 07:46:33  No: 83388  IP: [192.*.*.*]

横から失礼します。
私も以前、SPY++の入手方法を捜していて、別の掲示板で教えていただきました。

もし、タッキーさんがVB6 Pro edition 以上をお持ちでしたら
CDの中の  \Common\Tools\VB\spyディレクトリに入っています。
(御存じでしょうが、プログラム名は spyxx.exe です。)

また、Freeで公開されている互換ソフトもあります。(英語版ですけど)
http://www.windows-spy.com/
Winspectorと言うソフトです。

私の場合、こちらの方をよく使用しています。

御参考になれば幸いです。

編集 削除
タッキー  2004-05-17 21:15:38  No: 83389  IP: [192.*.*.*]

岡田様
いろいろアドバイスありがとうございました。
見真似でやっており、甘く考えていました。
HPからファイルをダウンロードする際に、”ファイルのダウンロード”のダイアログ(クラス番号 同じく#32770)が出てきますが、保存処理をVBAで行う例として
  PostMessage(hWnd,&H111,&H1144,&H110596)のコードがあり、
試しにやってみると上手く行ったことから、次に出てくるダイアログも何らか定数
があるかと思い、探し(聞き)まくっておりました。
&H111の解釈は出来たのですが、wParam,lParamの出所の見当つかず、困って
いた次第です。
尚、WM_COMMAND,IDOKではNGで &H111,1だとOKでした。

IMA様
レスありがとうございました。
今は、APIビュアーを組み込んだレベルです。
VCまでには、まだ程遠いのです。

編集 削除
岡田 之仁  2004-05-17 23:00:09  No: 83390  IP: [192.*.*.*]

解決なさったので・・・

> 尚、WM_COMMAND,IDOKではNGで &H111,1だとOKでした。

それは、ただ、Private でも、Public でも、変数等の宣言
をなさっていなかったダケ・・・と思いますが。

宣言していれば、結果はOKなはず!

以上。

編集 削除