Проблема с WMDropFiles на win7 - PullRequest
       17

Проблема с WMDropFiles на win7

3 голосов
/ 02 сентября 2011

Я реализовал следующую процедуру, и она работает правильно, когда я компилирую ее на своем компьютере под управлением Windows Vista, компьютер № 1. Если я поделюсь созданным файлом .exe на другой компьютер, на котором работает win7, компьютер №2, он тоже будет работать нормально. Проблема в том, что когда я позволяю компьютеру №2 скомпилировать его, он не просто распознает, что что-то пропало в приложении. Там нет никакого ответа в этом коде. Он построен и скомпилирован без ошибок и предупреждений. Я искал в сети некоторое время, не находя ничего, что объясняет, почему это происходит или кто-то еще с этой проблемой.

Оба компьютера используют Delphi 2010 с одинаковыми установленными компонентами.

  1. Это способ, позволяющий пользователю добавлять файлы в приложение? Если нет, то как это должно быть сделано сегодня?
  2. Есть идеи, почему он работает, когда он компилируется на компьютере № 1, но не на компьютере № 2? (Программа правильно работает на обоих компьютерах при компиляции на компьютере № 1)

Любая помощь или комментарий высоко ценится.

procedure TfMainForm.WMDROPFILES(var msg: TWMDropFiles);
const
  MaxLength = 255;

var
  nFiles : integer;
  i : integer;
  fileName : array [0..MaxLength] of char;
  fileNames : TStringArray;

begin
  // Get number of files dropped
  nFiles := DragQueryFile(msg.Drop,  $FFFFFFFF, fileName, MaxLength);

  // Get filenames
  SetLength(fileNames, nFiles);
  for i := 0 to nFiles - 1 do begin
    DragQueryFile(msg.Drop, i, fileName, MaxLength);
    fileNames[i] := fileName;
  end;

    // Add files
  projectHandler.addFiles(fileNames);

  //release memory
  DragFinish(msg.Drop);
end;

Ответы [ 2 ]

5 голосов
/ 02 сентября 2011

Я собираюсь предположить, что если вы работаете из IDE на компьютере № 2. Могу поспорить, что если вы компилируете на компьютере № 2, но запускаете исполняемый файл из проводника, а не из IDE, это работает. Последняя часть головоломки состоит в том, что я уверен, что вы используете IDE на компьютере № 2 в качестве администратора.

В Vista и Windows 7 нельзя отправлять сообщения процессу с более высоким уровнем целостности. Если ваш процесс запускается от имени администратора, он будет иметь более высокий уровень целостности, чем проводник, и поэтому не будет принимать удаленные файлы.

Если мои предположения верны, я рекомендую прекратить запуск Delphi с правами администратора, это не нужно.

Что касается того, является ли WM_DROPFILES разумным подходом, я не вижу проблем с его использованием.

1 голос
/ 02 сентября 2011

В http://www.web -developer.de / content / download / 7387/137496 / file / Listings.zip вы можете найти пример, написанный на Delphi XE (также компилируется с D2010). Подпапка «2_WmDropFiles» содержит проект «WmDropFiles.dpr», в котором показано, как приложение, которое работает с повышенными правами, может получать файлы из приложения, которое не работает с повышенными правами. Комментарии и т. Д. На немецком языке, поэтому, пожалуйста, используйте Google переводчик, если сомневаетесь.

Надеюсь, это поможет, Olaf

...