Я не думаю, что вы можете полностью отключить это в коде; если бы вы могли, это бы победило всю цель защищенного режима (предотвращение использования вредоносного программного обеспечения .pdf). Возможно, вы сможете обойти это законным путем. :)
Я подозреваю, что это связано с глаголом open
, который вы используете с ShellExecute
. Вы предполагаете (возможно, неправильно), что глагол open
делает в защищенном режиме на Win7 то же самое, что и в предыдущих версиях Adobe Reader и Windows. ( ПРИМЕЧАНИЕ : у меня не установлена эта версия Acrobat в моей системе; это все предположения.)
Первое, что я попробую, это изменить вызов на ShellExecute
следующим образом:
ShellExecute(0, nil, PChar(pdfFile), nil, nil, SW_NORMAL);
Первое изменение - передать nil
в качестве второго параметра. Это говорит Windows, что вы хотите выполнить любое действие по умолчанию. Например, это может быть view
вместо open
.
Я также изменил два параметра после имени файла на ноль. Это более читабельно, чем использование пустой строки ('').
Последнее изменение в последнем параметре; Я обычно использую SW_NORMAL
вместо SW_SHOW
просто потому, что это говорит Windows показывать его в любом размере и положении по умолчанию; это может быть что-то, сохраненное приложением, и оно будет учитывать настройки пользователя (если есть).
Если это не сработает, пора бродить ( осторожно !! ) в реестре Windows. Откройте regedit
в элементе управления поиска в меню «Пуск» и перейдите к HKEY_CLASSES_ROOT. Прокручивайте расширения файлов до тех пор, пока не найдете запись для .pdf
, и дважды щелкните эту ветку. Вы увидите Default
, который (в любом случае, в моей системе) AcroExch.Document
с Content Type
из application/pdf
.
Продолжайте идти вниз по дереву на левой панели, пока не найдете AcroExch.Document
, и разверните его. Там вы увидите несколько значений (опять же, с моей машины), как вы можете видеть на изображении ниже. Разверните ветку Shell
, и вы увидите определенные глаголы, а также команду, связанную с ними. На моей машине (снова) у меня есть один глагол Open
, команда которого установлена на "C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe" "%1"
.
![RegEdit Left Pane](https://i.stack.imgur.com/lEAGf.png)
![RegEdit Value Pane](https://i.stack.imgur.com/ksECK.png)
(Потерпи меня - мы почти на месте. Обещаю.)
Вы можете увидеть, что двойной щелчок делает по-другому, изучив значение по умолчанию (щелкните Shell
на левой панели, а затем посмотрите, что установлено как (Default)
справа. Затем изучите командную строку (в второе изображение выше, это Open
), чтобы увидеть, какие переключатели, если таковые имеются, передаются в приложение Acrobat Reader (если вы не можете выяснить, какой из них используется по умолчанию, щелкните правой кнопкой мыши файл .pdf в проводнике Windows и посмотрите, что выделенный жирным шрифтом пункт находится в контекстном меню.)
Если передан параметр, отличный от "%1"
, вам нужно добавить тот же параметр в командную строку, предоставленную для ShellExecute
. Например, если параметр /v
, вы бы изменили свой вызов на ShellExcute
на что-то вроде этого:
ShellExecute(0, nil, PChar(pdfFile), PChar('/v'), nil, SW_NORMAL);