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

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
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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