FindWindowByClassName в бейсике применимо?

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

FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 25.10.2008 (Сб) 18:15

Пробую из InnoSetup найти свое приложение через FindWindowByClassName , но что-то на по Form1 ни frmMyAppForm не находится. Какой класс у окна в бейсике и можно ли ему свое имя задать?
Пробовал искать по FindWindowbyWindowName и заголовку приложения, ищет хорошо, включая оанк проводника, открытые на папке с таким именем, мне такое нафиг не надо :) Можно мутексы задействовать, н оу предыдущих версий проги мутексов нету и найти их не смогу. Посоветуйте еще че-нить.

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение Хакер » 25.10.2008 (Сб) 18:37

Какого фига VB-шное окно должно иметь класс, совпадающий с именем формы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 25.10.2008 (Сб) 18:41

Да я не в курсе как выглядит имя класса окна в VB и можно ли его менять. Вот интересуюсь.

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение Sebas » 25.10.2008 (Сб) 22:18

Pantalone писал(а):Да я не в курсе как выглядит имя класса окна в VB и можно ли его менять. Вот интересуюсь.


Не путай класс окна Windows с классом VB.
Тёплое и мягкое.

В Вб можно зарегистрировать свой класс окна. Юзай WinApi.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 26.10.2008 (Вс) 0:18

Т.е. у обычного приложения я FindWindowByClassName из InnoSetup никакой получить не могу?

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение Хакер » 26.10.2008 (Вс) 0:41

Не знаем, что ты можешь получить, а что нет.

Ты скажи, какая задача.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 26.10.2008 (Вс) 3:31

Задача при запуске сетапа определить что устанавливаемая прога запущена и сказать, что надо бы выгрузить перед сетапом.
Как это сделать я теперь знаю, через mutex например. Но фигня в том что в предыдущих версиях проги никаких mutex не реализовано. Можно через FindWindowbyWindowName('AppTitle'), но если в этот момент открыта папка с именем AppTitle, то сетап на нее тоже среагирует. Можно так же попробовать FindWindowbyWindowName('AppMainWindowCaption'), но Caption у окна постоянно меняется за исключением небольшого кусочка. Вот если бы как-то на этот кусочек среагировать типа FindWindowbyWindowName('*Part*'), но как?

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение Хакер » 26.10.2008 (Вс) 10:28

А что, InnoSetup так не умеет сам?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 26.10.2008 (Вс) 14:04

Сам не умеет. Отказаться от него не могу, все остальное довольно удобно.

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение tyomitch » 26.10.2008 (Вс) 16:27

Что ли речь о ThunderRT6FormDC :?:
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 26.10.2008 (Вс) 21:20

tyomitch писал(а):Что ли речь о ThunderRT6FormDC :?:

О, дорогой! Спасибо, очень выручил :)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: FindWindowByClassName в бейсике применимо?

Сообщение Antonariy » 26.10.2008 (Вс) 22:06

Тогда уж заодно нужно удостовериться, что найденный ThunderRT6FormDC — твоей программы.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение Хакер » 26.10.2008 (Вс) 23:04

Pantalone писал(а):
tyomitch писал(а):Что ли речь о ThunderRT6FormDC :?:

О, дорогой! Спасибо, очень выручил :)

А самому? Слабо было SpyPlusPlus-ом?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 26.10.2008 (Вс) 23:55

Antonariy писал(а):Тогда уж заодно нужно удостовериться, что найденный ThunderRT6FormDC — твоей программы.

Это обязательно. Плюс так еще какой-то ThunderRT6Main маячит, надо определиться кого ловить :)

Хакер писал(а):А самому? Слабо было SpyPlusPlus-ом?

Ну не все же хакеры :)

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение tyomitch » 27.10.2008 (Пн) 0:39

Pantalone писал(а):
Antonariy писал(а):Тогда уж заодно нужно удостовериться, что найденный ThunderRT6FormDC — твоей программы.

Это обязательно. Плюс так еще какой-то ThunderRT6Main маячит, надо определиться кого ловить :)

Это, емнип, общий невидимый родитель всех форм приложения.
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 27.10.2008 (Пн) 0:47

А в InnoSetup кто-нить разбирается?
Что-то не ловит он у меня мышей, пробую так заловить программулину:

Код: Выделить всё
if (FindWindowbyWindowName('MyApp')>0) and (FindWindowbyWindowName('MyApp')=FindWindowByClassName('ThunderRT6FormDC')) then


Не срабатывает условие, странно.
А так работает:

Код: Выделить всё
if (FindWindowbyWindowName('MyApp')>0)


Но таким макаром оно работает и на окна проводника открытые в папке MyApp. Засада какая-то блин.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: FindWindowByClassName в бейсике применимо?

Сообщение Денис » 27.10.2008 (Пн) 9:02

Pantalone писал(а):Что-то не ловит он у меня

Просто не надо лепить все в одну кучу
Код: Выделить всё
A1 = FindWindowbyWindowName('MyApp')
A2 = FindWindowByClassName('ThunderRT6FormDC')
debug.print A1, A2
if (A1>0) and (A1=A2) then ...
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение Sebas » 27.10.2008 (Пн) 9:56

а не проще регистрировать свой класс окна и его находить?
а вообще, бред какойто. Чем то Вы не тем занимаетесь.


Маргиналы!(с)
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

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

Re: FindWindowByClassName в бейсике применимо?

Сообщение tyomitch » 27.10.2008 (Пн) 10:09

Денис писал(а):
Pantalone писал(а):Что-то не ловит он у меня

Просто не надо лепить все в одну кучу
Код: Выделить всё
A1 = FindWindowbyWindowName('MyApp')

Найдёт окно Эксплорера с нужным заголовком.

Денис писал(а):
Код: Выделить всё
A2 = FindWindowByClassName('ThunderRT6FormDC')

Найдёт окно левой VB-проги.

Денис писал(а):
Код: Выделить всё
debug.print A1, A2
if (A1>0) and (A1=A2) then ...

Не выполнится.


Я ж не помню, какая в Инно функция для поиска по заголовку и классу одновременно.
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Re: FindWindowByClassName в бейсике применимо?

Сообщение Pantalone » 27.10.2008 (Пн) 12:32

tyomitch писал(а):Я ж не помню, какая в Инно функция для поиска по заголовку и классу одновременно.

Точно есть такая?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: FindWindowByClassName в бейсике применимо?

Сообщение Денис » 27.10.2008 (Пн) 13:13

Pantalone писал(а):Точно есть такая?

Если innosetup просто работает с API то вот эта:
Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

вызывается предположительно так:
Код: Выделить всё
wnd = FindWindow "ThunderRT6FormDC", "MyApp"
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList