Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ShellExecute Как отловить его ошибки? 
:(
    Опции темы
brick-rs
Дата 28.7.2004, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.5.2004
Где: г. Мыски, Кемеров ская обл.

Репутация: нет
Всего: нет



Подскажите плиз, использую ShellExecute для открытия разных доков, и т.п... Вопрос встал как отловить его ошибки? причем как таковыми ошибками они не вываливаааются, но если при открытии дока что то у него не получилось то он просто молчит, если все нормально то он открывает все Ок. На предмет существования дока проверку делаю.
Для инфо: Делфи 6, конкретно интересует случай с открытием скажем дока на кт не установленно соответствующее приложение?
использую такой код:
pt:=StrPCopy(zFileName,Grid1.DataSource.DataSet.FieldByName('pathorig').AsString);
if not FileExists(pt) then showmessage('Документ по либо отсутствует, либо перемещен.')
else ShellExecute(Handle, 'open',pt,nil,nil, SW_SHOWNORMAL);

Это сообщение отредактировал(а) brick-rs - 28.7.2004, 03:10
PM MAIL WWW ICQ   Вверх
Cashey
Дата 28.7.2004, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: нет
Всего: 60



Функция возвращает дескриптор открытого приложения. Если возвращаемое значение меньше или равно 32, это указывает на ошибку. Для Windows старше 95-го эти константы означают:
0 Системе не хватает памяти, выполняемый файл испорчен или произошло ошибочное перераспределение памяти.
2 Файл не найден.
3 Путь не найден.
5 Была попытка динамически связаться с задачей, была ошибка многопроцессорного выполнения или ошибка защиты сети.
6 Библиотека требует отдельных сегментов данных для каждой задачи.
8 Недостаточно памяти для запуска приложения.
10 Ошибочная версия Windows.
11 Ошибочный выполняемый файл. Или это не приложение Windows, или ошибка в .exe файле.
12 Приложение спроектировано для другой операционной системы.
13 Приложение спроектировано для MS-DOS 4.0.
14 Неизвестный тип выполняемого файла.
15 Попытка запустить приложение, работающее только на более ранних версиях Windows.
16 Попытка запустить второй экземпляр приложения, содержащего сегменты данных, не помеченные "только для чтения".
19 Попытка запустить архивированный файл. Файл должен быть разархивирован, прежде чем его можно будет загрузить.
20 Ошибочный файл одной из DLL, требуемой для приложения.
21 Приложение требует 32-битного расширения Windows.
31 Нет приложения, связанного с файлом указанного типа, или нет файла, связанного с указанной операцией.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
brick-rs
Дата 28.7.2004, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.5.2004
Где: г. Мыски, Кемеров ская обл.

Репутация: нет
Всего: нет



а вот собственно в том то и весь вопрос как этот дескриптор проверить? не знаю еще не разу не сталкивался
sample.gif плиз можно в кратце
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 28.7.2004, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



brick-rs Все просто:

Код
procedure TForm1.Button1Click(Sender: TObject);
var
 ExecResult: THandle;
begin
 ExecResult := ShellExecute(Handle, 'open', 'E:\Test.txt', nil, nil, SW_SHOWNORMAL);
 if ExecResult < HINSTANCE_ERROR then
   case ExecResult of
     0:
       ShowMessage('The operating system is out of memory or resources.');
     ERROR_FILE_NOT_FOUND:
       ShowMessage('The specified file was not found.');
     ERROR_PATH_NOT_FOUND:
       ShowMessage('The specified path was not found.');
     ERROR_BAD_FORMAT:
       ShowMessage('The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).');
     <и т.д.>
   end;
end;

Все константы есть в хелпе



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Vit
Дата 28.7.2004, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Используй CreateProcess - гораздо больше возможностей, и по отлову ошибок в том числе...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
saw666
Дата 15.10.2016, 09:51 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.10.2016

Репутация: нет
Всего: нет



Цитата(Cashey @ 28.7.2004,  06:59)
Для Windows старше 95-го эти константы означают:
0    Системе не хватает памяти, выполняемый файл испорчен или произошло ошибочное перераспределение памяти. 
2  Файл не найден. 
3  Путь не найден.
5    Была попытка динамически связаться с задачей, была ошибка многопроцессорного выполнения или ошибка защиты сети. 
6    Библиотека требует отдельных сегментов данных для каждой задачи. 
8    Недостаточно памяти для запуска приложения. 
10    Ошибочная версия Windows. 
11    Ошибочный выполняемый файл. Или это не приложение Windows, или ошибка в .exe файле. 
12    Приложение спроектировано для другой операционной системы. 
13    Приложение спроектировано для MS-DOS 4.0. 
14    Неизвестный тип выполняемого файла. 
15    Попытка запустить приложение, работающее только на более ранних версиях Windows. 
16    Попытка запустить второй экземпляр приложения, содержащего сегменты данных, не помеченные "только для чтения". 
19    Попытка запустить архивированный файл. Файл должен быть разархивирован, прежде чем его можно будет загрузить. 
20    Ошибочный файл одной из DLL, требуемой для приложения. 
21    Приложение требует 32-битного расширения Windows. 
31    Нет приложения, связанного с файлом указанного типа, или нет файла, связанного с указанной операцией.

Специально зарегистрировался чтобы поблагодарить за это сообщение. Да, даже в 2016 году оно оказалось полезным. Спасибо! )))
PM MAIL   Вверх
navodri
Дата 24.5.2018, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 26.10.2007

Репутация: нет
Всего: -1



Вот так просто:

Код

if ShellExecute(Handle, 'open', 'E:\Test.txt', nil, nil, SW_SHOW) < 32 then
           MessageBox(Handle, 'Невозможно выполнить ShellExecute!', Ошибка открытия', MB_OK);

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1851 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.