Handle главного Excel

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

Handle главного Excel

Сообщение Avtopic » 06.04.2007 (Пт) 21:44

Здравствуйте!

Это продолженные задачи “Hook на окно Excel” (в форуме VBA) но тема по существу другая и рискнул написать сюда.

Вопрос у меня такой:
имею MDI форму. Запускаю оттуда Excel

через определенные интервалы, нахожу Handle Foreground окна и сравниваю ее
Frgn_pid и pid моего Excel, плюс сравниваю exe файл этого Frgn_pid и "Excel.exe"
если все это условие удовлетворяется, пишу
SetParent hWnd Excel, hWnd_ MDI
так все работает, Excel полностью в моем окне.


вариант 2.
Запускаю из MDI формы Excel. жду, пока он хорошо откроется : ))
и начинаю перебирать все открытие окна, для всех нахожу ID процесса и проверяю условие как в первом варианте pid= pid_Excel и exe = "Excel.exe"
если все это условие удовлетворяется, пишу
SetParent hWnd Excel, hWnd_ MDI
В мое окно попадает не аппликация Excel, а книга Book1

вы скажете, что в место окно Excel я нашел окно книги. Но, перебирая, проверяю пока Parent hWnd, не ровняется нулю.
Это условие вместе с проверкой pid и exe по моему должно вернуть Handle Excel главного, нет?

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

Сообщение Antonariy » 06.04.2007 (Пт) 22:19

А все граздо проще...
Excel.Application.hwnd
Лучший способ понять что-то самому — объяснить это другому.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 06.04.2007 (Пт) 22:40

Мама! :shock:
Неужели такое существует?
Чего же тогда его ищут через FindWindow …”XLMAIN”, vbNullstring…
С утра это окно ищу, неужели все так просто… :evil:

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

Сообщение GSerg » 06.04.2007 (Пт) 22:52

Avtopic писал(а):Чего же тогда его ищут

Потому что hwnd появилось в Excel XP или около того, а раньше не было.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 06.04.2007 (Пт) 23:54

Мда... :(
Приехал домой, проверил, точно его в 2000 нет.
Значит вопрос остается открытым…

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 07.04.2007 (Сб) 15:36

Нашел причину, но объяснить не могу.
Не имеет значение, каким путем нахожу Handle, перебором окон, FromPoint, ActiveWindow или ForegroundWindow,
Handle позволяет манипулировать главным окном Excel, если окно находится в SHOWNORMAL, или открыто vbNormalFocus.
При MAXIMIZED, MINIMIZED состоянии, оно, по-моему, соответствует окну книги внутри аппликации. Пишу “по-моему”, потому, что окно вдобавок имеет Formula Bar ???.

т. е. теоретически, решение нашел, а практически уперся в другой вопрос,

если запускаю Excel, Set Exc = New Excel.Application и т.д. с Exc могу делать все по своему усмотрению.
посоветуйте, пожалуйста,
как привязать этот Exc к запушенной аппликации, если Excel запускаю через Shell.
какой-то замкнутый круг,
Shell нужен мне чтобы иметь pid для нахождения Handle-а, но тогда не знаю как привязаться переменной Exc к этой аппликации, а запустив через Set Exc = New Excel.Application, уже не имею pid и соответственно возможность нахождения Handle-а и других прочих
Спасибо!

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

Сообщение alibek » 07.04.2007 (Сб) 15:39

А ты не забыл, что Excel -- это MDI-приложение?
Lasciate ogni speranza, voi ch'entrate.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 07.04.2007 (Сб) 15:55

Все что находится выше этой цитаты и до начала топика, как раз посвящается тому, что Excel -- это MDI-приложение : ))
и этот Handle то MDI окна нахожу, то книги, в зависимости от того, в каком состоянии главное окно. И если оно находится в SHOWNORMAL, то проверил по всякому, Handle от главного окна Excel.
Avtopic писал(а):т. е. теоретически, решение нашел, а практически уперся в другой вопрос,

если запускаю Excel, Set Exc = New Excel.Application и т.д. с Exc могу делать все по своему усмотрению.
посоветуйте, пожалуйста,
как привязать этот Exc к запушенной аппликации, если Excel запускаю через Shell.
какой-то замкнутый круг,
Shell нужен мне чтобы иметь pid для нахождения Handle-а, но тогда не знаю как привязаться переменной Exc к этой аппликации, а запустив через Set Exc = New Excel.Application, уже не имею pid и соответственно возможность нахождения Handle-а и других прочих
Спасибо!


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

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

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

    TopList