Запустить другую прогу.....

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Запустить другую прогу.....

Сообщение Алекс » 10.06.2003 (Вт) 10:55

Как запустить другую прогу из своей???:?
Алекс.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 10.06.2003 (Вт) 11:01

Самый простой путь:

shell "путь к файлу"
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 10.06.2003 (Вт) 13:05

а самый сложный : CreateProcess, но он даёт тебе больше возможностей, особенно если хочешь запустить не exe-файл
Shell обращается к CreateProcess( с параметрами по умолчанию )

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Ответ

Сообщение Алекс » 11.06.2003 (Ср) 6:17

Спасибо, shell работает.
basicom: Как работать с СreateProcess
Алекс.

TRUST
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 192
Зарегистрирован: 22.08.2002 (Чт) 20:24
Откуда: Orel

Сообщение TRUST » 11.06.2003 (Ср) 10:41

Самый классный путь - это ShellExecute. Прелесть в том, что он позволяет запускать не только проги, но и файлы, связаные с прогами, например передаешь ей в качестве параметра txt-файл, то он открывается в блокноте. Вот. На:
Код: Выделить всё
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

Sub Execute( _
    ByVal CommandLine As String, _
    Optional ByVal Parameters As String = "")

ShellExecute 0, "open", CommandLine, Parameters, "", 0
End Sub


Это ф-ция из моего 2д-движка, поэтому все так красиво:D.
Кто юзал мой аккаунт и весь его выюзал?!!

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 11.06.2003 (Ср) 12:15

Алекс:с СreateProcess можно работать так:

Public Const INFINITE = &HFFFF
'StartupInfo constants
Public Const STARTF_FORCEOFFFEEDBACK = &H80
Public Const STARTF_FORCEONFEEDBACK = &H40
Public Const STARTF_RUNFULLSCREEN = &H20
Public Const STARTF_USECOUNTCHARS = &H8
Public Const STARTF_USEFILLATTRIBUTE = &H10
Public Const STARTF_USEPOSITION = &H4
Public Const STARTF_USESHOWWINDOW = &H1
Public Const STARTF_USESIZE = &H2
Public Const STARTF_USESTDHANDLES = &H100
'ShowWindow constants
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10

Public Type vbAppWinStyle
vbHide As Integer
vbMaximizedFocus As Integer
vbMinimizedFocus As Integer
vbMinimizedNoFocus As Integer
vbNormalFocus As Integer
vbNormalNoFocus As Integer[/size]
End Type

Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Public Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Private Sub Form_Load()

Dim si As STARTUPINFO

si.wShowWindow = vbMaximizedFocus
si.dwFlags = STARTF_USESHOWWINDOW
CreateProcess("c:\путь программы.exe", "командная строка программы.exe", ByVal 0&, ByVal 0&, False, 0, ByVal 0&, "путь запускаемого файла", si, pi)
End Sub

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 12.06.2003 (Чт) 6:54

trust Опиши как вызывать ShellExecute, а то не пашет.....:cry::(:evil:
BasicomПишу так:
Модуль:
Код: Выделить всё
Public Type vbAppWinStyle
vbHide As Integer
vbMaximizedFocus As Integer
vbMinimizedFocus As Integer
vbMinimizedNoFocus As Integer
vbNormalFocus As Integer
vbNormalNoFocus As Integer
End Type

Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Public Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Форма:
Код: Выделить всё
Const INFINITE = &HFFFF
'StartupInfo constants
Const STARTF_FORCEOFFFEEDBACK = &H80
Const STARTF_FORCEONFEEDBACK = &H40
Const STARTF_RUNFULLSCREEN = &H20
Const STARTF_USECOUNTCHARS = &H8
Const STARTF_USEFILLATTRIBUTE = &H10
Const STARTF_USEPOSITION = &H4
Const STARTF_USESHOWWINDOW = &H1
Const STARTF_USESIZE = &H2
Const STARTF_USESTDHANDLES = &H100
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_MAXIMIZE = 3
Const SW_SHOWMAXIMIZED = 3
Const SW_SHOWNOACTIVATE = 4
Const SW_SHOW = 5
Const SW_MINIMIZE = 6
Const SW_SHOWMINNOACTIVE = 7
Const SW_SHOWNA = 8
Const SW_RESTORE = 9
Const SW_SHOWDEFAULT = 10




Private Sub Form_Load()

Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
si.wShowWindow = vbMaximizedFocus
si.dwFlags = STARTF_USESHOWWINDOW
Call CreateProcess("C:\WINDOWS\NOTEPAD.EXE", "", ByVal 0&, ByVal 0&, False, 0, ByVal 0&, "E:/readme.txt", si, pi)
End Sub

Запускаю..................................... Ничего не происходит:?:?:?:?:?:?:?:?
Алекс.

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 12.06.2003 (Чт) 8:15

Перед вызовом функции:
cb as long - это размер структуры
si.cb=len(si)

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 15.06.2003 (Вс) 6:32

Тот же результат :(
Ещё вопрос...
Открываю прогу (другую) через shell. Как сделать, чтобы она развернулась на экран сразу?
Алекс.

Dino
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 20.03.2002 (Ср) 20:05
Откуда: Russia

Сообщение Dino » 15.06.2003 (Вс) 6:46

Так ведь для запуска проги на полный экран вролне хватит и команды Shell, просто пишешь:

Shell "notepad.exe", vbMaximizedFocus
и, блокнот запускается на полный экран :!:

Удачи.

TRUST
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 192
Зарегистрирован: 22.08.2002 (Чт) 20:24
Откуда: Orel

Сообщение TRUST » 16.06.2003 (Пн) 0:40

Пихаешь все, что я тебе там понаписал, в модуль (можно и в форму).
Потом:
Код: Выделить всё
Execute "sometext.txt"


А в чем, собсна, была проблема?
Кто юзал мой аккаунт и весь его выюзал?!!

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 16.06.2003 (Пн) 15:58

Пишу всё точно так-же
Код: Выделить всё
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

Sub Execute( _
    ByVal CommandLine As String, _
    Optional ByVal Parameters As String = "")

ShellExecute 0, "open", CommandLine, Parameters, "", 0
End Sub

Private Sub Form_Load()
Execute ("D:/readme.txt")
End Sub

НО НИЧЕГО НЕ ПРОИСХОДИТ!!!!!!!!!!!!!![/b]
Алекс.

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 17.06.2003 (Вт) 6:30

если написать не
E:/readme.txt
а вот так E:\readme.txt
то всё работает(CreateProcess), думаю, что и во втором случае тоже самое :D

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 17.06.2003 (Вт) 10:46

Не, не из-за, Basicom.
Так тоже пробовал..............[/b]
Алекс.

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 17.06.2003 (Вт) 10:52

Basicom: Не из-за этого...
Проверял уже раньше :wink:
Алекс.

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 17.06.2003 (Вт) 11:15

Ну не знаю....
Во первых я скопировал твой код с функцией CreateProcess
Во вторых открыл новый проект VB4.0 и вставил туда текст
В третьих исправил "E:/readme.txt" на "c:\readme.txt"
В четвёртых запустил Run
Результат : запустился блокнот......
Винда 98SE , может у тебя NT или 2000 я не знаю какие там различия в ядре.
Проверь мелочи. Я когда разбирался с ней долго мучался - дня три писал программу для запуска файла. Оказалось - все причины в мелочах.......

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 17.06.2003 (Вт) 11:30

Вот что у меня работает уже год:
Module:
Option Explicit
Public Const INFINITE = &HFFFF
'StartupInfo constants
Public Const STARTF_FORCEOFFFEEDBACK = &H80
Public Const STARTF_FORCEONFEEDBACK = &H40
Public Const STARTF_RUNFULLSCREEN = &H20
Public Const STARTF_USECOUNTCHARS = &H8
Public Const STARTF_USEFILLATTRIBUTE = &H10
Public Const STARTF_USEPOSITION = &H4
Public Const STARTF_USESHOWWINDOW = &H1
Public Const STARTF_USESIZE = &H2
Public Const STARTF_USESTDHANDLES = &H100
'ShowWindow constants
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10
Public Type vbAppWinStyle
vbHide As Integer
vbMaximizedFocus As Integer
vbMinimizedFocus As Integer
vbMinimizedNoFocus As Integer
vbNormalFocus As Integer
vbNormalNoFocus As Integer
'Public Const vbHide = 0
'Public Const vbMaximizedFocus = 3
'Public Const vbMinimizedFocus = 2
'Public Const vbMinimizedNoFocus = 6
'Public Const vbNormalFocus = 1
'Public Const vbNormalNoFocus = 4
End Type
Public Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Public Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long


Form1:

Option Explicit

Public Function RunAndWait(ComLine As String, DefaultDir As String, ShowFlag As Integer) As Boolean
Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
si.wShowWindow = ShowFlag
si.dwFlags = STARTF_USESHOWWINDOW
round: If CreateProcess("c:\Program Files\Symantec\pcAnywhere\awrem32.exe", ComLine, ByVal 0&, ByVal 0&, False, 0, ByVal 0&, DefaultDir, si, pi) Then
WaitForSingleObject pi.hProcess, INFINITE
GoTo round
CloseHandle pi.hProcess
RunAndWait = True
Exit Function
End If
RunAndWait = False
End Function

'Вызов функции:
Private Sub Form_Load()
If RunAndWait("Call c:\ks.chf", "c:\", vbMaximizedFocus) Then
MsgBox "Перезагрузите компьютер!!!"
End If
End Sub


P.S.
Из вышеописанного можно понять, что на машине установлена программа pcAnywhere и создан файл ks.chf при запуске, которого машина коннектится по сети с другой машиной, если сеанс закрыть, то она снова запустится.... и так до умопомрачения пока не выгрузить проект....... :lol:
По анологии можно запускать и другие вещи....
Почитай доку на API для той винды на которой работаешь, поищи в и-нете у тех кто работает на Delphi часто мусолятся эти темы.....
Удачи тебе....... :D

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 17.06.2003 (Вт) 12:45

А файл и вправду не запускается!
Только именно с D и именно readme.txt :P :?:
если по другому назвать то все работает :!:
Он вообще ни как не открывается с D
Mirus

TRUST
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 192
Зарегистрирован: 22.08.2002 (Чт) 20:24
Откуда: Orel

Сообщение TRUST » 17.06.2003 (Вт) 16:26

Да быть такого не может! Во-первых, попробуй не в Load, а в кнопку. Во-вторых, скобочки убери.

Если не будет работать - пришлю дебе сырец.

Ядро на это никак не влияет - у меня и на 95, и на 98, и на Me, и на 2000, и на ХР работало!
Кто юзал мой аккаунт и весь его выюзал?!!

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 17.06.2003 (Вт) 21:55

TRUST
Код абсолютно верен! Видимо Алекс нашел яйцо пасхальное в 98 винде :D.
Из корня диска D не хочет открываться файл readme.txt!
Mirus

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.06.2003 (Ср) 10:06

Ох, люди, человеки... Неужели нельзя с трёх пальцев список процессов вызвать и узреть, что блокноты прекерасно запускаются, просто не отображаются? И неужели нельзя позырить в апигайд и узнать, что надо указать Const SW_SHOWNORMAL = 1? :wink:

Код: Выделить всё
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

Private Const SW_SHOWNORMAL = 1&

Sub Execute( _
    ByVal CommandLine As String, _
    Optional ByVal Parameters As String = "")
  ShellExecute 0&, vbNullString, CommandLine, Parameters, vbNullString, SW_SHOWNORMAL
End Sub

Private Sub Form_Load()
  Execute "D:\readme.txt"
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 18.06.2003 (Ср) 10:10

ПОМОГИТЕ!!!!!!!!!!!!!
НИЧЕГО НЕ РАБОТАЕТ...............
Может исходничек дадите?????
Пробовал С:\Мои документы\мне.txt и / и \
И с () и без.. :x
Алекс.

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 18.06.2003 (Ср) 12:47

А так попробуй
Код: Выделить всё
Option Explicit
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
Sub Execute(ByVal CommandLine As String, Optional ByVal Parameters As String = "")
ShellExecute Form1.hwnd, "Open", CommandLine, Parameters, vbNullString, 1
End Sub
Private Sub Form_Load()
Dim f As Integer
f = FreeFile
Open "c:\1.txt" For Append As f
Print #f, "zzzzzzzzzzzzzz"
Close f
Execute "c:\1.txt"
End Sub
Mirus

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Сообщение Алекс » 18.06.2003 (Ср) 15:25

Спасибо MIRUS.
Так работает. Запускается даже злосчастный Е:\Ридми.ткст.
Алекс.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 3

    TopList