русский
Germany.ruForen → Архив Досок→ Programmierung

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

382  1 2 alle
krys посетитель16.02.07 17:36
NEW 16.02.07 17:36 
Привет.
Я работаю с Visual Studio C++ 6.0.
Мне надо программно открыть Acrobat Reader и потом pdf - file. Как это можно сделать?
стойте там и слушайте сюда, именно отсюда будет проистекать
#1 
kashej посетитель16.02.07 18:06
kashej
NEW 16.02.07 18:06 
in Antwort krys 16.02.07 17:36
Посмотри в документации функцию CreateProcess. Одним из ее параметров и является имя образа программы (как точно у тебя не знаю, скорей всего "acroread.exe")
А есть параметр, который и будет файлом, который хочешь открыть.
http://denis-aristov.ucoz.com
#2 
kashej посетитель16.02.07 18:17
kashej
NEW 16.02.07 18:17 
in Antwort krys 16.02.07 17:36
Вообще под виндой не так все просто. До вызова CreateProcess нужно будет пару структур объявить.
Вообще лучше вот здесь почитай: http://doks.gorodok.net/?p=553#h1t2
http://denis-aristov.ucoz.com
#3 
.:Nissan:. местный житель17.02.07 18:34
17.02.07 18:34 
in Antwort krys 16.02.07 17:36
В ответ на:
Мне надо программно открыть Acrobat Reader и потом pdf - file. Как это можно сделать?

Можно и просто сразу окрыть фвйл ПДВ. Есле Файлы пдф у пользователя открываються автомотически Acrobat Reader.
#4 
  Chipolino местный житель17.02.07 20:52
NEW 17.02.07 20:52 
in Antwort .:Nissan:. 17.02.07 18:34
И как ты себе это представляешь ?
Process p;
p.start("file.pdf");
Я сомневаюсь что такое возможно .
#5 
.:Nissan:. местный житель17.02.07 20:59
NEW 17.02.07 20:59 
in Antwort Chipolino 17.02.07 20:52
Через дельфи это возможно! Ты сам пробывал в твоём языке програм.?
#6 
  Chipolino местный житель17.02.07 21:48
NEW 17.02.07 21:48 
in Antwort .:Nissan:. 17.02.07 20:59
В ответ на:

Через дельфи это возможно! Ты сам пробывал в твоём языке програм.?

Может это в виндах и возможно , если MIME тип настроены , а если не настроены ?
Путь к просмотрщику PDF нужно брать с конфига .
#7 
krys посетитель19.02.07 10:07
NEW 19.02.07 10:07 
in Antwort kashej 16.02.07 18:17
спасибо за совет, но почему-то acrobat reader (для Reader 7.0 - AcroRd32(.exe) )не открывается.
Если я передаю "Notepad"-результат положительный :(.
НЕ знаешь в чем может быть дело?
стойте там и слушайте сюда, именно отсюда будет проистекать
#8 
Murr коренной житель19.02.07 10:23
Murr
NEW 19.02.07 10:23 
in Antwort krys 19.02.07 10:07
В PATH=
#9 
Simple Nothing is f*cked19.02.07 11:40
Simple
NEW 19.02.07 11:40 
in Antwort Chipolino 17.02.07 20:52
ShellExecute("test.pdf");
#10 
kashej посетитель19.02.07 16:56
kashej
NEW 19.02.07 16:56 
in Antwort krys 19.02.07 10:07
Тогда используй абсолютный путь к программе. Например "C:\Program Files\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe".
http://denis-aristov.ucoz.com
#11 
Murr коренной житель19.02.07 17:58
Murr
NEW 19.02.07 17:58 
in Antwort kashej 19.02.07 16:56
А откуда уверенность, что система стоит на С:?
#12 
kashej посетитель19.02.07 18:07
kashej
NEW 19.02.07 18:07 
in Antwort Murr 19.02.07 17:58
Действительно. Что же делать если не на С?...
http://denis-aristov.ucoz.com
#13 
  Chipolino местный житель19.02.07 19:59
NEW 19.02.07 19:59 
in Antwort Simple 19.02.07 11:40
В ответ на:

ShellExecute("test.pdf");

Что это ?
#14 
kashej посетитель19.02.07 20:08
kashej
NEW 19.02.07 20:08 
in Antwort Chipolino 19.02.07 19:59
Должно работать судя по http://www.vbarchiv.net/faq/ds_shellexecute.php
Я ее как-то использовал, но там вроде вместе с нужной программой еще и DOSовское окно открывается.
Поэтому я на CreateProcess и перешел.
http://denis-aristov.ucoz.com
#15 
  digital.pilot старожил19.02.07 21:56
digital.pilot
NEW 19.02.07 21:56 
in Antwort Simple 19.02.07 11:40
а остальные параметры где, сцуко ленивое? :D
#16 
  digital.pilot старожил19.02.07 21:58
digital.pilot
NEW 19.02.07 21:58 
in Antwort kashej 19.02.07 20:08
странно, у меня никогда ниче левого не открывалось (вызывал т.о. кучу муйни для открывания распространенных расширений)
#17 
kashej посетитель19.02.07 22:12
kashej
NEW 19.02.07 22:12 
in Antwort digital.pilot 19.02.07 21:58
Ну может быть... Я говорю, давно это было когда я ShellExecute использовал. Просто CreateProcess элегантней на мой взгляд. И процесс можно контроллировать - запустить его параллельно к вызывающей программе или же заставить вызывающую программу ждать завершения процесса.
Может это все и с помощью ShellExecute можно реализовать - не буду спорить. В общем - скорее тут вопрос вкуса.
http://denis-aristov.ucoz.com
#18 
Такой-сякой гость19.02.07 22:33
Такой-сякой
NEW 19.02.07 22:33 
in Antwort krys 19.02.07 10:07
На самом деле все прекрасно работает: и ShellExecute и CreateProcess и то что абсолютный путь к акробату нужно передавать тоже правильно и не нужно знать где стоит система (хотя и это не проблема 1)SHGetSpecialfolderLocation() повозвращает все что хочешь, 2) системная переменная %windir% дает путь установки виндовоза ну а там уж... и т.д. - всего 1000000 способов). Лезем дружно в региcтри и заценяем как сам експлорер открывает пдф. HKEY_CLASSES_ROOT\AcroExch.Document\shell\Open\command а там написано например такое "C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe" "%1". Вот собственно и вся мулька. Это когда юзер даблкликает на пдф файле то експлорер это трансформирует в такой вот вызов. И больше тут ничего нет, ни ДОСовских окон, ни путей непонятных. Хотя я кажется понял в чем дело. У тебя может не работать по одной очень простой причине. Проверь чтобы пути содержащие пробел брались в кавычки и смело запускай
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, 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, &pi);
Я вам один умный вещь скажу - но только вы не обижайтесь...
#19 
Такой-сякой гость19.02.07 22:39
Такой-сякой
NEW 19.02.07 22:39 
in Antwort Такой-сякой 19.02.07 22:33
И насчет ДОСовских окон... Флаг CREATE_NO_WINDOW просто таки необходим
Я вам один умный вещь скажу - но только вы не обижайтесь...
#20 
1 2 alle