Показать сообщение отдельно
  #2  
Старый 08.02.2019, 20:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

проверяй не прямой возврат из ShellExecuteEx, а значение в hInstApp > 32.
В MSDN написано, что по факту управление передается Shell Extention, т.е. сама функция может и отработать, а вот то, кому она передала управление - нет. Т.е. код должен выглядеть как-то так:
Код:
var
  rc : Boolean;
...
rc := ShellExecuteEx(@ShellExecuteInfo)
if (rc = False Or ShellExecuteInfo.hInstApp <=32)  then
    begin
       ShowMessage('bad');
         Application.MessageBox(PChar(SysErrorMessage(GetLastError)), 'Ошибка', MB_OK or MB_ICONERROR);
      case ShellExecuteInfo.hInstApp of
        SE_ERR_FNF: ShowMessage('Файл не найден');
        SE_ERR_PNF: ShowMessage('Путь не найден');
        SE_ERR_ACCESSDENIED: ShowMessage('Доступ к файлу запрещен');
        SE_ERR_OOM: ShowMessage('He хватает памяти');
        SE_ERR_DLLNOTFOUND: ShowMessage('Не найдена необходимая DLL');
        SE_ERR_SHARE: ShowMessage( '-Файл занят другим пользователем');
        SE_ERR_ASSOCINCOMPLETE: ShowMessage('Не полная информация о связанном с файлом приложении');
        SE_ERR_DDETIMEOUT: ShowMessage('Истекло время на выполнение операции DDE');
        SE_ERR_DDEFAIL: ShowMessage('Ошибочная операция DDE');
        SE_ERR_DDEBUSY: ShowMessage('Операция DDE занята');
        SE_ERR_NOASSOC: ShowMessage('Нет приложения, связанного с файлом');
         Else ShowMessage('Неизвестная ошибка...');
      end
 
    end
    else ShowMessage('All right');
...
Ответить с цитированием