2

Windows 8 で、古い Windows 7 の画像ビューアーを表示するために以下のコードを実行しようとしましたが、エラーが返されます。Windows 8 では C:\Program Files (x86)\Windows Photo Viewer\PhotoViewer.dll を見つけることができますが、これは新しい Windows 8 メトロ アプリだと思います。古い W​​indows Picture Viewer は「c:\windows\system32\shimgvw.dll」だと思います。Metro ではなくデスクトップ アプリケーション スタイルで画像をプレビューしたいと思います。

両方を試しましたが、どちらもファイルに関連付けられたプログラムがないことを返しますか? 私は何を台無しにしていますか?

var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile, ParamString, StartInString: string;

ExecuteFile:='c:\windows\system32\shimgvw.dll';
FillChar(SEInfo, SizeOf(SEInfo), 0) ;
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do begin
  fMask := SEE_MASK_NOCLOSEPROCESS;
  Wnd := Application.Handle;
  lpFile := PChar(ExecuteFile);
  nShow := SW_SHOWNORMAL;
  lpParameters := PChar('ImageView_Fullscreen');
end;
if ShellExecuteEx(@SEInfo) then begin
repeat
   Application.ProcessMessages;
   GetExitCodeProcess(SEInfo.hProcess, ExitCode) ;
 until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
   ShowMessage('Windows Picture Viewer terminated') ;
 end
    else ShowMessage('Error starting Windows Picture Viewer') ;

私は以前に ShellExecuteEx を使用したことがないので、コードの基礎はhereから来ました。

4

1 に答える 1

6

shimgvw.dllDLLです。DLL を直接実行することはできません。DLL をロードし、その中でエクスポートされた関数を呼び出す必要があります。

Windows 7 システムのレジストリを見ると、Explorer が Photo Viewer を呼び出すために次のように動作することがわかります。

%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1

rundll32.exeは、DLL をロードしてその中の関数を呼び出すためだけに存在する、Windows に付属のツールです。したがって、これを行うために活用rundll32.exeするか、 で DLL をロードしLoadLibrary()、関数 export を見つけてGetProcAddress()自分で関数を呼び出すことができます。

PhotoViewer.dll(また、Windows 7 では、ではなくフォト ビューアーが含まれていることにも注意してくださいshimgvw.dll。Windows 8 での状況はわかりません)。

于 2013-09-30T19:54:03.210 に答える