環境はWindowsXP Delphi6Personalです。
スライドショーを造っていますが難しいです。
エクスプローラーで画像ファイルをダブルクリックすると
関連づけしていないと、「Windows画像とFAXビューアー」というのが起動して同一フォルダ内ならスライドショーが出来ますが、
このコンポーネントにプログラムからファイルパスを送り表示させたり出来ないでしょうか。
よろしくお願いします。
コマンドラインならこれで表示できます
C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen 画像ファイル(フルパスで)
Windows XP
APIを使うならこんな感じ
var
Path: string;
begin
if OpenPictureDialog1.Execute then
begin
Path :='shimgvw.dll,ImageView_Fullscreen '+ OpenPictureDialog1.FileName;
ShellExecute(Handle, 'OPEN', 'RunDLL32.exe', PChar(Path), nil, SW_NORMAL);
end;
end;
仕事人さん、みんみんさん、うまくいきました。ありがとうございます。
仕事人さんのプログラムに引数として渡して実行するのだろうかと
いろいろやっていましたが出来なくて、
みんみんさんのShellExecute(をみて同じようなことを書いてあったので
これでWindowsに処理させるのだなと解りました。
出来れば、ビューワーが前画面で開いてくれれば万々歳なのですが・・・。
もし解りましたら教えてくださいませんか。
PersonalはShellExecuteのヘルプがでてきませんので解りませんでした。
ありがとうございました。一歩前進です。
動画のWindows Media Playerのヘルプやサイトは見つけられましたので
ShellExecute(formMDI.Handle, 'open', PChar(FileNamePath+#0),nil, nil, SW_SHOW);でファイルパスを変えたら次々と動きました。
では。
春子:「"Windows 画像とFAXビューア"って、フォルダの指定も出来るみたいね」
海都:「うん、フォルダを指定した場合は、中の最初の画像が表示される」
真琴:「じゃぁ、最初に"マイピクチャ"フォルダを開くようにしておくと便利よ」
春子:「まぁね、それもいいかも」
真琴:「でもぉ、"マイピクチャ"フォルダって、ユーザごとに違うよね? どう指定したらいいの?」
春子:「そういう場合は、環境変数を使えばいいのよ、マコト」
真琴:「えっ、環境変数?」
海都:「あぁ、それも一つの方法だけど…、'%UserProfile%'がユーザの環境変数だよ」
真琴:「その文字列をフォルダ指定で使えばイイってコト? カイトさん」
海都:「いや、そういうワケにはいかないんだ、マコっちゃん、パスに変換するAPIが用意されてる、こう…」
procedure TForm1.Button1Click(Sender: TObject);
var
szPath: array[0..MAX_PATH] of Char;
szParam: array[0..MAX_PATH] of Char;
begin
if ExpandEnvironmentStrings('%UserProfile%', szPath, MAX_PATH) = 0 then exit;
StrCat(szPath, '\My Documents\My Pictures');
if ExpandEnvironmentStrings('%SystemRoot%', szParam, MAX_PATH) = 0 then exit;
StrCat(szParam, PChar('\System32\ShImgVw.dll,ImageView_Fullscreen '+ szPath));
Caption := szParam; // パラメータ確認
ShellExecute(Handle, 'OPEN', 'Rundll32.exe', szParam, nil, SW_SHOW);
end;
真琴:「ねぇ、フォルダ指定が出来るんならぁ、スライドショーが自動的に始まるとイイよね」
春子:「マコト、F11キー押してみてごらん」
真琴:「ん?押したよ、…あ、全画面でスライドショーだ、…そっか、ワカッタよ、アタシ」
春子:「そう?」
真琴:「プログラムで、F11のキーコードをこのウィンドウに送ればいいンでしょ?」
海都:「うん、…ちなみに、このビューアのクラス名は'ShImgVw:CPreviewWnd'」
真琴:「それなら、こうしてぇ…よし、…あれ? コード書いて実行しても、スライドショー始まらないよ」
海都:「マコっちゃん、画像ビューアが起動するのにチョット時間かかるから、1秒くらい待った方がいいかも」
真琴:「あっ、カイトさん、それ正解! Sleep(1000)で1秒待ったら、バッチリOK!」
ShellExecute(Handle, 'OPEN', 'Rundll32.exe', szParam, nil, SW_SHOW);
Sleep(1000);
hw := FindWindow('ShImgVw:CPreviewWnd', nil);
SendMessage(hw, WM_KEYDOWN, VK_F11, 0);
SendMessage(hw, WM_KEYUP, VK_F11, 0);
海都:「マコっちゃん、できたね」
真琴:「イェ〜い」
春子:「…だけど、ヒロミくん戻るの遅いよね、さっきからズ〜ット待ちぼうけ…」
海都:「アイツ、またどっかで道草食ッてるな」
真琴:「美味しい草なら、今夜のおかずに、ナンて^^?」
春子:「マコト、知ってる? ドクダミってテンプラにしたりするとケッコウ美味しいんだよ」
真琴:「そうなの? フキノトウやゼンマイなんかは有名だよね、それとタラの芽も」
春子:「あとは、タンポポやヨモギもね、ほかにもまだある?カイトさん」
海都:「ぁ、あの、そういうコトじゃなくて…」
美味しい草なら さんありがとうございます。
もしかして、過去ログでメディアプレイヤーを調べているときのサイズ変更を教えておられた方ですね。静止画はWindows 画像とFAXビューアで動画はMSプレイヤーでやりたいと思っています。
おかげさまで前方が明るくなりました。
ありがとうございました。
ツイート | ![]() |