OpenDialogで縮小版(H)をデフォルトにしたい

解決


kyouichi  2012-02-28 22:06:59  No: 41727

D6_P+WinXP  お世話になります。
OpenDialogで表示メニューが選択できるようになっていますが、起動時にはいつも「一覧」表示になっています。これを起動時に常時「縮小版(H)」で表示させるように指定できるでしょうか?  よろしくお願いします。


Mr.XRAY  2012-02-28 22:52:46  No: 41728

こんにちは,Mr.XRAYです.

https://www.petitmonte.com/bbs/answers?question_id=3967
https://www.petitmonte.com/bbs/answers?question_id=1923

の記事の中の,
SendMessage(fhShellDll, WM_COMMAND, $702c, 0);

というのがあります.ここのコマンドの値を,$702D に変えてみてください.
動作確認はしていません.また,IE(Internet Explorer 7以降の環境では動作しません.


kyouichi  2012-02-28 23:43:39  No: 41729

Mr.XRAY様  いつもお世話になります。ご紹介いただいた

https://www.petitmonte.com/bbs/answers?question_id=1923
でやりましたらコピペしただけで上手くいきました。またWin7(64)でも問題なく動きました。(このソースコードでは最初から$702dになっていました。

procedure TForm1.OpenPictureDialog1FolderChange(Sender: TObject);
var
  ViewHandle: THandle;
begin
  ViewHandle := FindWindowEx(GetParent(OpenPictureDialog1.Handle), 0, 'SHELLDLL_DefView', nil);

  PostMessage(ViewHandle, WM_COMMAND, MAKEWPARAM($702d, 0), 0);
  Application.ProcessMessages;
  PostMessage(ViewHandle, WM_COMMAND, MAKEWPARAM($a006, 1), 0);
end;
こんない早く解決できるとは思いもよりませんでした。お礼申し上げます。


Mr.XRAY  2012-02-29 05:01:08  No: 41730

>またWin7(64)でも問題なく動きました。

あら,Windows 7環境ということは,IEは多分7以上ですよね.
前にテストした時には動作しなかったのですが,ハンドルの取得を間違えたのかも知れません.
動作することがわかっていれば,またテストしてみます.


kyouichi  2012-02-29 20:59:33  No: 41731

Mr.XRAY様  いつもお世話になります。

>IE(Internet Explorer 7以降の環境では動作しません.
自信がなくなり再度動かしてみましたが起動時に確かにサムネールが出ることは間違いありませんでした。開発環境はXP(SP3)+D6pです。
なおIEのバージョンをプロパティーで見てみると
ProgramFiles(x86)=9.00.8112.16421 749,568Bytes
ProgramFiles     =9.00.8112.16421 757.760Bytes
でした。  バージョンによって動作しないということはエラーが出て止まってしまうというものか、または単に「一覧」が出るというものでしょうか?  止まらないのであればこれで使いたいと思いますので動かない場合の症状など教えてください。ありがとうございました。


Mr.XRAY  2012-03-01 01:41:51  No: 41732

>バージョンによって動作しないということはエラーが出て止まってしまうというものか

いえ,前にテストした時は,コマンドを認識しないで,デフォルトの表示になってしまうだけでした.
エラーや例外で止まる現象ではありませんでした.
でもIE 9 で動作していることですので,私がその時テストした時のコーディングの間違いの
可能性大です.


Mr.XRAY  2012-03-01 02:06:14  No: 41733

こんにちは.Mr.XRAY

話は横道になりますが,この仕様はもちろん,マイクロソフトが公開しているわけではありません.
では,どうして知ることができのか?  という話です.

これは,WM_COMMANDというメッセージをフックして調べることができます.
もちろん,私が初めてやったわけではありません.stone96さんと同じようなことを考えた人
がいて,やったのだと思います.

したがって,将来,この方法は使えなくなる可能性はあるわけです.
ただ,マイクロソフト自身も,この機能を利用したアプリを開発していると考えても不思議はありません.
だから当分は使えると思っています.

フックというのは,プログラミングの中でも難しい部類になると思いますが,興味があったら
私のサイトにいろいろサンプルがあります.「難解」な記事が多いので恐縮ですが... (^^;

http://mrxray.on.coocan.jp/index.htm

以上,余計な余分な追加レスでした.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加