Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Shell'n'Wait Проблемка 
V
    Опции темы
vbCrLf
Дата 4.5.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



Привет!
Есть простенькая функция для запуска приложения и ожидания его завершения.

Код

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
                ByVal dwMilliseconds As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwAccess As Long, _
                ByVal fInherit As Integer, ByVal hObject As Long) As Long
  
 
  Public Sub Shell_n_Wait(Arg As String)
          Dim retVal As Long, pID As Long, pHandle As Long
          pID = Shell(Arg)
          pHandle = OpenProcess(&H100000, True, pID)
          retVal = WaitForSingleObject(pHandle, INFINITE)
  End Sub


Однако во время использования этой функции возникает много проблем.
Во-первых, Функция не всегда реагирует на завершение приложения и продолжает висеть.
Во-вторых, когда функция применяется для запуска PageMaker'a 6.0, при выходе из оного PageMaker безнадежно виснет, да и функция соответственно тоже висит.

Я буду очень благодарен, если Вы мне подскажете в чем проблема и как с нею справиться.
Я не новичек в VB, но работа с хендлами для меня почти темный лес, ещё не разбирался.
PM MAIL ICQ   Вверх
Akina
Дата 4.5.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(MSDN)

Use caution when calling the wait functions and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. A thread that uses a wait function with no time-out interval may cause the system to become deadlocked. Two examples of code that indirectly creates windows are DDE and COM CoInitialize. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than WaitForSingleObject.

RTFM, аднака.
 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vbCrLf
Дата 4.5.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



2 Akina:

К сожалению, я не имею возожности работать с MSDN.
Суть цитаты я в принципе понял, но не могу увидеть связи с проблемой PageMaker'a.
Почему PageMaker 6.5 запускается и завершает свою работу нормально, а версия 6.0 виснет при выходе? 
PM MAIL ICQ   Вверх
Akina
Дата 4.5.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(vbCrLf @  4.5.2006,  17:03 Найти цитируемый пост)
К сожалению, я не имею возожности работать с MSDN.

msdn.microsoft.com в адресной строке набить влом??? на форум как-то попадаешь - и туда попадешь.

Цитата(vbCrLf @  4.5.2006,  17:03 Найти цитируемый пост)
не могу увидеть связи с проблемой PageMaker'a.

Это и не требуется. Тебе дана рекомендация, взятая явно не с потолка - либо следуй, либо продолжай гадать 
Цитата(vbCrLf @  4.5.2006,  17:03 Найти цитируемый пост)
Почему PageMaker 6.5 запускается и завершает свою работу нормально, а версия 6.0 виснет при выходе

 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vbCrLf
Дата 4.5.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



Большое вам спасибо.  smile  
PM MAIL ICQ   Вверх
Тутанхамец
Дата 5.5.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Вот тут другой вариант решения, без хэндлов и апи:

http://forum.vingrad.ru/index.php?showtopic=89792 
PM MAIL   Вверх
vbCrLf
Дата 5.5.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



2 Тутанхамец:

Опять не получается. PageMaker зависает при выходе, если его просто запустить таким методом:
Код
Dim Hn as long
hn=Shell(PageMakerPath)


А в способе:
Код
Dim v As Variant
Set v = CreateObject("Wscript.Shell")
v.run PageMakerPath, 1, True

выполнение останавливается с ошибкой: "Метод 'Run' объекта 'IWshShell3' не выполнен".
У меня VB руссифицирован, поэтому не могу сказать как сообщение выглядит в оригинале. 
PM MAIL ICQ   Вверх
Тутанхамец
Дата 5.5.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Тут глупость такая: метод run не понимает, если в пути к файлу есть пробелы. А в пути к пэджмэйкеру у тебя наверняка пробелы (program files). 

Так вот если от этих пробелов никуда не деться, то путь должен быть заключен в кавычки. Вот этот вариант, думаю, будет работать: 

Код

Private Sub Form_Load()
Dim v As Variant
Set v = CreateObject("Wscript.Shell")
v.run Chr(34) + "C:\Program Files\Microsoft Office\Office10\winword.exe" + Chr(34), 1, True
Set v = Nothing
Beep 
MsgBox "qq"

End Sub



chr(34) - возвращает символ кавычек по их asc коду. 
 
PM MAIL   Вверх
vbCrLf
Дата 6.5.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



И правда, сам что-то не заметил. ,)
Всё работает, PageMaker не виснет,
Огромное спасибо, Тутанхамец. 
PM MAIL ICQ   Вверх
Тутанхамец
Дата 6.5.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



На здоровье. Если с вопросом покончено, пометь его решенным для порядка. У тебя как автора темы должна быть специальная ссылка над формой для ответа.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.