Delphi 如何在Windows设置';文件关联页

Delphi 如何在Windows设置';文件关联页,delphi,winapi,windows-10,Delphi,Winapi,Windows 10,我正在尝试将一个特定的文件类型(例如doc)与我的应用程序关联。我目前正在使用iaapplicationactivationmanager来执行此操作,因为该方法不再适用于Win 8及更高版本,因此也是如此 当用户单击我的应用设置,然后选择“设为默认设置”时,将触发此关联。到目前为止,iaapplicationactivationmanager对我来说很有用,因为它模拟了当用户选择这样做时,Windows 10如何通过“设置->系统->默认应用->按文件类型选择默认应用”来设置应用程序的默认文件

我正在尝试将一个特定的文件类型(例如doc)与我的应用程序关联。我目前正在使用
iaapplicationactivationmanager
来执行此操作,因为该方法不再适用于Win 8及更高版本,因此也是如此

当用户单击我的应用设置,然后选择“设为默认设置”时,将触发此关联。到目前为止,
iaapplicationactivationmanager
对我来说很有用,因为它模拟了当用户选择这样做时,Windows 10如何通过“设置->系统->默认应用->按文件类型选择默认应用”来设置应用程序的默认文件类型

在打开“…->按文件类型选择默认应用程序”时,是否有方法以编程方式关注文件类型?或者更好的方法是,以编程方式启动该特定文件类型的“…->按文件类型选择默认应用程序->选择应用程序”对话框

示例代码:

procedure TForm1.Btn2Click(Sender: TObject);
const
  OPENSETTINGS = 'Windows.ImmersiveControlPanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel';
  PAGESETTINGSBYFILETYPE = 'page=SettingsPageAppsDefaults&target=SettingsPageAppsDefaultsFileExtensionView';

var
  pAAR: IApplicationActivationManager;
  pid: PDWORD;
  Res: HRESULT;

begin
  Res := CoCreateInstance(CLSID_ApplicationActivationManager, nil,
    CLSCTX_LOCAL_SERVER, IApplicationActivationManager, pAAR);

  if Succeeded(FRes) 
    pAAR.ActivateApplication(OPENSETTINGS, PAGESETTINGSBYFILETYPE, AO_NONE, pid)
  else
    ShowMessage('Failed!');
end;
例如,可以使用命令

page=SettingsAgeAppsDefaults&target=SettingsAgeAppsDefaultsFileExtensionView

可以扩展以滚动到并选择特定的文件类型,如

page=SettingsAgeAppsDefaults&target=SettingsAgeAppsDefaultsFileExtensionView&‌​文件类型=.doc'


??或者其他解决方案来完成同样的事情?

你想做什么?我试图通过编程方式关注特定的文件类型,在本例中,成功启动设置后它是一个.doc->按文件类型选择默认应用程序你总体上想做什么?创建文件关联?有一种官方记录的方法可以做到这一点。不要试图模仿用户;这不起作用,也不受支持。还是不顾用户的意愿,试图将自己强制为默认值?不,我不想创建新的文件关联。当用户单击“我的项目设置”框中的“将此应用设置为默认值”时,我正在尝试将我的项目关联为该特定文件类型的默认值。这仍然是用户的选择。我只是想尽量减少用户的点击次数来完成这个任务。这很好,但是您所尝试的仍然不是正确的方法,因为它很容易在Windows的未来版本中发生更改。MSDN在这方面没有帮助吗?