Вызов arj из программы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
optimizm
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.03.2006 (Пт) 13:28

Вызов arj из программы

Сообщение optimizm » 30.03.2006 (Чт) 13:46

Подскажите кто сталкивался, как правильнее распаковывать файлы из программы. Пытась просто вызывать командную строку типа
arj e 1.arj но в этом случае как узнать распокавался он или нет.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.03.2006 (Чт) 14:26

GetExitCodeProcess
Изображение

optimizm
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.03.2006 (Пт) 13:28

Сообщение optimizm » 30.03.2006 (Чт) 15:08

А есть примеры использования этой функции? Я сделал так
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, _
lpExitCode As Long) As Long

myApp = Shell(str, 4)
s=GetExitCodeProcess(myApp, Ret)
Здесь и Ret и s всегда 0. Я так понимаю это означает ошибка. но arj отрабатывает нормально, все распаковывает.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.03.2006 (Чт) 15:18

Потому что Shell возвращает PID, а GetExitCodeProcess принимает hProcess. Чтобы получить этот хендл, процесс нужно открыть функцией OpenProcess.
Изображение

optimizm
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 24.03.2006 (Пт) 13:28

Сообщение optimizm » 30.03.2006 (Чт) 15:25

Спасибо. А как вы думаете намного хуже будет если я сделаю вот так?
myApp = Shell(str, 4)
Err:
On Error Resume Next
AppActivate myApp
If Err.Number = 0 Then
GoTo Err
End If

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.03.2006 (Чт) 15:39

Никак не будет, потому что это вообще не в тему. Err не ловит ошибки других приложений.
Lasciate ogni speranza, voi ch'entrate.

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 31.03.2006 (Пт) 15:44

alibek писал(а):Никак не будет, потому что это вообще не в тему. Err не ловит ошибки других приложений.


Поэтому - GetLastError
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.03.2006 (Пт) 15:46

CORBA, иногда лучше жевать, чем говорить. Твой ответ совершенно не в тему.
Lasciate ogni speranza, voi ch'entrate.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 31.03.2006 (Пт) 21:12

Я не думаю, что arj.exe устанавливает код завершения. Давно это было...

А unrar.ocx, тут не прокатит? (не пробовал)
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.03.2006 (Пт) 21:16

Sebas писал(а):Я не думаю, что arj.exe устанавливает код завершения. Давно это было...

ERRORLEVEL точно устанавливает. А перейдет ли он в ExitCode, это у VDM надо спрашивать, но думаю перейдет.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.03.2006 (Пт) 21:31

Sebas писал(а):Я не думаю, что arj.exe устанавливает код завершения. Давно это было...

Делов-то, проверить. Так нет же, и тут схоластику разводят.

Код: Выделить всё
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const SYNCHRONIZE = &H100000

Sub Main()
Dim hProcess As Long, ReturnCode As Long
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or SYNCHRONIZE, 0, Shell("c:\dos\util\arj l " + InputBox("Имя архива")))
WaitForSingleObject hProcess, -1
Debug.Assert GetExitCodeProcess(hProcess, ReturnCode)
CloseHandle hProcess
MsgBox ReturnCode, , "Код возврата"
End Sub



Sebas писал(а):А unrar.ocx, тут не прокатит? (не пробовал)

Не прокатит.
Изображение


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

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

Сейчас этот форум просматривают: Google-бот и гости: 197

    TopList  
cron