Путь EXE из ActiveX Control

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

Путь EXE из ActiveX Control

Сообщение SSecurity » 28.02.2009 (Сб) 16:50

Всем привет!

Имеем проект, в нем форма, на форме ActiveX
Нужно, в коде ActiveX определить в каком месте сидит приложение, которое вызывает этот самый ActiveX.

Теперь зачем это нужно:
Имеется мысль о единой системе автообновления для программ, ну и ясный пень чтобы не делать для каждой системы подобные системы решил просто сделать контрол. Просто контрол ставим на форму указываем ЮРЛ откуда брать, и ИНИ-файл в котором хранить настройки. Думаю сразу становится понятно что если программ будет много то настройки автообновления лучше хранить не в папке с контролом - а в папке программы, которая обновляется ... для этого и нужно знать путь:)

НО, предвижу предложения во всех формах прописывать путь к EXE ну например строкой [ControlName].EXEPath = App.Path
идея интересная, но требует необходимости такой путь всегда прописывать ... а бывает влом.

Посему хочется увидеть предложения по реализации.
Первое что мне в голову приходит - получить от контрола hWnd и по нему определить процесс а через процесс определить путь к самому приложению.
Быть может есть путь значительно проще?

App.Path из самого контрола выдаст путь к расположению контрола, быть может есть у нас свойство чтоб по форме определить свойства приложения которое эту форму содержит?:):)

заранее благодарен за ответы:))))

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Путь EXE из ActiveX Control

Сообщение Хакер » 28.02.2009 (Сб) 17:27

Первое что мне в голову приходит - получить от контрола hWnd и по нему определить процесс а через процесс определить путь к самому приложению.

А что если у приложения нет окон? Как же нету, — скажешь ты, — а где же тогда расположен UserControl. UserControl, — скажу я, — должен использоваться только когда он действительно user's control element, т.е. когда с ним непосредственно взаимодействует пользователь, а не просто так.

Быть может есть путь значительно проще?

Разумеется. Вызвать GetModuleFileName, передав 0.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Путь EXE из ActiveX Control

Сообщение SSecurity » 28.02.2009 (Сб) 17:43

Хакер писал(а):А что если у приложения нет окон? Как же нету, — скажешь ты, — а где же тогда расположен UserControl. UserControl, — скажу я, — должен использоваться только когда он действительно user's control element, т.е. когда с ним непосредственно взаимодействует пользователь, а не просто так.

У меня они всегда будут, хотя бы потому что контрол я и выставляю сам при написании проекта:) ... Просвяти меня пожалуйста о наличии замечательного свойства InvisibleAtRuntime ... пользователь-телепат?


Хакер писал(а):Разумеется. Вызвать GetModuleFileName, передав 0.

За это спасибо:)
кстати как его правильно использовать?

UPD: пример нашел разобрался, но про InvisibleAtRuntime всеравно просвяти, интересно мнение профессиональное услышать на этот счет.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Путь EXE из ActiveX Control

Сообщение Хакер » 28.02.2009 (Сб) 17:59

SSecurity писал(а):Просвяти меня пожалуйста о наличии замечательного свойства InvisibleAtRuntime ... пользователь-телепат?

Что ты хочешь о нём знать?

SSecurity писал(а):кстати как его правильно использовать?

По тупому:
Код: Выделить всё
Public Function GetProcessFileName() As String
    Dim ret     As Long
    GetProcessFileName = Space(255)
    ret = GetModuleFileName(0, buffer, 255)
    GetProcessFileName = Left$(GetProcessFileName, ret)
End Function


Чуть умнее:
Код: Выделить всё
Public Function GetProcessFileName() As String
    Dim ret     As Long
    Dim bs      As Long
    bs = 128
    Do
        GetProcessFileName = Space(bs)
        ret = GetModuleFileName(0, GetProcessFileName, bs)
        If ret = bs Then bs = bs * 2 Else Exit Do
    Loop
   
    GetProcessFileName = Left$(GetProcessFileName, ret)
End Function
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Путь EXE из ActiveX Control

Сообщение SSecurity » 28.02.2009 (Сб) 18:11

по использованию нашел :)) просто, интересно, зачем ЮзерКонтролу который должен работать с пользователем свойство которое скрывает его:)

Вот, за пример спасибо :)))
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Путь EXE из ActiveX Control

Сообщение iGrok » 28.02.2009 (Сб) 22:31

SSecurity писал(а):по использованию нашел :)) просто, интересно, зачем ЮзерКонтролу который должен работать с пользователем свойство которое скрывает его:)

Оно скрывает его At Run-Time. Чтобы контрол не светился на форме запущенного приложения.
label:
cli
jmp label

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Путь EXE из ActiveX Control

Сообщение SSecurity » 01.03.2009 (Вс) 0:38

iGrok писал(а):Оно скрывает его At Run-Time. Чтобы контрол не светился на форме запущенного приложения.


iGrok, спасибо большое:) я в курсе того как оно работает и для ччего предназначено, просто интересно узнать почему контрол сугубо для юзеровского управления может быть скрыт от юзера:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Путь EXE из ActiveX Control

Сообщение iGrok » 01.03.2009 (Вс) 1:18

SSecurity писал(а):
iGrok писал(а):Оно скрывает его At Run-Time. Чтобы контрол не светился на форме запущенного приложения.


iGrok, спасибо большое:) я в курсе того как оно работает и для ччего предназначено, просто интересно узнать почему контрол сугубо для юзеровского управления может быть скрыт от юзера:)


Из этой фразы я так и не понял, понял ты или не понял. =)
На всякий случай уточню. Это св-во предназначено для того, чтобы сделать юзерконтрол невидимым в runtime, т.е. во время исполнения программы, но видимым во время разработки. Это нужно для контролов, которые не взаимодействуют напрямую с пользователем. Никому же нафиг не надо, чтобы пользователь видел загадочный "мониторчик" WinSock контрола где-нибудь в углу формы.. А вот для разработчика наличие визуального отображения этого контрола вполне себе удобно.

UPD:
О. Блин. Это, оказывается, я тормоз, а ты спрашиваешь совершенно с другой целью.. =)

Ну если применить всё это к вашей с Хакером беседе - не всё из того, что кем-то зачем-то сделано нужно применять.
Скажем так. Если контрол никак не взаимодействует с пользователем, то что мешает сделать его в виде класса?
А класс уже применять существенно удобнее. В частности, когда тебе понадобится добавить возможность обновления в программу в которой не будет ни одной формы (Вот только не надо говорить, что тебе никогда этого не понадобится. Когда-нибудь да понадобится. =) ) - с классом это можно будет сделать легко и непринуждённо. А вот с юзерконтролом...
Согласись, было бы намного удобнее, существуй тот же WinSock изначально в виде класса, а не в виде UserControl'а.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Путь EXE из ActiveX Control

Сообщение Хакер » 01.03.2009 (Вс) 2:01

А вы попробуйте сделать винсок в виде класса, поймёте, почему его сделали в виде UserControl-а.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Путь EXE из ActiveX Control

Сообщение iGrok » 01.03.2009 (Вс) 2:15

Хакер писал(а):А вы попробуйте сделать винсок в виде класса, поймёте, почему его сделали в виде UserControl-а.

Согласен, винсок - неудачный пример. Но мне кажется, общую мысль я донёс..
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Путь EXE из ActiveX Control

Сообщение Хакер » 01.03.2009 (Вс) 2:20

Общую мысль донёс я — бывают ситуации (и винсок тому пример), когда нечто, не требующее взаимодействия с пользователем, невыгодно оформлять в виде класса, а выгоднее сделать в виде контролла. Должна же в таком случае быть возможность его скрыть?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Путь EXE из ActiveX Control

Сообщение SSecurity » 01.03.2009 (Вс) 13:09

Смысл просто намного глубже, я конечно понимаю что некоторые вещи удобнее сделать классом, с этим я согласен ... но у меня к этому контролу ещё 8 форм взаимодействия с пользователем:) Задавать вопрос через MsgBox типа есть обновление - можно слить а можно и не сливать ... хотите? ... можно но в большинстве используемых проектов меня не устроит. Поскольку как мне кажется пользователь должен понимать, что я не обязываю его выполнять какие-либо действия, а лишь рекомендую, при этом, подробно разъясняя, что за этим может последовать ... кроме того, обновление версии может потребовать Акцептирование дополнительных соглашений, и ряд других действий которые набиваются в бАльшУщий контрол :)))))

В последствии мне останется только динамически проверить установлен ли контрол автообновления, если нет, то и не запариваться - на компе такой возможности нет и система не будет автообновляться ... причем никак на работоспособность программы это не повлияет. Если же контрол есть, то автообновления будут осуществляться по рабочему алгоритму:) Ну и обновление OCX сделать не сложно - достаточно лишь куда-угодно скачать новой контрол с версией повыше и зарегить:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Путь EXE из ActiveX Control

Сообщение Хакер » 01.03.2009 (Вс) 13:14

Ты так и не понял смысл свойства InvisibleAtRuntime :(
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Путь EXE из ActiveX Control

Сообщение SSecurity » 01.03.2009 (Вс) 13:27

Я давно этим свойством пользуюсь и смысл, я понял:))))

Не показывать контрол при выполнении программы - соответственно контрол виден только разработчику:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)


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

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

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

    TopList