Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
d3rio
0 / 0 / 0
Регистрация: 05.04.2017
Сообщений: 2
1

Открыть ассоциированное приложение

05.04.2017, 15:51. Просмотров 363. Ответов 8
Метки нет (Все метки)

Доброго времени суток. Помогите пожалуйста с задачей, звучит она так: По нажатию кнопки “Открыть…” форма должна увеличится в размерах и на ней должны появится дополнительные 4 кнопки: “Открыть в Notepad”, “Открыть в Explorer”, “Открыть в Word”, “Открыть ассоциированное приложение”. Каждая из этих кнопок должна открывать файл, имя которого введено, с помощью указанного приложения. Половину программы нашел на просторах этого форуму, но не смогу доделать. У меня не получается сделать так что-бы открывало определенный файл через определенную программу.Помогите пожалуйста двоечнику. Прикрепляю саму программу.
0
Вложения
Тип файла: rar Программа.rar (484.4 Кб, 6 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2017, 15:51
Ответы с готовыми решениями:

Как открыть внешнее приложение в моей форме....
Всем привет.. Возникло маленькое неудобство с открыванием различных файлов, они...

Используя компоненты вкладки Dialog, создайте следующее приложение, позволяющее открыть рисунок, найти и заменить текст, изменить атрибуты шрифта, пом
Лабораторная работа

приложение(*) где по нажатию кнопки эти файлы распаковывались бы в директорию в которой лежит приложение(*)...
Есть 2 файла 222.pck 5556.dll нужно сделать приложение(*) где по нажатию кнопки...

Граф. приложение+библиотеки+консольное приложение! Не работает программа без использования консоли. Если использую, то всё прекрасно работает.
Ребята нужна помощь,все вроде сделал, но приложение начинает зависать при...

При попытке открыть Калькулятор пишет: не удаётся открыть приложение так как отключен контроль учётных запиcей
При попытке открыть Калькулятор пишет,что не удаётся открыть приложение так как...

8
Cold
84 / 84 / 65
Регистрация: 22.05.2014
Сообщений: 478
05.04.2017, 19:36 2
Delphi
1
ShellExecute(0, nil,'d:\Имя файла.расширение',nil,nil,1);
Добавлено через 1 минуту
в uses добавь ShellApi
1
d3rio
0 / 0 / 0
Регистрация: 05.04.2017
Сообщений: 2
16.05.2017, 23:40  [ТС] 3
Спасибо огромное)
0
BOGG ART
577 / 445 / 146
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
17.05.2017, 13:56 4
Статья: GunSmoker :: Почему вам не следует использовать ShellExecute(Ex) - там читаем статью по ссылке "В прошлый раз мы узнали" и подраздел "Как правильно делать".
0
DenNik
Непрофессионал
1801 / 1384 / 307
Регистрация: 26.07.2011
Сообщений: 7,822
17.05.2017, 15:39 5
BOGG ART, там рассуждается, почему не стоит использовать ShellExecute(Ex) для запуска программ, а не документов в ассоциированной программе.

Добавлено через 57 секунд
просто ТС может испугаться заголовка статьи, вдруг
0
BOGG ART
577 / 445 / 146
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
19.05.2017, 17:15 6
Там рассматривается всё. В том числе открытие документов/ссылок в ассоциированной программе.

Добавлено через 1 минуту
Хотя да, материал объёмный и сложный для новичка...
0
DenNik
Непрофессионал
1801 / 1384 / 307
Регистрация: 26.07.2011
Сообщений: 7,822
19.05.2017, 19:10 7
ну, я считаю, что для запуска документов в ассоциированной программе ShellExecute как раз более подходит, т.к. ты даешь системе задание "открыть документ" и пускай она сама ищет сопоставленное приложение. А если использовать CreateProcess, предназначенный исключительно для запуска исполняемых файлов, тут нужно сначала определить программу, при помощи которой хочется открыть документ и запустить ее, передав параметром путь к документу. Способ немного длиннее, единственное преимущество ощущается только тогда, когда нужно выбрать, при помощи какой программы открыть документ, ведь здесь уже не играет роли, какая программа соспоставлена с данным типом файлов
0
BOGG ART
577 / 445 / 146
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
20.05.2017, 19:56 8
Мне кажется вы не читали статью целиком... (вернее их там серия из трёх или четырёх штук)

Ну ок, процитирую выводы статьи прям тут...

Основные выводы:
  • Никогда не используйте ShellExecute;
  • Никогда не используйте WinExec;
Относящиеся к открытию документов/файлов:
  • Используйте ShellExecuteEx, если вам нужно открыть файл, не являющийся программой (например, архив, документ, музыку);
  • Используйте ShellExecuteEx, если вам нужно открыть файл, но вы не знаете, что это за файл (например, его имя вводится/указывается пользователем);
  • Используйте ShellExecuteEx, если вы хотите подражать оболочке (например, пишете файловый менеджер);
Остальные:
Кликните здесь для просмотра всего текста
  • Используйте CreateProcess, если вы хотите запустить конкретную программу (имя вам известно);
  • Используйте CreateProcess, если вы хотели использовать ShellExecute(Ex) и обнаружили, что вы передаёте имя исполняемого файла в третий параметр (например: ShellExecute(Handle, nil, 'cmd.exe', nil, nil, SW_SHOW));
  • Используйте CreateProcess, если вы не знаете имя программы, но точно знаете, что это программа (например, имя программы приходит из файла конфигурации);
  • Используйте CreateProcess, если у вас есть не имя программы, а командная строка;
  • Используйте ShellExecuteEx, если вам нужно запустить программу с элевацией (с использованием действия "runas");
  • Также используйте ShellExecuteEx с "runas", если CreateProcess вернул ERROR_ELEVATION_REQUIRED (= 740);
  • Используйте ShellExecuteEx, если вам нужно открыть гиперссылку (http или mailto);
  • Используйте ShellExecuteEx с SEE_MASK_INVOKEIDLIST для выполнения "динамических" действий, определяемых обработчиками контекстного меню.


А так же в связанной статье был дан пример обёртки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uses
  ActiveX, ShellApi;
 
procedure ShellExecute(const AWnd: HWND; const AOperation, AFileName: String; const AParameters: String = ''; const ADirectory: String = ''; const AShowCmd: Integer = SW_SHOWNORMAL);
var
  ExecInfo: TShellExecuteInfo;
  NeedUnitialize: Boolean;
begin
  Assert(AFileName <> '');
  NeedUnitialize := Succeeded(CoInitializeEx(nil, COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE));
  try
    FillChar(ExecInfo, SizeOf(ExecInfo), 0);
    ExecInfo.cbSize := SizeOf(ExecInfo);
    ExecInfo.Wnd := AWnd;
    ExecInfo.lpVerb := Pointer(AOperation);
    ExecInfo.lpFile := PChar(AFileName);
    ExecInfo.lpParameters := Pointer(AParameters);
    ExecInfo.lpDirectory := Pointer(ADirectory);
    ExecInfo.nShow := AShowCmd;
    ExecInfo.fMask := SEE_MASK_NOASYNC { = SEE_MASK_FLAG_DDEWAIT для старых версий Delphi }
                   or SEE_MASK_FLAG_NO_UI;
    {$IFDEF UNICODE}
    // Необязательно, см: transl-gunsmoker.ru/2015/01/what-does-SEEMASKUNICODE-flag-in-ShellExecuteEx-actually-do.html
    ExecInfo.fMask := ExecInfo.fMask or SEE_MASK_UNICODE;
    {$ENDIF}
     {$WARN SYMBOL_PLATFORM OFF}
    Win32Check(ShellExecuteEx(@ExecInfo));
    {$WARN SYMBOL_PLATFORM ON}
  finally
    if NeedUnitialize then
      CoUninitialize;
  end;
end;
Хотя я бы лучше не называл именем уже существующей функции... Во избежание путаниц. Было вот от коллег предложение назвать примерно типа CorrectShellExecute().
0
DenNik
Непрофессионал
1801 / 1384 / 307
Регистрация: 26.07.2011
Сообщений: 7,822
21.05.2017, 13:11 9
BOGG ART, ну зачем это буквоедство? я имел в виду ShellExecuteEx, когда писал
Цитата Сообщение от DenNik Посмотреть сообщение
что для запуска документов в ассоциированной программе ShellExecute как раз более подходит
я писал о сути, а не о конкретной функции
0
21.05.2017, 13:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2017, 13:11

Приложение написано на x64, не могу открыть это же приложение на Win32
Всем доброго дня или вечера. Помогите пожалуйста, я написал приложение си шарпе...

Открыть приложение
Хочу чтобы при нажатии на кнопку открылось приложение(qbasic) c параметром вот:...

Открыть приложение
Здравствуйте! Я пишу курсач по программированию. Написал игру на Unity (на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru