'************ Code Start **********
Private Declare Function apiShellExecute 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
'***App Window Constants***
Public Const WIN_NORMAL = 1 'Open Normal
Public Const WIN_MAX = 2 'Open Maximized
Public Const WIN_MIN = 3 'Open Minimized
'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
'***************Usage Examples***********************
'Open a folder: ?ShellExecuteMy("C:\TEMP\",WIN_NORMAL)
'Call Email app: ?ShellExecuteMy("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL: ?ShellExecuteMy("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
' ?ShellExecuteMy("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
' ?ShellExecuteMy("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************
Function ShellExecuteMy(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
'First try ShellExecute
lRet = apiShellExecute(hWndAccessApp, vbNullString, _
stFile, vbNullString, vbNullString, lShowHow)
If lRet > ERROR_SUCCESS Then
stRet = vbNullString
lRet = -1
Else
Select Case lRet
Case ERROR_NO_ASSOC:
'Try the OpenWith dialog
varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
& stFile, WIN_NORMAL)
lRet = (varTaskID <> 0)
Case ERROR_OUT_OF_MEM:
stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
Case ERROR_FILE_NOT_FOUND:
stRet = "Error: File not found. Couldn't Execute!"
Case ERROR_PATH_NOT_FOUND:
stRet = "Error: Path not found. Couldn't Execute!"
Case ERROR_BAD_FORMAT:
stRet = "Error: Bad File Format. Couldn't Execute!"
Case Else:
End Select
End If
ShellExecuteMy = lRet & _
IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********
mailto:
http://mail.ru, запустится браузер (который по умолчанию), и откроет сайт mail.ru. Как сделать то же самое программно ?
Нажимаю Пуск/Выполнить и набираю mailto:myadress@mail.ru. Запускается почтовый клиент (который по умолчанию), строка Кому уже заполнена. Аналогично, если набрать
Код:
Это вариант функции под Access, если использовать в других программах то надо вместо hWndAccessApp ставить hWnd окна твоей программы (если ты в VB пишешь) - App.hWnd; в Excel - Application.Hwnd, в Worde помуторнее, там надо готового свойства нет, надо делать поиск гл. окна word'а по классу через winAPI FindWindow....
Спасибо за ответ
Цитата:
Originally posted by Tiraspolsky
Нажимаю Пуск/Выполнить и набираю mailto:myadress@mail.ru. Запускается почтовый клиент (который по умолчанию), строка Кому уже заполнена. Аналогично, если набрать http://mail.ru, запустится браузер (который по умолчанию), и откроет сайт mail.ru. Как сделать то же самое программно ?
Нажимаю Пуск/Выполнить и набираю mailto:myadress@mail.ru. Запускается почтовый клиент (который по умолчанию), строка Кому уже заполнена. Аналогично, если набрать http://mail.ru, запустится браузер (который по умолчанию), и откроет сайт mail.ru. Как сделать то же самое программно ?
А можно по дубовому :
Shell("cmd.exe /c start ""mail"" ""http://mail.ru""")
Команда start позволяет вообще
запустить процесс "открытия" любого
об"екта Виндов, например картинок.
Первая строчка "mail" - задает
заголовок открываемого окна, а
вторая - об"ект.
Я это запомнил с тех времен, когда
"коммандеры" еще не были умными и не позволяли
такое делать без команды start. А сейчас
они делают именно через нее :-)