これにはレジストリは必要ありません。OpenAs_RunDLLA
Shell32.dll でGetProcAddress を使用する必要があります。それに関するドキュメントは見つかりませんが、それを次のように定義する Delphi コードがあります。
SHOpenWithProc = procedure(HWND: THandle; HInstance; THandle;
CmdLine: PChar; CmdShow: Integer);
HWND、HInstance、および CmdShow は、かなりよく知られているはずです。Delphi の PChar は(ANSI バージョン - 以下を参照)NULL で終了する(C スタイル)文字列へのポインタに対応し、Unicode バージョンでは NULL で終了する WSTR に対応します。procedure
Delphi では C に対応しvoid someproc();
ます。はCmdLine
完全修飾ファイル名を指す必要があるため、Windows は [開く] ダイアログで何を提供するかを認識します。
Java でGetProcAddress
(および前の呼び出しを)どのように使用するかはわかりませんが、これで始められるかもしれません。LoadLibrary
ロードされる関数は ANSI バージョンであることに注意してください。WideChar (Unicode) の場合は、OpenAs_RunDLLW
代わりにバージョンをロードし、それに応じて CmdLine パラメータを調整する必要があります (ワイド バージョンでコードを試したことはないと思います)。
注: これも役立つ場合があります。これは、API の ShellExecute 関数を介してOpenAs_RunDLLを使用することに関する MSDN の記事です。