Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как из VB запустить exe файл?

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
Вообще я файлы запускал с помощью функции:
Dummy = Shell("путь", параметр)
Но вот проблема, большие программы(типа GTA III, Mafia, Counter strike и тп.) не запускает, ругается и все. Кто знает, может можно как-нибудь по другому запускать?

зы: не в тему :D , при регистации заметил ощибку(буква Р в слове опция)) Легкий ввод vbCode?
Если вы включите эту оРцию, то на страницах создания сообщения будет выведен интерфейс простого использования vbCode.
Страницы:
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by Санчез
Вообще я файлы запускал с помощью функции:
Dummy = Shell("путь", параметр)
Но вот проблема, большие программы(типа GTA III, Mafia, Counter strike и тп.) не запускает, ругается и все. Кто знает, может можно как-нибудь по другому запускать?

зы: не в тему :D , при регистации заметил ощибку(буква Р в слове опция)) Легкий ввод vbCode?
Если вы включите эту оРцию, то на страницах создания сообщения будет выведен интерфейс простого использования vbCode.



Попробуй CreateObject(class,[servername])

class Required; Variant (String). The application name and class of the object to create. :-?

ServerName я думаю в твоем случае не пригдится...

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
Или я тупой, или ты не понял че я хотел...
С твоим предложение вообще ниче не получилось(по моему это вобще чушь какая-то). Или напиши код полный(путь куда вставлять то там???)
Объясняю что мне надо. Например на форме есть кнока, при нажатии на которую открыватся программа(в моем случае игра), и обязятельно больших размеров(не калькулятор! или типа него). Как это сделать?
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by Санчез
Или я тупой, или ты не понял че я хотел...
С твоим предложение вообще ниче не получилось(по моему это вобще чушь какая-то). Или напиши код полный(путь куда вставлять то там???)
Объясняю что мне надо. Например на форме есть кнока, при нажатии на которую открыватся программа(в моем случае игра), и обязятельно больших размеров(не калькулятор! или типа него). Как это сделать?



В этом случае путь не прописывается...
...а класс - берешь из реестра (если игра там прописана)...
...Например:
Set XL=CreateObject("Excel.Application")
...

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
Set XL=CreateObject("Excel.Application")
Понятно все кроме того что в скобках. Более точно опиши откуда берется. А то ведь реестр большой...
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by Санчез
Set XL=CreateObject("Excel.Application")
Понятно все кроме того что в скобках. Более точно опиши откуда берется. А то ведь реестр большой...



В данном случае из HKEY_CLASSES_ROOT, но есть одно но:
таким образом я запускал только Майкрософтовские проги, на играх тестить не могу, т.к. у меня их и дома нету, а тем более на работе...
...хотя...
есть такая штука, называется WinSpy (у меня в составе программы nnCron)...
...так вот при помощи ее можно узнать очень много интересного про интересующую тебя прогу (в том числе и класс)...
...пробуй:)

478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
...Или Spy++, в Visual Studio...
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
просматривал реестр вручную...них.я связаного с играми нет
Скачал этот ннкрон, прикольная вещь, тока никаких классов связанных с играми не находит(видать их просто нету в отличие от микрософтских прог)
Ну кто еще может посоветовать? А то очень нужно это.

зы: цитировать необязятельно )))
267
22 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Интересно, а почему ругается Shell? Я думал, ему пофигу, какие ехешники... :???:
459
22 октября 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by Cutty Sark
Интересно, а почему ругается Shell? Я думал, ему пофигу, какие ехешники... :???:



Warcraft-3 у меня запустился из Shell в VBA.
Либо эта игра не столь ресурсоемка. Либо у меня этих ресурсов много.

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
Цитата:
Originally posted by gacol


Warcraft-3 у меня запустился из Shell в VBA.
Либо эта игра не столь ресурсоемка. Либо у меня этих ресурсов много.


Ворик почти не жрет ничего, у меня он тож запускается, а вот помощнее(Battle field например)
не хочет. Я просто не точно на счет "ругается" выразился. Он либо а)виснет б)ноль эффекта. На счет ресурсов: у меня проц 1.8 Ггц и 512мб оперативки, я думаю этого достаточно.

258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Функция Shell является обрезанным вариантом winAPI ShellExecute, судя по твоим словам, рискну предположить что ей не нравится программы открываемые в полноэкранном режиме (а у них еще часто видеоролики всякие в начале вставляют), думаю здесь собака порылась, как вариант - использовать, такую функцию, которая является оберткой WinAPI ShellExecute:

Модуль:
Код:
Option Compare Database
Option Explicit

'************ Code Start **********



Private Declare Function apiShellExecute 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

'***App Window Constants***
Public Const WIN_NORMAL = 1    'Open Normal
Public Const WIN_MAX = 2    'Open Maximized
Public Const WIN_MIN = 3    'Open Minimized

'***Error Codes***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

'***************Usage Examples***********************
'Open a folder: ?ShellExecuteMy("C:\TEMP\",WIN_NORMAL)
'Call Email app: ?ShellExecuteMy("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL: ?ShellExecuteMy("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
' ?ShellExecuteMy("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
' ?ShellExecuteMy("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************

Function ShellExecuteMy(stFile As String, lShowHow As Long)
    Dim lRet As Long, varTaskID    As Variant
    Dim stRet                      As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
                           stFile, vbNullString, vbNullString, lShowHow)

    If lRet > ERROR_SUCCESS Then
        stRet = vbNullString
        lRet = -1
    Else
        Select Case lRet
            Case ERROR_NO_ASSOC:
                'Try the OpenWith dialog
                varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _
                                & stFile, WIN_NORMAL)
                lRet = (varTaskID <> 0)
            Case ERROR_OUT_OF_MEM:
                stRet = "Error: Out of Memory/Resources. Couldn't Execute!"
            Case ERROR_FILE_NOT_FOUND:
                stRet = "Error: File not found. Couldn't Execute!"
            Case ERROR_PATH_NOT_FOUND:
                stRet = "Error: Path not found. Couldn't Execute!"
            Case ERROR_BAD_FORMAT:
                stRet = "Error: Bad File Format. Couldn't Execute!"
            Case Else:
        End Select
    End If
    ShellExecuteMy = lRet & _
                     IIf(stRet = "", vbNullString, ", " & stRet)
End Function
'************ Code End **********
258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Дико извиняюсь, примерчик для Access, так что слова hWndAccessApp надо заменить на Application.hwnd
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
мож я чето не правильно сделал, но предложенный вариант не работает.
1) Option Compare Database - не хочет принимать , выделяет как ошибку, просит чтоб вместо database ввели Text или Binary
2) Как я понял весь код вставляется в модуль. Вставил.
3)Usage Examples - это типа пример? Какой из них использовать? я использовал строки(сразу говорю пути я использовал свои и пытался загрузить exeшник в обоих примерах)
а)?ShellExecuteMy("C:\TEMP\TestThis",Win_Normal)
б)?ShellExecuteMy("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
не одна из них не пошла, при их вызове говорит переменна не определена - Application.hwnd

Если у когото пошла, выложите исходник для скачивания.
258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Option Compare Database - это лишняя строчка, от Access осталась.

Вот, выкладываю рабочий вариант, просто нажми кнопку.

P.S. на играх проверить не могу, так как не имею их на работе, это остается за тобой
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
В xml работает, при преносе в VB не пашет, говорит что переменная не определена Application.hWnd(выделяет то что до точки). Что вобще там должно находится? Мож вручную попробовать прописать?
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by Санчез
В xml работает, при преносе в VB не пашет, говорит что переменная не определена Application.hWnd(выделяет то что до точки). Что вобще там должно находится? Мож вручную попробовать прописать?



Тут, я так понял, используется Экселевский OpenFileName-диалог, поетому в VB он работать не будет...

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
щас попробовал поманипулировать с обычным шеллом вот что получилось:
1) Если открываеш программу, которая должна открывать игру, вручную (при этом помещаеш свою прогу в папку игры), то игра ЗАПУСКАЕТСЯ.
2) Если просто пытаешься открыть прогу которая должна открыть игру (при это твоя прога не лежит в папке игры), то игра НЕ ЗАПУСКАЕТСЯ.
3) Если пытаешся открыть программу которая должна открыть другую программу(которая лежит в папке игры) которая должно открыть игру, то нифига не получается.
Короче чушь полная какая-то. Я так и не понял в чем прикол.

ps Замутно написано так что внимательней читайте)
267
22 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Санчез
щас попробовал поманипулировать с обычным шеллом вот что получилось:
1) Если открываеш программу, которая должна открывать игру, вручную (при этом помещаеш свою прогу в папку игры), то игра ЗАПУСКАЕТСЯ.
2) Если просто пытаешься открыть прогу которая должна открыть игру (при это твоя прога не лежит в папке игры), то игра НЕ ЗАПУСКАЕТСЯ.
3) Если пытаешся открыть программу которая должна открыть другую программу(которая лежит в папке игры) которая должно открыть игру, то нифига не получается.
Короче чушь полная какая-то. Я так и не понял в чем прикол.

ps Замутно написано так что внимательней читайте)



Странно, причем тут папки-мамки? Может, ты с путями ошибся?

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
Цитата:
Originally posted by XtreamAll


Тут, я так понял, используется Экселевский OpenFileName-диалог, поетому в VB он работать не будет...


Я еще не такой тупой))) Я все часть с открытием OpenFileName-диалога удалил и вручную прописал путь, просто не помню как на VB аналогичная функция пишется.

478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
У тебя ведь имена файлов фиксированные?
Если да, то передавай в fileToOpen String-константу, содержащую полное имя твоего файла (т.е. с путем к ниму), и так для каждой кнопки...
...и еще в начале кинь строку:
ChDir PathToGame 'Путь к екзешнику игры...
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
Не, с путями все нормально, я тока что еще раз все проверил. Глюк просто какой-то. Мож просто винда выеживается )))
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
вот что получилось:

Private filepath As String

Private Sub cmd1_Click()
Dim filepath As String
ChDir "D:\Games\Battlefield 1942 The Road to Rome"
filepath = "D:\Games\Battlefield 1942 The Road to Rome\BF1942.exe"
dummy = Shell(filepath, vbNormalFocus)
End Sub

Private Sub cmd2_Click()
ChDir "D:\Games\Battlefield 1942 The Road to Rome"
filepath = "D:\Games\Battlefield 1942 The Road to Rome\BF1942.exe"
Call ShellExecuteMy(filepath, WIN_NORMAL)
End Sub

это 2 разные кнопки. не одна из них не пашет. Модуль подсоединен. При нажатии 2ой кнопки выдает все тоже: переменная не определена Application.hWnd. У меня такое чувство что Application.hWnd вообще не в тему(или ее на аналог в vb замениь надо), он с ней даже компилировать не хочет.
258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Я не знал что ты в VB6 пишешь. Замени тогда Application.hWnd на Me.hwnd (форма то у тебя есть в проге?)
258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Но для проверки работоспособности winAPI Shella можно и Excel файлом пользоваться: через него твои программы запускается или нет???
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
1) Application.hWnd на Me.hwnd менять толку нет, таже ошибка. Вместо me пробовал еще имя формы ставить,компилирует но эффекта ноль, НО если откомпелированную прогу в папку к игре кидаеш то работает )))
2) в excel работает(если модуль с оснвным кодом не менять, а менять тока часть вызова игры)
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
To SergeySV:
Ты передаешь в apiShellExecute hWnd Excel-я?
Я так понял там требуется хэндл "детонатора"...
...если я прав, то:
To Санчез:
Public Declare Function GetFocus Lib "user32"
Public YourApphWnd as Long
Alias "GetFocus" () As Long
Сразу после запуска формы:
YourApphWnd=GetFocus(),
и тогда:
lRet = apiShellExecute(YourApphWnd, vbNullString, stFile, vbNullString, vbNullString, lShowHow)
...иначе (там ведь ByVal hWnd) не передавай ничего...
...попробуй.
258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
apiShellExecute(YourApphWnd,



- туда следует пихать hWnd программы из которой ты инициируешь процесс запуска.
В Vb6 в этой роли выступает hWnd твоей формы (на ней же расположена кнопка, нажимая на которого ты запускаешь эту функцию) - т.е. Me.hWnd

Теперь о компиляции, если ты засунул все это в отдельный модуль в Vb6, то там конечно объект Me не существует и не виден, просто надо тогда немного изменить функцию ShellExecuteMy вот так:
ShellExecuteMy(ApphWnd as Long, stFile As String, lShowHow As Long)

а в коде, написать: apiShellExecute(ApphWnd, и т.д.

ну а вызывать из обработчика кнопки:
Call ShellExecuteMy(Me.hwnd, "C:\ля-ля",Win_Normal)

478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
....или

Public Declare Function GetFocus Lib "user32" _
Alias "GetFocus" () As Long
Public YourApphWnd as Long

Load UserForm1
UserForm1.Show
'Сразу после запуска формы:
YourApphWnd=GetFocus()'.....
Call ShellExecuteMy(fileToOpen, WIN_NORMAL, _
YourApphWnd)
'и тогда:
'....
lRet = apiShellExecute(YourApphWnd, _
vbNullString, stFile, vbNullString, _
vbNullString, lShowHow)
1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
я конечно рад что стока предложений(хоть мозги поразмять), но вы хоть на vb таоке пробовали или тока на excel'e. А то строка: Alias "GetFocus" () As Long - вобще безсмысленна, тем более странно что GetFocus находистя в кавычках, и функция GetFocus насколько я помню используется для фокусировки на элементах. Alias я первый раз вижу и vb его тоже не признает. Даже если его сменить на Public, Private или т.п. то ничего не получится т.к. чуть позже(как я понял это надо вставить в загрузку формы) YourApphWnd=GetFocus(), переменная равняется пустому массиву и происходит ошибка.
Да и еще одно у меня уже пол второго ночи так что я скоро спать пойду.
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
...да! согласен! ошибся!
Но ведь надо смотреть что и куда вставляешь!!!

Это пишется до начала Саба:

Public Declare Function GetFocus Lib "user32" _
Alias "GetFocus" () As Long
Public YourApphWnd as Long

потом:

Sub main()
Load UserForm1
UserForm1.Show
YourApphWnd=GetFocus()'.....
'.....и вот тута ты получил Хэндл своей формы
'который и надо передавать в те функции...т.е.
Call ShellExecuteMy(fileToOpen, WIN_NORMAL, _
YourApphWnd)
'....
end sub
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
To Санчез:

Ты случаем не из Уфы???
Уж очень ник у тебя знакомый...
267
22 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by XtreamAll
To Санчез:

Ты случаем не из Уфы???
Уж очень ник у тебя знакомый...



Пол-второго ночи - это плюс 7 от Москвы. Тянет на Хабаровск или Владивосток.

478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by Cutty Sark


Пол-второго ночи - это плюс 7 от Москвы. Тянет на Хабаровск или Владивосток.



Понятно...
...есть один знакомый Санчес в Уфе, ...
...но ...да, у них где то +3 или +4.

...у меня вообще только 18.02 (рабочий день подошел к концу)

так что до завтра:)

1.9K
22 октября 2003 года
Санчез
97 / / 22.10.2003
to Cutty Sark прям в точку) Уссурийск, тока тема не о этом.
Сделал, откомпилировал, работает но эффекта как и говорил раньше ноль. Запускается, жмеш на кнопку появляются часы сек 10 проходит и ниче не происходит, а кидаеш в папку игры))) работает)))...
258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
CS у тебя говоришь не запускается нормально, ладно, приду домой, проверю,... поставлю пара хэдшотиков из пустынного орла ;)
1.9K
24 октября 2003 года
Санчез
97 / / 22.10.2003
Вот щас затестил игры какие есть на открываемость, вот что получилось:
открываются - Warcraft III ; Fallout 2 ;
не открываются - Battlefield 1942 ; Blade of Darkness ; Empire Earth ; The Sims Unleashed
Как и говорил раньше, если прогу кидать в папку с игрой - то открывается все, иначе не фурычит. Попробуйте у кого есть пооткрывать те которые у меня не открываются, мож просто у меня комп глючит... Я как понял надо ему надо указать рабочий каталог игры(тут XtreamAll уже предлагал вариант: ChDir PathToGame 'Путь к екзешнику игры... , тока толку о него нету), мож кто еще че наподобие этого знает?
478
24 октября 2003 года
XtreamAll
279 / / 01.10.2003
Здарова!

Насчет ChDir:
писал прогу (планировщик задач), для системы управления предприятием...
...тут наткнулся на то, что все пути в этой системе - относительные (не подключались модули).
...при помощи ChDir "чекнул" нужную дерикторию...
...и усе заработало!

Так вот. Я думаю в твоем случае проблема похожая.
1.9K
24 октября 2003 года
Санчез
97 / / 22.10.2003
куда я тока этот ChDir не пихал... уже не знаю куда еще его засунуть можно. Мож выложиш кусок с этим ChDir'ом, мож я его всетаки не туда сую.
478
24 октября 2003 года
XtreamAll
279 / / 01.10.2003
Щас попробовал воссоздать описанные тобой условия и ChDir работать не захотел...

...тогда я нашел такую вот штуку (API):

'Это вставь в модуль с функцией ShellExecuteMy,
'но только не в саму ф-ю!!! а перед ней...

Public Path As String
Public Declare Function SetCurrentDirectory _
Lib "kernel32" Alias "SetCurrentDirectoryA" _
(ByVal lpPathName As String) As Long

...а потом уже в самой ф-ии, сразу перед вызовом:
lRet = apiShellExecute(Form1.hWnd, _
vbNullString, stFile, vbNullString, _
vbNullString, lShowHow)
...вставляй:
SetCurrentDirectory (Path)

У меня только что получилось!
Удачи.
239
24 октября 2003 года
Dolonet
1.7K / / 20.05.2000
Начт так: все дело скорее всего в папке, откуда открываешь. Надеюсь, со мной все согласны, т.е. если папка не та, то в некоторых случаях игры не грузится. Попробуй сделать так: откомпилируй свою прогу и отредактируй в нем... щас скажу... поле "start in". Должно помочь в случае глючных программ. Если заработает, но бут влом запускать ярлыки ручками по одному, сделай шелом загрузку ярлычков %) Все просто!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог