
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Сообщ.
#1
,
|
|
|
В общем проблема не открыть сайт определенный по нажатию на кнопку, а открыть его через браузер который стоит по умолчанию.
У меня такой код: ![]() ![]() Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://AnapolisGame.jino-net.ru/" Без указания программы она не сработает. Так же как и если винда будет на D. Но с этим то я справлюсь, важнее просто открыть ссылку в браузере стоящем по умолчанию. Подскажите как решить. |
Сообщ.
#2
,
|
|
|
Имхо, правильнее всего смотреть какой браузер помечен "по умолчанию", но открывать вручную, т.е. напрямую запускать его с параметром, т.к., например, при простом открытии ссылки она будет открыта в активном окне браузера, а не в новом.
|
Сообщ.
#3
,
|
|
|
Цитата f33l, 03.08.2006, 11:39:17, 1202261 Имхо, правильнее всего смотреть какой браузер помечен "по умолчанию", ShellExecute рулит... Цитата f33l, 03.08.2006, 11:39:17, 1202261 Это в ИЕ, в случае, когда глупый юзер не поставил в настройках галку. Это исключительно проблема глупого юзера.но открывать вручную, т.е. напрямую запускать его с параметром, т.к., например, при простом открытии ссылки она будет открыта в активном окне браузера, а не в новом. Автор темы, юзай ShellExecute |
Сообщ.
#4
,
|
|
|
Змей(Чёрный), вдобавок
![]() вот конкретный пример ![]() ![]() ShellExecute 0, "open", "http://AnapolisGame.jino-net.ru/", "", "", 1 ![]() |
Сообщ.
#5
,
|
|
|
Цитата Змей(Чёрный) @ ShellExecute рулит... Действительно рулит. Не только в програмистских разделах можно встретить упоминания о ней. Думаю стоит добавить заметку по этой функции в ФАК. (см. пост №12) |
![]() |
Сообщ.
#6
,
|
|
а) Объедени примеры в одну функцию. Они различаются только параметрами вызова ShellExecute.
б) Не вижу обработки возвращамых значений в) Не вижу ссылки на MSDN г) Не вижу примеров с 'print' От меня: ![]() ![]() Option Explicit Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Declare Function FormatMessage Lib "kernel32.dll" Alias "FormatMessageA" (ByVal dwFlags As Long, ByRef lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, ByRef Arguments As Long) As Long Private Const SW_SHOWNORMAL As Long = 1 Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000 Private Const MAX_SIZE As Long = 255 Private Sub Form_Load() Dim lRetval As Long '> explore 'В lRetval должен быть возвращен Instance запущенного приложения lRetval = ShellExecute(Me.hwnd, "explore", Environ$("WinDir") & _ Chr$(92), vbNullString, vbNullString, SW_SHOWNORMAL) 'Если значение меньше или равно 32 - произошла ошибка If lRetval <= 32 Then MsgBox GetErrorString(lRetval), vbExclamation Or vbApplicationModal, "Error" End If '> find lRetval = ShellExecute(Me.hwnd, "find", Environ$("Temp") & _ Chr$(92), vbNullString, vbNullString, SW_SHOWNORMAL) If lRetval <= 32 Then MsgBox GetErrorString(lRetval), vbExclamation Or vbApplicationModal, "Error" End If '> edit lRetval = ShellExecute(Me.hwnd, "edit", "C:\Picture.bmp", vbNullString, _ vbNullString, SW_SHOWNORMAL) If lRetval <= 32 Then MsgBox GetErrorString(lRetval), vbExclamation Or vbApplicationModal, "Error" End If End Sub 'Текст ошибки Public Function GetErrorString(ByVal lErr As Long) As String Dim strBuffer As String, lRetval As Long strBuffer = Space$(MAX_SIZE) lRetval = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0, lErr, 0, strBuffer, MAX_SIZE, 0) strBuffer = Left$(strBuffer, lRetval) GetErrorString = strBuffer End Function Добавлено Перевод на лету: Цитата Djoser @ This window receives any message boxes that an application produces. For example, an application may report an error by producing a message box. Это окно получит любые окна сообщений, которые приложение выведет. Например, приложение может сообщить об ошибке выводом окна сообщения. Цитата Djoser @ An application should specify this flag when restoring a minimized window. Приложение должно установить этот флаг, когда восстанавливает минимизированное окно. Цитата Djoser @ Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window. Ой, сложное предложение... Устанавливает состояние показа, основанное на SW_ флаге, указанном в STARUPINFO типе (или структуре), переданной CreateProcess функции программой, которая запустила приложение. Приложение должно вызывать ShowWindow с этим флагом для установки изначального состояния показа его основного окна. Цитата Djoser @ Displays the window as a minimized window. The active window remains active. Показывает окно как минимизированное окно. Активное окно остается активным. Цитата Djoser @ Displays the window in its current state. The active window remains active. Показывает окно в текущем его состоянии. Активное окно остается активным. Цитата Djoser @ Displays a window in its most recent size and position. The active window remains active. Показывает окно с его самой последней позицией и размером. Активное окно остается активным. |
Сообщ.
#7
,
|
|
|
B.V., сенкс за отзыв.
У меня щас инет тормознутый, если не сложно, то проверь, плиз, ссылку на MSDN. И, если не трудно, то можешь поискать на msdn статью про эту ф-ию, но с кодом на ВБ(если такое конечно есть). Добавлено Цитата B.V. @ Не вижу примеров с 'print' Сорри, но у мну принтер на ремонте... Может так попробую... |
![]() |
Сообщ.
#8
,
|
|
Цитата Djoser @ с кодом на ВБ(если такое конечно есть) Думаю, нет. |
Сообщ.
#9
,
|
|
|
Цитата B.V. @ а) Объедени примеры в одну функцию. Они различаются только параметрами вызова ShellExecute. Каждый пример отвечает на свой конкретный вопрос. Объединять все в одну функцию не вижу смасла, если кому-то это будет надо, то на данной (которая уже изложена в статейке) основе сможет легко реализовать задуманное. Цитата B.V. @ Думаю, нет. А ссылку проверил? |
![]() |
Сообщ.
#10
,
|
|
Цитата Djoser @ А ссылку проверил? На MSDN? Да. |
Сообщ.
#11
,
|
|
|
(Пост то редактится, то не редактится - инет вылетает, так что сорри за топик-ап)
Дополнение и поправки к вопросам: 1.Как открыть зарегистрированный тип файла в системе в нужной программе? 2.Как открыть адрес URL в браузере по умолчанию? 3.Как открыть окно почтовой программы для создания письма на определенный адрес? (можно отнести ко второму) 4.Как распечатать на принтере содержимое файла? 5.Как отобразить стандартное окно поиска файлов Windows? Добавлено Код: ![]() ![]() 'пример демонстрирует основные возможности применения функции ShellExecute 'Coded by Djoser 'Some code bytes from: B.V.; Api-Guide 'forum.sources.ru Option Explicit Private Declare Function FormatMessage Lib "kernel32.dll" Alias "FormatMessageA" (ByVal dwFlags As Long, ByRef lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, ByRef Arguments As Long) As Long Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Const SW_SHOWNORMAL As Long = 1 Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000 Private Const MAX_SIZE As Long = 255 Public Enum enuShell_DO iSH_Mail = 1 iSH_Explore = 2 iSH_FindIn = 3 iSH_Edit = 4 iSH_URL = 5 iSH_Run = 6 iSH_Print = 7 End Enum Public Function iShell(hWnd As Long, Action As enuShell_DO, ActString As String, Optional strCmdLine As String = "") As String 'функция возвращает пустую строку, если все нормально 'функция возвращает описание ошибки или lRetval, если произошла ошибка 'В lRetval должен быть возвращен Instance запущенного приложения 'Если значение меньше или равно 32 - произошла ошибка 'Chr$(92) = "\" Dim lRetval As Long Dim strAct As String Select Case Action Case Is = enuShell_DO.iSH_Mail 'отправка почты (написать письмо) lRetval = ShellExecute(hWnd, "open", "mailto:" & ActString, vbNullString, vbNullString, SW_SHOWNORMAL) Case Is = enuShell_DO.iSH_Explore 'открытие папки в проводнике ActString = StrChek(ActString, "\") lRetval = ShellExecute(hWnd, "explore", ActString, vbNullString, vbNullString, SW_SHOWNORMAL) Case Is = enuShell_DO.iSH_FindIn 'поиск файлов в указанной папке средствами Windows ActString = StrChek(ActString, "\") lRetval = ShellExecute(hWnd, "find", ActString, vbNullString, vbNullString, SW_SHOWNORMAL) Case Is = enuShell_DO.iSH_Edit 'открывает файл в соответствующем редакторе, например: *bmp -> Paint lRetval = ShellExecute(hWnd, "edit", ActString, vbNullString, vbNullString, SW_SHOWNORMAL) Case Is = enuShell_DO.iSH_URL 'переход на ссылку URL ActString = StrChek(ActString, "/") lRetval = ShellExecute(hWnd, "open", "http://" & ActString, vbNullString, vbNullString, SW_SHOWNORMAL) Case Is = enuShell_DO.iSH_Run 'открывает документ или запускает программу lRetval = ShellExecute(hWnd, "open", ActString, strCmdLine, vbNullString, SW_SHOWNORMAL) Case Is = enuShell_DO.iSH_Print 'печатает документ (НЕ ТЕСТИРОВАЛОСЬ) lRetval = ShellExecute(hWnd, "print", ActString, vbNullString, vbNullString, SW_SHOWNORMAL) End Select If lRetval <= 32 Then iShell = Str$(lRetval) iShell = GetErrorString(lRetval) End If End Function Private Function StrChek(ByVal strMath As String, ByVal strRepl As String) As String StrChek = IIf(Right$(strMath, 1) <> strRepl, strMath & strRepl, strMath) End Function 'Текст ошибки Private Function GetErrorString(ByVal lErr As Long) As String Dim strBuffer As String, lRetval As Long strBuffer = Space$(MAX_SIZE) lRetval = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0, lErr, 0, strBuffer, MAX_SIZE, 0) strBuffer = Left$(strBuffer, lRetval) GetErrorString = strBuffer End Function Добавлено (щас связь ужость ![]() |
Сообщ.
#12
,
|
|
|
Мне надо подключить какую то библиотеку, для работы с ShellExecute, потому как не работает что-то. Подскажите как называется эта библиотека.
|
![]() |
|
|
Цитата надо подключить какую то библиотеку ты не это имеешь ввиду : Цитата Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long и выражайся поточнее, пожалуйста, иначе я не смогу те помочь... ![]() Цитата Подскажите как называется эта библиотека. библиотека называецца "shell32.dll" ![]() ![]() |
Сообщ.
#14
,
|
|
|
Цитата Spectr-7 @ Мне надо подключить какую то библиотеку, для работы с ShellExecute, потому как не работает что-то. Выкладывай "неработающий код". В дополнение к посту №12: Описание функции ShellExecute С помощью данной, довольно таки мощной и удобной, функции можно много чего сделать полезного в ваших программах, поэтому будет не лишним, если вы будете знать об основных возможностях функции ShellExecute. Ссылки по информации: RSDN MSDN Описание: Данная функция открывает или печатает указанный файл. Файл может быть исполняемым или документом. (это довольно скромное описание, за которым скрываются очень полезные вещи, чтобы все понять нужно просмотреть пример кода (пост №12)) Декларирование: ![]() ![]() Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Параметры: Цитата · hwnd hWnd окна-родителя. Это окно получит любые окна сообщений, которые выведет запущенное приложение . Например, приложение может сообщить об ошибке выводом соответствующего окна сообщения. · lpOperation Строка, которая содержит описание выполняемой операции. Может принимать следующие значения: “open” Функция открывает файл, указанный в параметре lpFile. Файл может быть исполняемым или документом. Также может указывать на папку - в этом случае будет открыто окно проводника “print” Функция печатает файл, указанный в lpFile. Файл должен быть документом. Если все равно указан исполняемый файл, то функция возвратит ошибку. “explore” Функция открывает окно проводника в указанной папке (параметр lpFile). "find" Функция открывает стандартное окно поиска файлов Windows. В качестве места поиска устанавливается параметр lpFile "edit" Функция открывает файл, указанный в параметре lpFile, с помощью соответствующего редактора. Например файл *bmp будет открыт в Paint'e Пареметр lpOperation может быть NULL(vbNullString). В этом случае, функция открывает файл, указанный в параметре lpFile, как если бы был установлен в “open”. · lpFile Строка, содержащая путь к файлу для открытия или печати, или имя папки для просмотра в проводнике. Файл может быть исполняемым или документом. Функция может печатать только документы. · lpParameters Командная строка, для программы указанной в параметре lpFile (только для исполняемых файлов!). Если lpFile содержить путь к документу, то параметр lpParameters должен быть NULL(vbNullString). · lpDirectory Строка, содержащая путь к директории по умолчанию. Если того не требуется, то то можно оставить все в текущем состоянии - установить этот параметр в NULL(vbNullString) · nShowCmd Если параметр lpFile содержит исполняемый файл, то параметр nShowCmd определяет поведение запускаемой программы. Данный параметр может принимать значения: SW_HIDE Прячет окошко запускаемой проги. SW_MAXIMIZE Развернутое окошко запускаемой проги. SW_MINIMIZE Минимизирует окно открываемой проги. SW_RESTORE Активирует и отображает окошко запусаемой проги. Если окошко минимизировано\развернуто, то Windows возвращает его оригинальный размер и позицию. Приложение должно установить этот флаг, когда восстанавливает минимизированное окно. SW_SHOW Отображает окно запускаемой проги с текущими параметрами размера и положения. SW_SHOWDEFAULT Устанавливает состояние показа, основанное на SW_ флаге, указанном в STARUPINFO типе (или структуре), переданной функции CreateProcess программой, которая запустила приложение. Приложение должно вызывать функцию ShowWindow с этим флагом, чтобы установить изначальное состояние показа его основного окна. SW_SHOWMAXIMIZED Активирует и отображает развернутое окошко запускаемой программы. SW_SHOWMINIMIZED Активирует и отображает свернутое окошко запускаемой программы. SW_SHOWMINNOACTIVE Показывает окно как минимизированное окно. Активное окно остается активным. SW_SHOWNA Показывает окно в текущем его состоянии. Активное окно остается активным. SW_SHOWNOACTIVATE Показывает окно с его самой последней позицией и размером. Активное окно остается активным. SW_SHOWNORMAL Активирует и отображает окошко. Если окошко минимизировано\развернуто, то восстанавливаются размер и позиция окна как при первом запуске. Данный флаг должен быть установлен, когда программа запускается впервые. Вот простой пример использования ShellExecute, в котором продемонстрированы все известные на данный момент варианты использования этой функции: Добавлено Вопрос к B.V.: Статья идет в ФАК? Добавлено Цитата Djoser @ Вопрос к B.V.: Статья идет в ФАК? (под статьей я понимаю объединенные посты №12 и 15) Прикреплённый файл ![]() |
![]() |
Сообщ.
#15
,
|
|
Цитата Djoser @ Вопрос к B.V.: Статья идет в ФАК? Пост #12 уже в FAQ. Пост #15 добавлять в FAQ нет смысла. |
Сообщ.
#16
,
|
|
|
Цитата B.V. @ Пост #12 уже в FAQ. Пост #15 добавлять в FAQ нет смысла. ну ладно |
Сообщ.
#17
,
|
|
|
У меня в модуле прописано
![]() ![]() Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long А в нужном месте стоит: ![]() ![]() ShellExecute 0, "open", "адрес_ссылки", "", "", 1 Но он говорит, что не находит функции ShellExecute |
![]() |
|
|
Цитата Private Sub mnuHelpHomePage_Click() Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long ShellExecute 0, "open", "адрес_ссылки", "", "", 1 End Sub а можт всетаки так : ![]() ![]() ![]() Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub mnuHelpHomePage_Click() ShellExecute 0, "open", "адрес_ссылки", "", "", 1 End Sub объявления апи функций должны идти В НАЧАЛЕ МОДУЛЯ, так же как и объявления глобальных переменных уровня модуля!!! ![]() |
Сообщ.
#19
,
|
|
|
Цитата Beast666 @ объявления апи функций должны идти В НАЧАЛЕ МОДУЛЯ, так же как и объявления глобальных переменных уровня модуля!!! Это я заметил и переделал... Но все равно.. Он почему то считает ShellExecute функцией и не может ее найти. |
Сообщ.
#20
,
|
|
|
Цитата Он почему то считает ShellExecute функцией и не может ее найти что, дословно, он говорит? ![]() |
Сообщ.
#21
,
|
|
|
Во время попытки запуска - то есть нажатия на кнопку которая должна открыть страничку в броузере.
а точно говорит вот что Compile error: Sub or Function not defined И выделяет "ShellExecute" слова |
Сообщ.
#22
,
|
|
|
Цитата Во время попытки запуска - то есть нажатия на кнопку которая должна открыть страничку в броузере. а точно говорит вот что Compile error: Sub or Function not defined И выделяет "ShellExecute" слова создай отдельный модуль (*.bas) и напиши в нем "PUBLIC Declare Function ShellExecute и т.д..." а старое "Private Declare Function ShellExecute ..." удали ![]() ![]() |
![]() |
Сообщ.
#23
,
|
|
Spectr-7, декларация функции должна быть в форме с доступом Private или в модуле с видимостью Public. У тебя так?
|
Сообщ.
#24
,
|
|
|
У меня так и сделано. Не в отдельном конечно модуле. Но, прописано в модуле и на нее не огрызается. Другие функции в том модуле исправно работают.
|
Сообщ.
#25
,
|
|
|
Цитата в модуле с видимостью Public лучше так, ибо будет видна по всему проекту.. |
![]() |
Сообщ.
#26
,
|
|
Добавь Option Explicit. Может, опечатался?
|
Сообщ.
#27
,
|
|
|
Цитата MIF @ Spectr-7, декларация функции должна быть в форме с доступом Private или в модуле с видимостью Public. У тебя так? Совсем забыл. В модуль перетащил, а на Public заменить забыл... Всем спасибо, решена проблема. Запустился броузер. |
Сообщ.
#28
,
|
|
|
Цитата Не в отдельном конечно модуле Spectr-7, если определена как Приват, буде видна ТОЛЬКО в том модуле где определена!!! Добавлено Цитата Совсем забыл. В модуль перетащил, а на Public заменить забыл... Всем спасибо, решена проблема. Запустился броузер и нечего было пугать ![]() ![]() ![]() |
Сообщ.
#29
,
|
|
|
Цитата Beast666 @ ТОЛЬКО в том модуле или классе (имеется ввиду класс формы) |
Сообщ.
#30
,
|
|
|
Еще один вопрос.. как сделать - Написать на почту? Пробовал как и с сайтом но емейловский адрес - не работает.
|
Сообщ.
#31
,
|
|
|
Цитата Spectr-7, 11.09.2006, 11:30:01, 1258579 Пробовал как и с сайтом но емейловский адрес - не работает. хмм... а mailto: ты не хабыл к нему? например, mailto:vasjapupkin@mail.ru |