Открыть файл из Delphi

Тема в разделе "Delphi - Система", создана пользователем DenProx, 8 июл 2010.

  1. DenProx

    DenProx Гость

    Длброго времени суток. У меня такой вопрос: есть программка которая позваляет запускать программы, например открывается видео. Вопрос в том, возможно ли открыть файл с параметрами, типа - Открыть с помощью?

    Пример реализации: нужно запустить два видео файла с разными плеерами.
     
  2. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Нихрена не понял.

    Добавлено: а, короче
    uses
    shellapi;
    ======
    ShellExecute(0, 'open', 'путькекзе', 'параметры', nil, SW_SHOWNORMAL);
    Пс.
    или меняйте занятие, или учитесь задавать вопросы..
     
  3. DenProx

    DenProx Гость

    Да, извините, действительно сейчас прочитал, сам не понял что)))) утомленность сказывается....

    думаю на примере будет понятней:
    вот два способа которыми я пытаюсь открыть файл:
    1.
    Код (Delphi):
    procedure TfmOpen.btnOpenClick(Sender: TObject);
    var
    str: string;
    i: integer;
    begin
    str:=FileListBox.FileName;
    ShellExecute(0,'open',PChar(str),'','',SW_SHOW);
    fmProgress.ShowModal;
    Close;
    end;
    этот просто открывате файл, программой которая стоит по умолчанию в Винде. Например открываем видео файл, он открывается Media Player Classic.

    2.
    Код (Delphi):
    procedure TfmOpen.Button1Click(Sender: TObject);
    {$define WIDE} // если Unicode
    var
    cmdLine, fName: {$ifdef WIDE}WideString{$else}string{$endif};
    si: TStartupInfo;
    pi: TProcessInformation;
    begin
    cmdLine := '"C:\Program Files\Light Alloy\LA.exe" /Play ';
    fName  := '"'+ FileListBox.FileName +'"';
    // WinExec(PChar(cmdLine + fName), SW_SHOW); // только для string

    FillChar(si, SizeOf(si), #0);
    with si do begin
    cb := SizeOf(si);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_SHOW;
    end;

    if {$ifdef WIDE}CreateProcessW{$else}CreateProcessA{$endif}(
    nil,                    // lpApplicationName,
    {$ifdef WIDE}pWideChar{$else}pChar{$endif}(cmdLine + fName), // lpCommandLine,
    nil,                    // lpProcessAttributes,
    nil,                    // lpThreadAttributes,
    True,                 // bInheritHandles,
    0,                   // dwCreationFlags
    nil,                    // lpEnvironment,
    nil,                    // lpCurrentDirectory,
    si,                  // lpStartupInfo,
    pi) then begin                  // lpProcessInformation
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    end;
    end;
    этот способ открывает с помощью нужной программы, которую укажем... но он не может открыть файл по ярлыку....

    вот вопрос, в том как сделать открытие файла на подобии второго способа, но чтобы он ярлык тоже мог открывать...

    на данный момент, если открыть ярлык, от тогоже видео, то программа в итоге пытается открыть ярлык, как отдельный файл, естественно выходит ошибка...

    вот, как то так...
     
  4. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    ну так вы посмотрите свой первый вариант. ВЫ там передаете не то и не так. В моем посте я же написал вам..
     
  5. DenProx

    DenProx Гость

    почему не так... почти ни какой разници по моему...
     
  6. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    смотрите внимательно..
     
  7. DenProx

    DenProx Гость

    ну вот ваш:

    ShellExecute(0, 'open', 'путькекзе', 'параметры', nil, SW_SHOWNORMAL);

    вот мой:

    ShellExecute(0,'open',PChar(str),'','',SW_SHOW);


    у меня PChar(str) - это путь к *.ехе, параметры пустые, nil - отсутствует и SW_SHOWNORMAL от SW_SHOW не многим отличается, что в общем то на результат хоть как не влияет...

    где здесь указывать, с каким приложением нужно открыть?
     
  8. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    ShellExecute(0, 'open', 'путь_к_программе_которой_открывать_файл', 'файл_который_этой_программой_надо_открыть', nil, SW_SHOWNORMAL);
    Так понятнее?
     
  9. DenProx

    DenProx Гость

    Понятнее, но всеравно не работает...

    вот что я пишу:
    Код (Delphi):
    ShellExecute(0,'open','C:\Program Files\Light Alloy\LA.exe',PChar(str),nil,SW_SHOWNORMAL);
    открывается LA, но файл найти не может. Попробывал проверить путь "str", вывел в сообщение, путь нормальный, полный...

    что можете посоветовать?
     
  10. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    сначала
    str="+str+";
    а потом
    PChar(str);
    Попробуйте так, т.е. добавить кавычки.
     
  11. DenProx

    DenProx Гость

    да помогло, но... теперь ошибка такая же как и при использовании CreateProcess (мой второй пример), а именно, LA ярлык открывает как отдельный файл...
     
  12. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    if fileext(str)='lnk' then
    begin
    ShellExecute(0,'open','ВАШ_ЯРЛЫК','','',SW_SHOW);
    end
    else
    было выше
     
  13. DenProx

    DenProx Гость

    ругается на - fileext(str)
     
  14. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Ну а самостоятельно посмотреть функцию никак? Очевидно же, что она делает!
    ExtractFileExt() там.
     
  15. DenProx

    DenProx Гость

    как же я могу знать... если я только учусь...?

    темболее, мы вернулись к тому, что было у меня в первом прмере...


    ShellExecute(0,'open','ВАШ_ЯРЛЫК','','',SW_SHOW);

    открывает, но со стандартным плеером... как у меня и работало, до того как я создал эту тему...
     
  16. EdgarWine

    EdgarWine Гость

    Хм... Поясните что ваша программа конкретно должна делать? Мне вот почему-то показалось что вы хотите чтоб файлы (например avi) открывались вашей программой по умолчанию...
    Тогда при запуске нужно открывать файл имя которого в ParamStr(1)...
     
  17. DenProx

    DenProx Гость

    Вопрос уже решен, т.е. не освсем, но смысл в том что, так как мне нужно нельзя сделать на сегодняшни день....
     
  18. DenProx

    DenProx Гость

    ни чего и не нужно говорить, просто ярлык из подмоей прораммы нужно открыть не простой, а измененный программой UltraMon...
     
Загрузка...

Поделиться этой страницей