powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Раз Ексель, два Ексель... Как подключиться к нужному?
6 сообщений из 6, страница 1 из 1
Раз Ексель, два Ексель... Как подключиться к нужному?
    #32932276
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно говоря, ситуация проста - юзером запущено несколько процессов Екселя (открыто несколько книг), а мне из своего приложения нужно подключиться к последнему Екселевскому окну, с которым работал юзер .
Тоесть, по нажатию кнопочки в форме нужно каким то образом определить, какое из окон юзер покинул последним (обозначив там некоторые ячейки), подключиться к нему и выполнить некоторые действа.... Приложение на VB.NET самостоятельное, ничего не знает ни об имени книги, ни об имени листа....

К сожалению, GetObject(, "Excel.Application") в этом случае не помошник (дает ссылку только на первый созданный экземпляр Екселя, которого в принципе даже может и не существовать, потому как уже закрыли). Хотя, если допустить что приложение в течении одной сессии будет работать только с единственным Екселем (и потом они оба будут закрыты) - то этот способ прокатывает нормально.

Попробовал посмотреть при помощи
Код: plaintext
1.
2.
3.
4.
    Dim sProcessName As String = System.IO.Path.GetFileNameWithoutExtension("EXCEL.EXE")
    Dim oProcess As System.Diagnostics.Process
    For Each oProcess In System.Diagnostics.Process.GetProcessesByName(sProcessName)
      ' не соображу что бы спросить то у oProcess, чтоб узнать, когда его покинули.... 
    Next

Кто нибудь решал подобную задачу?
Или хотя бы в какую сторону копать......
...
Рейтинг: 0 / 0
Раз Ексель, два Ексель... Как подключиться к нужному?
    #32932369
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<imho>

есть такое ощущение, что список процессов мало поможет. здесь нужна история их перелючения. такую "историю" можно отслеживать, повесив глобальный хук на сообщение WM_ACTIVATEAPP. каждый раз по параметрам фиксируя, из какого приложения было сделано переключение (wParam=FALSE - потеря активности приложением и lParam=ThreadId).

</imho>
...
Рейтинг: 0 / 0
Раз Ексель, два Ексель... Как подключиться к нужному?
    #32933679
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузятакую "историю" можно отслеживать, повесив глобальный хук на сообщение WM_ACTIVATEAPP. каждый раз по параметрам фиксируя, из какого приложения было сделано переключение (wParam=FALSE - потеря активности приложением и lParam=ThreadId).Скорее всего... Попробуем копнуть в эту сторону....
...
Рейтинг: 0 / 0
Раз Ексель, два Ексель... Как подключиться к нужному?
    #32935045
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал разобраться в этой технологии... Однако, не просто...
Примеры, которые нарыл показывают как сделать хук на уровне приложения. Тоесть, вижу что получает/теряет фокус только мое окно. А вот переделать так чтоб на уровне системы, чтоб любое оно отслеживалось - что то не получается...

Не подкинете ли примерчик?

ps: может быть эта задача слишком сложна, чтоб мне самостоятельно ее решить....
...
Рейтинг: 0 / 0
Раз Ексель, два Ексель... Как подключиться к нужному?
    #32935211
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Раз Ексель, два Ексель... Как подключиться к нужному?
    #32935242
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andres 1Напрямую глобальные хуки в .NET не поддерживаютсяyes, по описанию MSDN - нужно делать native DLL. однако, не все так однозначно :)

например, можно установить глобальный хук из exe (!!!) сборки на перехват WH_KEYBOARD_LL. и вопреки процитированному из MSDN утверждению - этот глобальный хук работает.
примеры можно найти в сети и на нашем сайте в разделе C#. эта возможность доступна, т.к. windows при обработке низкоуровневых хуков (WH_XX_LL) переключает контексты выполнения.

а вот с фильтрами WH_CALLWNDPROC или WH_CBT для глобальных хуков - практически наверняка работать надо ТОЛЬКО через unmanaged dll.


PS
вообще хуки - это зло :)
могут возникнуть настолько сильные тормоза в работе, что впору задуматься о других путях решения.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Раз Ексель, два Ексель... Как подключиться к нужному?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]