Shadow TH Опубликовано 2 ноября, 2008 Жалоба Поделиться Опубликовано 2 ноября, 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 работал нормально. В чём проблема? Ссылка на комментарий Поделиться на другие сайты Поделиться
itanko Опубликовано 2 ноября, 2008 Жалоба Поделиться Опубликовано 2 ноября, 2008 В чём проблема? В новом визуал бейсике немного изменилась нотация объявлений функций 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 Опубликовано 2 ноября, 2008 Автор Жалоба Поделиться Опубликовано 2 ноября, 2008 (изменено) Спасибо, за помощь, но это не помогло. Дело в том, что и в предыдущем варианте кода компилятор не выдавал никаких ошибок, значит объявление функции было сделано верно. Но почему-то во время работы программы она не выполняется. Изменено 2 ноября, 2008 пользователем Shadow TH Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 4 ноября, 2008 Автор Жалоба Поделиться Опубликовано 4 ноября, 2008 Сейчас пробовал использовать другие API-функции - они работают нормально. Очевидно проблема в использовании Windows Vista. Возможно, в Windows Vista функция ShellExecute декларируется несколько иначе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 7 ноября, 2008 Автор Жалоба Поделиться Опубликовано 7 ноября, 2008 (изменено) Сейчас узнал на одном форуме. Короче, в API-функциях в .net вместо типа Long нужно использовать Integer. Сейчас при декларировании функции ShellExecute везде сменил тип Long на Integer, и всё заработало. :) Спасибо всем, кто пробовал помочь. :bye1: Модераторы, закрывайте топик. Изменено 7 ноября, 2008 пользователем Shadow TH Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти