Вам не нужен реестр для этого. Вам нужно использовать GetProcAddress на OpenAs_RunDLLA
в Shell32.dll. Я не могу найти какую-либо документацию для этого, но у меня есть код Delphi, который определяет его как
SHOpenWithProc = procedure(HWND: THandle; HInstance; THandle;
CmdLine: PChar; CmdShow: Integer);
HWND, HInstance и CmdShow должны быть достаточно знакомы. PChar в Delphi соответствует (версия ANSI - см. Ниже) указателю на строку с нулевым символом в конце (в стиле C), а в версии Unicode - на WSTR с нулевым символом в конце. procedure
в Delphi соответствует C's void someproc();
. CmdLine
должен указывать на полное имя файла, поэтому Windows знает, что предложить в диалоговом окне «Открыть с помощью».
Я не уверен, как бы вы использовали GetProcAddress
(и предыдущий LoadLibrary
вызов) в Java, но это может помочь вам начать.
Обратите внимание, что загружаемая функция является версией ANSI; для WideChar (Unicode) вместо этого вы захотите загрузить версию OpenAs_RunDLLW
и соответствующим образом настроить параметр CmdLine (я думаю - я не пробовал код в широкой версии).
ПРИМЕЧАНИЕ: это тоже может помочь. Это статья MSDN об использовании OpenAs_RunDLL через функцию API ShellExecute.