Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161

Не работает ShellExecute

13.11.2012, 16:14. Показов 7797. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На компе не срабатывает кнопка с кодом

C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s1;
 
s1 = "1.pdf";
 
ShellExecute(Handle, "open", s1.c_str(), NULL, "\\\\192.168.53.43\\Folder1\\", SW_SHOW);
}
Делал GetLastError. Показал код ошибки 1155. Это вроде означает, что типу файлов в системе не сопоставлена программа. Но там pdf открывается в Adobe Reader, если руками всё делать и всё нормально.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.11.2012, 16:14
Ответы с готовыми решениями:

ShellExecute не работает
Доброго времени суток. Вот такая задачка хочу открыть программу через OpenDialog вот пример : if (OpenDialog1->Execute()) { ...

Почему не работает ShellExecute
В чем прикол с ShellExecute? Есть код: void __fastcall TMainForm::GeneticalgorithmGA1Click(TObject *Sender){ UnicodeString...

ShellExecute не всегда работает
Здравствуйте. Не подскажите, почему после выполнения кода: if (OpenDialog3->Execute()) { AnsiString MyFN=""; ...

33
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
15.11.2012, 13:32  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nick42 Посмотреть сообщение
Установлен? Есть ньюансы... - продукты Adobe, насколько мне известно, достаточно независимы, то-есть портабельны. Можно скопировать папку "Adobe" к себе в программный каталог, и запустить оттуда программы; и они будут работать. Но в реестре Винды должна быть строчка об ассоциативной привязке расширения pdf к конкретной программе (еще и с опциями). Если ридер на машину устанавливался, такая запись в реестре появится (именно с этим работает ShellExecute-"open"). А если нет... . Открыть файл .pdf ридером вы сможете, а ShellExecute может не справиться.
Имеешь ввиду скопировать папку Adobe из Program Files в папку с программой моей и прописать в коде открытие Adobe Raader через WinExec?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.11.2012, 13:40
.. боже сохрани!! LK же подсказывал: проверить файловые ассоциации, ну из серии "файл - связать". На "хороших" машинах с расширением pdf должна ассоциироваться программа AcroRd32 (open). Вот и сравнить с "на плохих машинах".
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
15.11.2012, 14:23  [ТС]
А как в параметрах ShellExecute указать, чтобы файл открывался именно экзешником Adobe Reader?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.11.2012, 14:57
если с ассоциациями все в порядке, ничего дополнительно, кроме конкретного файла pdf, указівать не нужно - функция называется ShellExecute, т.е., это проблемы системы
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
15.11.2012, 16:35  [ТС]
На этом моноблоке проверял снова с таким кодом

C++
1
2
3
4
AnsiString n;
AnsiString m;
m="ENUtxt.pdf";
ShellExecute(Handle, "open", m.c_str(), NULL, NULL, SW_RESTORE);
ENUtxt.pdf в папке с исходниками лежит. Не сработало.

Потом после этого куска кода вписал:

C++
1
2
n=GetLastError();
ShowMessage("n");
По точке останова даже не попадает на строку
C++
1
n=GetLastError();
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
15.11.2012, 23:06
Во-первых, это просто глупо:
Цитата Сообщение от 4aynik Посмотреть сообщение
n=GetLastError();
ShowMessage("n");
Отобразится лишь окошко с текстом "n". Чтобы показывать ошибки, можно вот такую функцию использовать:
C++
1
2
3
4
5
6
7
8
void show_last_error( ) {
    LPTSTR lpMsgBuf;
    DWORD dw = GetLastError( );
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, dw, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), ( LPTSTR ) &lpMsgBuf, 0, NULL );
    ShowMessage( "Failed with error " + String( dw ) + ": \"" + String( lpMsgBuf ) + "\"" );
    LocalFree( lpMsgBuf );
}
И во-вторых, срабатывает ли breakpoint на строчке с ShellExecute()?
1
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
26.11.2012, 10:21  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
И во-вторых, срабатывает ли breakpoint на строчке с ShellExecute()?
Срабатывает, насколько помню срабатывает и параметры верные показывает...

Это может зависеть от версии Windows 7? Там вроде базовая или домашняя.
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
26.11.2012, 12:59
А что вот такая штука показывает?
C++
1
2
3
4
5
6
 char buf[254]={0,};
 FindExecutable("c:\\1.pdf", "c:\\", buf); // путь взять свой
 AnsiString Grafpath=(AnsiString)buf;
 if (Grafpath=="")
  ShowMessage("Íåò àññîöèàöèè!");
 else ShowMessage(Grafpath);
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
26.11.2012, 15:15  [ТС]
Цитата Сообщение от mimicria Посмотреть сообщение
А что вот такая штука показывает?
C++
1
2
3
4
5
6
 char buf[254]={0,};
 FindExecutable("c:\\1.pdf", "c:\\", buf); // путь взять свой
 AnsiString Grafpath=(AnsiString)buf;
 if (Grafpath=="")
  ShowMessage("Íåò àññîöèàöèè!");
 else ShowMessage(Grafpath);
Это для проверки есть ли программа на компе, открывающая pdf-файлы?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.11.2012, 15:23
Цитата Сообщение от 4aynik Посмотреть сообщение
Это для проверки есть ли программа на компе, открывающая pdf-файлы?
.. не совсем (программа может и быть). Это для проверки, связана ли с расширением pdf какая-нибудь программа.
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
26.11.2012, 16:58  [ТС]
Выдаёт, что ассоциация есть, показывает полный путь к экзешнику.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
26.11.2012, 17:19
А что там с GetLastError( )? Отказано в доступе?
0
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 161
27.11.2012, 14:05  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
А что там с GetLastError( )? Отказано в доступе?
Пока не знаю, завтра попробовать надо.

После удаления Adobe Reader, файлы pdf там открываются офисом 10-м. И у винды SP 0...

Добавлено через 16 часов 3 минуты
Цитата Сообщение от BRcr Посмотреть сообщение
Чтобы показывать ошибки, можно вот такую функцию использовать:
C++
1
2
3
4
5
6
7
8
void show_last_error( ) {
    LPTSTR lpMsgBuf;
    DWORD dw = GetLastError( );
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, dw, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), ( LPTSTR ) &lpMsgBuf, 0, NULL );
    ShowMessage( "Failed with error " + String( dw ) + ": \"" + String( lpMsgBuf ) + "\"" );
    LocalFree( lpMsgBuf );
}
[/B]?
Можно просто посадить в тело кнопки эту часть кода?
C++
1
2
3
4
5
6
LPTSTR lpMsgBuf;
    DWORD dw = GetLastError( );
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, dw, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), ( LPTSTR ) &lpMsgBuf, 0, NULL );
    ShowMessage( "Failed with error " + String( dw ) + ": \"" + String( lpMsgBuf ) + "\"" );
    LocalFree( lpMsgBuf );
Добавлено через 4 часа 37 минут
Проблема была в винде.

Добавлено через 21 секунду
Всё остальное работало корректно.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
27.11.2012, 14:11
Цитата Сообщение от LK Посмотреть сообщение
это проблемы системы
из 24 поста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2012, 14:11
Помогаю со студенческими работами здесь

ShellExecute не работает без OpenDialog, хотя последний там никаким боком
Всем доброго времени суток. Пишу простейшую программу, которая открывает файл. ...

Альтернатива ShellExecute
Использую код char s; strcpy( s, Edit1->Text.c_str( ) ); ShellExecute( Handle, "open", s, NULL, NULL, SW_RESTORE ); ...

ShellExecute не канает
void __fastcall TForm1::Button1Click(TObject *Sender) { ShellExecute(NULL,"open","test.bat",NULL,NULL,SW_SHOWNORMAL); } Не...

ShellExecute и WinExec
использовал функцию ShellExecute, для открытия файла из программы. ShellExecute(Handle, "open", "help.chm", 0, 0,...

Вопросы по ShellExecute
Доброго времени суток, у меня есть пару вопросов. Допустим открыл я консольное приложение такой командой: ShellExecuteA(Handle,...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru