Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Раз Ексель, два Ексель... Как подключиться к нужному? / 6 сообщений из 6, страница 1 из 1
24.02.2005, 22:33
    #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
25.02.2005, 02:04
    #32932369
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Раз Ексель, два Ексель... Как подключиться к нужному?
<imho>

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

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

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

ps: может быть эта задача слишком сложна, чтоб мне самостоятельно ее решить....
...
Рейтинг: 0 / 0
27.02.2005, 00:41
    #32935211
Andres 1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Раз Ексель, два Ексель... Как подключиться к нужному?
...
Рейтинг: 0 / 0
27.02.2005, 03:42
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Раз Ексель, два Ексель... Как подключиться к нужному? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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