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 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.