SHGetPathFromIDList(Delphi)-误报问题

时间:2018-07-03 20:11:47

标签: delphi antivirus folderbrowserdialog false-positive

我正在使用Kaspersky Internet Security2018。但是,当我使用这些代码编译Delphi应用程序时,我的防病毒应用程序将删除已编译的exe:

function BrowseForFolder(var dpFolder: String; dpTitle: String): Boolean;
var
  dpBrowseInfo: TBrowseInfo;
  dpDisplayName: array[0..255] of Char;
  dpItemIDList: PItemIDList;
begin
  FillChar(dpBrowseInfo, sizeof(dpBrowseInfo), #0);
  with dpBrowseInfo do begin
    hwndOwner := Application.Handle;
    pszDisplayName := @dpDisplayName[0];
    lpszTitle := PChar(dpTitle);
    dpItemIDList := SHBrowseForFolder(dpBrowseInfo);
    ulFlags := BIF_RETURNONLYFSDIRS and BIF_VALIDATE;
  end;
if Assigned(dpItemIDList) then begin
  if SHGetPathFromIDList(dpItemIDList, dpDisplayName) then begin
    dpFolder := dpDisplayName;
    Result := True;
  end else begin
    Result := False;
  end;
end;
end;

除了将我的应用添加到白名单外,我还应该怎么做才能弹出“浏览文件夹”菜单?

1 个答案:

答案 0 :(得分:0)

我尝试了每种“浏览文件夹”对话框类型,并且意识到我的防病毒软件仅允许Vcl.FileCtrl.TSelectDirExtOpt(它也讨厌其他FileCtrl对话框)。

所以,我这样解决了自己的问题:

procedure TForm1.gözatDüğmesiClick(Sender: TObject);
  begin
    if not (menü4CB = '1') then begin
      if not (SelectDirectory('Kurulum programının yedekleneceği klasörü seçin', 
        GetSpecialFolderPathFromCSIDL($0011), adres, [sdNewFolder, sdNewUI], nil) = False) then begin
           adresÇubuğu.Text := adres;
      end else begin
      end;
    end;
end;

仍然感谢雷米·勒博(Remy Lebeau)对我的关心。