こんにちは
APIのPostMessageを使って”名前を付けて保存”のダイアログボックスに
”保存する”を送ろうとしていますが、msgコード、パラメータを知りたく
お願い致します。
また、windowsの既定のダイアログボックスのボタンに対するmsgコード、
パラメータが判る一覧表などは無いのでしょうか?
例えば、開く、保存、キャンセルなど
VisualStudio6 の、VC関係をインストールされていましたら
SPY++がありますので、それでウィンドウ上に発行されるメッ
セージをキャプチャして調べましょう。
OSが違うとメッセージの順番も若干違ったりしますので
その手のお話でしたら、動作環境をもっと詳細に書いてもら
わないと、書けませんので・・・
ご検討下さい。
以上。
岡田さま
VBAベースで、この処理が必要になり、あれこれ当っています。
近くの本屋でもAPIの解説書もなく、WEBで探しまくっています。
SPY++も検索で見つけましたが、VCのインストールをしておらず
Q&A掲示板でお願いしたものです。
尚、OSはWIN98で、対象のダイアログボックスは、
”名前を付けて保存”で、そのhWndは、1108と出て来ます。
プログラムは
RET=PostMessage(hWnd,msg,WP,LP)のものです。
msgコードは、WM_XXX表記ではVBA(EXCEL)が上手く動くかどうか
判りませんので、16進コードでも教えていただければ幸いです。
VCの知見は、皆無に近く、詳しい説明が出来ず申し訳けありません。
よろしくお願いします。
ダイアログボックスを含むウィンドウは、どのようなものであれ
毎回ウィンドウハンドルは違います。
よって、FindWindow等のAPIで該当のウィンドウを探し、その
ウィンドウハンドルを得てからそのウィンドウにPostMEssage
なり、SendMessageなりを行うことになります。
一発技では、出来ません。
"名前を付けて保存"と言うのはダイアログ中のメッセージだと
思いますが、その場合のタイトルには何と表示されていますか?
FindWindou等のAPIでは、タイトルに表示されているテキストを
対象にするか、もしくはウィンドウのクラス名で検索すること
になっています。
クラス名を取得するには、一番いい方法は、SPY++しか無いよう
に思います。あとは、タイトルに表示されている文字列で検索
しウィンドウハンドルを得ることです。ウィンドウハンドルを
得ないことには、その先何もできません。
EnumWindou等でのウィンドウの列挙や、FindWindou等での検索
関係のAPIをインプリし、なんとか該当のウィンドウハンドルを
得ることに注力して下さい。
得た後は、PostMessageとか・・・やりたいことがやっと可能
になります。
以上。
岡田様
ダイアログボックスのタイトル(見た目に現れている)は、
”名前を付け保存””です。
プログラムは、GetWindowTextからNAMEを取得し、
”名前を付け保存”のダイアログボックスであること
を確認して、OK時に、取得している当該のダイアログ
ボックスの値をhWndにしてPostMessageでmsgを送る形です。
”名前を付け保存”には、保存とキャンセルの2つのボタンが
あり、”保存”をさせるべく送り込むmsgコードを当っています。
岡田様
SPY++は持っていませんが、次の値を得て
います。
ここで保存のボタンを押す形です。
msgコードでボタン押しが可能なのか?
WM_COMMANDをmsgにした時、パラメータ値
は何か?
で付き当っております。
よろしく願います。
<当該ダイアログボックスWINDOW>
キャプチャ ”名前を付けて保存”
クラス名 #32770
<その中の保存ボタン>
キャプチャ 保存(&S)
クラス名 BUTTOM
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 )
お試し下さい。
以上。
横から失礼します。
私も以前、SPY++の入手方法を捜していて、別の掲示板で教えていただきました。
もし、タッキーさんがVB6 Pro edition 以上をお持ちでしたら
CDの中の \Common\Tools\VB\spyディレクトリに入っています。
(御存じでしょうが、プログラム名は spyxx.exe です。)
また、Freeで公開されている互換ソフトもあります。(英語版ですけど)
http://www.windows-spy.com/
Winspectorと言うソフトです。
私の場合、こちらの方をよく使用しています。
御参考になれば幸いです。
岡田様
いろいろアドバイスありがとうございました。
見真似でやっており、甘く考えていました。
HPからファイルをダウンロードする際に、”ファイルのダウンロード”のダイアログ(クラス番号 同じく#32770)が出てきますが、保存処理をVBAで行う例として
PostMessage(hWnd,&H111,&H1144,&H110596)のコードがあり、
試しにやってみると上手く行ったことから、次に出てくるダイアログも何らか定数
があるかと思い、探し(聞き)まくっておりました。
&H111の解釈は出来たのですが、wParam,lParamの出所の見当つかず、困って
いた次第です。
尚、WM_COMMAND,IDOKではNGで &H111,1だとOKでした。
IMA様
レスありがとうございました。
今は、APIビュアーを組み込んだレベルです。
VCまでには、まだ程遠いのです。
解決なさったので・・・
> 尚、WM_COMMAND,IDOKではNGで &H111,1だとOKでした。
それは、ただ、Private でも、Public でも、変数等の宣言
をなさっていなかったダケ・・・と思いますが。
宣言していれば、結果はOKなはず!
以上。