Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2013, 13:30   #1
BVladimir
 
Регистрация: 01.12.2012
Сообщений: 6
Вопрос ProcessID (PID) через СОМ соеденение ?

Открываю Эксел из др.программы (1С) через СОМ соеденение - возможно ли как-то из полученного СОМ объекта узнать
системный PID этого экземпляра Эксел?
BVladimir вне форума Ответить с цитированием
Старый 13.07.2013, 15:26   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Можно.Если один процесс запущен,тогда так
Код:
Function Get_PID() As Long
    Dim Process As Object
    For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
        If Process.Caption Like "EXCEL*" Then
            Get_PID = Process.Handle
            Exit Function
        End If    '
    Next
    Get_PID = 0
End Function
Если несколько,то надо ковыряться в Process.Properties_
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 13.07.2013, 16:28   #3
BVladimir
 
Регистрация: 01.12.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Можно.Если один процесс запущен,тогда так
Код:
Function Get_PID() As Long
    Dim Process As Object
    For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
        If Process.Caption Like "EXCEL*" Then
            Get_PID = Process.Handle
            Exit Function
        End If    '
    Next
    Get_PID = 0
End Function
Если несколько,то надо ковыряться в Process.Properties_
Т.е. только через WMI ? А можно ли в запросе сразу указать что интересует процесс конкретного пользователя ? Ведь иначе возвращаются все процессы всех пользователей...
BVladimir вне форума Ответить с цитированием
Старый 13.07.2013, 20:36   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Можно так,если есть соданный СОМ объект
Код:
Private Declare Function GetWindowThreadProcessId Lib "user32" _
    (ByVal hwnd As Long, _
     lpdwProcessId As Long) As Long
 Function GetPID(ByVal hwnd As Long) As Long
   GetWindowThreadProcessId hwnd, GetPID
End Function

Set App = CreateObject("Excel.Application")
PID = GetPID(App.hwnd)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зная ProcessID получить Handle главной формы? NikLik Win Api 8 27.08.2021 21:29
Шлагбаум через СОМ портом очень надо MACTAK Помощь студентам 1 13.12.2012 22:10
Приём данных через СОМ порт Серж_ Общие вопросы C/C++ 0 13.06.2010 01:25
Управление Excel через WinApi - не используя СОМ, ОЛЕ и прочие блага цивилизации x8i Общие вопросы C/C++ 1 20.08.2009 10:59