Jump to content

ShellExecute и MS Visual Basic 2008


Recommended Posts

Недавно установил 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 работал нормально.

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

Link to comment
Share on other sites

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

В новом визуал бейсике немного изменилась нотация объявлений функций 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, которого на компьютере куда сунут диск с автораном может не оказаться.

Link to comment
Share on other sites

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

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

Edited by Shadow TH
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Edited by Shadow TH
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...