Перейти к содержанию
СофтФорум - всё о компьютерах и не только

ShellExecute и MS Visual Basic 2008


Рекомендуемые сообщения

Недавно установил Microsoft Visual Studio 2008. Вот решил написать собственный autorun.exe для диска. Для этой цели использовал язык Visual Basic. В VB 6.0 для запуска других приложений из своего приложения можно было использовать API-функцию ShellExecute, предварительно объявив её в разделе Declarations. Затем было достаточно вызвать функцию из любого участка программы, задав соответствующие параметры. В VB 6.0 всё работало нормально, но в VB 2008 функция не работает. Никаких ошибок компилятор не выдаёт. Допустим надо мне запустить из своего приложения программу Notepad.exe. Я объявляю в разделе Form1->Declarations функцию 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 

Затем для события Click командной кнопки Button1 пишу соответствующий код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click	ShellExecute(0, "open", "C:\windows\notepad.exe", "", "C:\windows", 1)End Sub

После этого запускаем приложение, щёлкаем на соответствующей кнопке и ничего не происходит. Хотя данный код в VB 6.0 работал нормально.

В чём проблема?

Ссылка на комментарий
Поделиться на другие сайты

В чём проблема?

В новом визуал бейсике немного изменилась нотация объявлений функций Win32 API. В интернете встретил вот такой код:

Declare Auto Function SendMessage Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, _ 	ByVal wparam As Integer, ByVal lparam As System.Text.StringBuilder) As IntPtr

Хотя, на мой взгляд, визуал бейсик 2008 не очень подходит для создания авторанов. Дело в том, что получаемые приложения предназначены для исполнения в .Net среде и требуют наличие .Net framework, которого на компьютере куда сунут диск с автораном может не оказаться.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, за помощь, но это не помогло.

Дело в том, что и в предыдущем варианте кода компилятор не выдавал никаких ошибок, значит объявление функции было сделано верно. Но почему-то во время работы программы она не выполняется.

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

Сейчас пробовал использовать другие API-функции - они работают нормально. Очевидно проблема в использовании Windows Vista. Возможно, в Windows Vista функция ShellExecute декларируется несколько иначе.

Ссылка на комментарий
Поделиться на другие сайты

Сейчас узнал на одном форуме. Короче, в API-функциях в .net вместо типа Long нужно использовать Integer. Сейчас при декларировании функции ShellExecute везде сменил тип Long на Integer, и всё заработало. :)

Спасибо всем, кто пробовал помочь. :bye1: Модераторы, закрывайте топик.

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...