Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как программно открыть Acrobat Reader ?

382  1 2 все
  scorpi_ коренной житель19.02.07 22:53
NEW 19.02.07 22:53 
в ответ kashej 19.02.07 22:12
ShellExecute вообще-то правильнее. Ибо юзеру виднее, чем он хочет смотреть данный файл. Может у него Foxit какой-нибудь?
Меня всегда бесили программы, которые открывают IE, вместо того чтобы воспользоваться ShellExecute, в результате чего открылся бы Firefox...
#21 
Такой-сякой гость19.02.07 23:04
Такой-сякой
NEW 19.02.07 23:04 
в ответ scorpi_ 19.02.07 22:53
Если не хочешь сам запускать CreateProcess, то можешь перепоручить это функции ShellExecute, она из-под себя сама запускает CreateProcess.
Я вам один умный вещь скажу - но только вы не обижайтесь...
#22 
  scorpi_ коренной житель19.02.07 23:08
NEW 19.02.07 23:08 
в ответ Такой-сякой 19.02.07 23:04
Я что-то недопонимаю, для чего здесь этот твой постинг? Я произвожу впечатление человека не знающего WIN32 API? Или это неясно из предыдущих постингов?
#23 
Такой-сякой гость19.02.07 23:19
Такой-сякой
NEW 19.02.07 23:19 
в ответ scorpi_ 19.02.07 23:08
Это был твой первый постинг который я прочитал вообще. Я и понятия не имею пока о твоих АПИшных познаниях. Рассуди сам. Человеку нужно просто тупо запустить пдф файл. И все. Ему не нужно возиться с ассоциациями файлов, кому что запускать и т.д... поэтому прямое и простое решение это CreateProcess, а ShellExecute во многих случаях будет работать а в 2-3 возьмет и откроет фолдер или еще чего хуже стартанет ФаерФокс
Я вам один умный вещь скажу - но только вы не обижайтесь...
#24 
kashej посетитель19.02.07 23:25
kashej
NEW 19.02.07 23:25 
в ответ scorpi_ 19.02.07 22:53
Зависит от ситуации. Если важно открыть файл только той программой, которую определил пользователь для этого типа данных, то можно управиться и с помощью ShellExecute.
Ну а если надо открыть файл другой программой, то - CreateProcess.
Вообще в таких ситуациях я включаю интуицию. ShellExecute ассоциируется с "Выполнить в терминале", а CreateProcess - "создать процесс", что в итоге-то и нужно.
http://denis-aristov.ucoz.com
#25 
Simple Nothing is f*cked20.02.07 13:00
Simple
NEW 20.02.07 13:00 
в ответ kashej 19.02.07 23:25
Shell в данном случае ничего общего с терминалом не имеет.
#26 
Simple Nothing is f*cked20.02.07 13:01
Simple
20.02.07 13:01 
в ответ scorpi_ 19.02.07 23:08
Just take it easy, man... (c) :-D
#27 
Simple Nothing is f*cked20.02.07 13:01
Simple
NEW 20.02.07 13:01 
в ответ digital.pilot 19.02.07 21:56
Ненавижу разжевывать до молекул, собственная инициатива тоже должна быть ;)
#28 
kashej посетитель20.02.07 13:07
kashej
NEW 20.02.07 13:07 
в ответ Simple 20.02.07 13:00
Как же не имеет? Если не указать определенный параметр, то запустится не только Акробат, но и окно терминала. Т.е. терминал будет отцовским процессом Акробата. А это лишняя трата ресурсов.
http://denis-aristov.ucoz.com
#29 
kashej посетитель20.02.07 13:13
kashej
NEW 20.02.07 13:13 
в ответ kashej 20.02.07 13:07
CreateProcess это системный вызов операционной системы, чтобы создать процесс. Все остальное лишнее.
ShellExecute вообще какая-то "benutzerfreundliche Version"
http://denis-aristov.ucoz.com
#30 
Simple Nothing is f*cked20.02.07 13:19
Simple
NEW 20.02.07 13:19 
в ответ kashej 20.02.07 13:07
ShellExecute( NULL, "open", "E:\\KBV\\C10_Schnittstellenbeschreibung_SDDA.pdf", NULL, NULL, SW_SHOWNORMAL );

Никакого терминала.

#31 
Gaidzin знакомое лицо21.02.07 15:57
Gaidzin
NEW 21.02.07 15:57 
в ответ Такой-сякой 19.02.07 22:33
В ответ на:

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( π, sizeof(pi) );
const char* lpcszToExecution = "\"C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe\" \"C:\Program Files\my.pdf\"";
CreateProcess(NULL, lpcszToExecution, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, π);

Хотел бы задать смежный вопрос, что бы не открывать отдельную ветку.
А как "убить" процесс запущенный в CreateProcess() из запускающей программы?
Сейчас используется примерно такой код
В ответ на:

PostMessage(FindWindow(NULL, MainWindowName), WM_CLOSE, 0, 0);

Все работает, однако необходимо задавать помимо имени программы (для запуска) еще и имя ее главного окна (а оно у некоторых программ может и менятся в процессе работы).
Может быть существует более изящное решение? Желательно не TerminateProcess() и без встраивания обработчиков сообщений в вызываемую программу.
Возможно ли через STARTUPINFO или PROCESS_INFORMATION получить имя главного окна программы или его дескриптор?
Зараннее благодарен за ответ.
#32 
krys посетитель29.03.07 12:09
NEW 29.03.07 12:09 
в ответ Такой-сякой 19.02.07 22:33
Спасибо за подробный ответ.
У меня есть еще один вопрос по локализации исполнительного Фаила.
Мне надо запустить сейчас хтмл страницу как отдельную инстанцию. Для этого мне требуется найти фаил iexplorer.exe. Насколько корректно следующее решение(я велосипеда не изобретал, а перенял старый код, но имеются и отличия):
CString str;
HKEY hKeyOLE=NULL;

if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_CLASSES_ROOT ,_T("Applications\\iexplore.exe\\shell\\open\\command"),0,KEY_READ, &hKeyOLE))
{

TCHAR szVISDir[MAX_PATH];
szVISDir[0] = '\0';

DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(szVISDir);
if(ERROR_SUCCESS==RegQueryValueEx(hKeyOLE,_T(""),NULL, &dwType,(LPBYTE)szVISDir, &dwSize))
//Здесь _Т("") стоит для поля (Standard)
{
str=szVISDir;
}

RegCloseKey(hKeyOLE);
}
я получаю следующий стринг :
"C:\Programme\Internet Explorer\IEXPLORE.EXE" %1
потом я заменяю %1 на имя фаила который надо открыть.
стойте там и слушайте сюда, именно отсюда будет проистекать
#33 
Simple Nothing is f*cked29.03.07 12:37
Simple
NEW 29.03.07 12:37 
в ответ krys 29.03.07 12:09
Нах...я? Сделай тот же ShellExecute.
#34 
krys посетитель29.03.07 14:07
NEW 29.03.07 14:07 
в ответ Simple 29.03.07 12:37
Если ты имеешь ввиду что я просто с помoщью ShellExecute сам HTML-Документ открыть могу, то мне это не подходит.Т.к. если IExplorer уже был открыт с другим документом, то мой отктывается как ещ╦ одно окно.
Если же я хочу открыть и IExplorer и Документ, как я это в командной строке сделал:
iexplore.exe D:\Doc.HTML
...то как я понимаю я должен в ShellExecute (или CreateProcess) указать путь по которому я найду этот самый iexplore.exe . А он может быть разным.
стойте там и слушайте сюда, именно отсюда будет проистекать
#35 
Simple Nothing is f*cked29.03.07 14:28
Simple
NEW 29.03.07 14:28 
в ответ krys 29.03.07 14:07
Тоды ой.
#36 
1 2 все