Как увязать окно - процесс - обьект ?

HOME_X
Дата: 03.03.2008 12:04:02
Доброго дня уважаемые господа !
Необходимо найти окно, которое принадлежит конкретному обьекту ?

Делаю так !
Public Const GW_HWNDNEXT = 2

Public Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwprocessid As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetCurrentProcessId Lib "Kernel32" () As Long

Function GetWinHandle(hInst As Long) As Long
  Dim hWnd As Long, IdProc As Long
  hWnd = FindWindow(vbNullString, vbNullString)
  Do While hWnd <> 0
    If GetParent(hWnd) = 0 Then
      Call GetWindowThreadProcessId(hWnd, IdProc)
      If IdProc = hInst Then Exit Do
    End If
    hWnd = GetWindow(hWnd, GW_HWNDNEXT)
  Loop
  GetWinHandle = hWnd
End Function

Private Sub Command1_Click()
  Dim hInst As Long, hWApp As Long, sNaim As String
  Set Outlooks = CreateObject("Outlook.Application")
  hInst = Shell("calc.exe")
[SIZE=3]
  'hInst = GetCurrentProcessId   - не подходит указывает текущий-запускаемый процесс
  'hInst = Outlooks   - здесь надо получить ID процесса, от обьекта...
 [/SIZE]  
   hWApp = GetWinHandle(hInst)
  If hWApp <> 0 Then
    sNaim = String(255, vbNullChar)
    Call GetWindowText(hWApp, sNaim, Len(sNaim))
    List.AddItem " Title Window: " & Left(sNaim, InStr(sNaim, vbNullChar) - 1)
  End If
End Sub


Спасибо ...
sdfgsdfgsdf
Дата: 03.03.2008 12:07:24
Если прога запускается через Shell, то можно просто значение функции Shell присвоить переменной - это тебе и будет хендер окна !
HOME_X
Дата: 03.03.2008 12:13:34
Прога это ..
Set Outlooks = CreateObject("Outlook.Application")

и необходиом найти конкретное окно от этого обьетка
(а запущенных Outlook приложений может быть много ....)
CtrlAlt
Дата: 03.03.2008 12:23:58
А зачем?
_resta
Дата: 03.03.2008 12:33:26
А оутлук открывается несколькими экземплярами ?
Проверить не могу, но имхо - нет.
HOME_X
Дата: 03.03.2008 12:35:13
CtrlAlt
А зачем?


Столкнулся с моментом (в Office 2003)
при подаче команды Send - всплывает окно Диалог безопасности ...
(сиди дожимай кнопку)

"Господа-граждане-товарищи" предложили варианты по его ликвидации
(проги YesClick и т.д.) не очень понравилось - хочу попробывать
обнаружить в памяти это окно и послать команду SendMessage ....
Latuk
Дата: 03.03.2008 12:39:49
а если просто понизить уровень безопасности?
Сервис - Макрос - Безопасность - Низкая
HOME_X
Дата: 03.03.2008 12:40:45
_resta

А оутлук открывается несколькими экземплярами ?
Проверить не могу, но имхо - нет.


Черт-черт-черт !!!!!!!!!
Вы АБСОЛЮТНО правы .... он находит запущенной приложение
при повторных запусках ...

Называеться нашел себе проблему .... это я по аналогии с Excel/Word
действовал ......

Вопрос снят !
HOME_X
Дата: 03.03.2008 12:42:56
Latuk
а если просто понизить уровень безопасности?
Сервис - Макрос - Безопасность - Низкая


Это разные вещи - это к запуску макроса VBA

Это безопасность транспорта почты ...
Писалось что есть некая опция и надо выставить КАЗЯВКУ - но перелопатил
все закладки - НЕТ и ВСЕ !!!!!!!!
Старый юнга
Дата: 03.03.2008 12:50:53
' разрешаем доступ к адресной книге
Set "Переменная типа объект" = CreateObject("Redemption.SafeMailItem")
Вроде такая штука разрешает доступ к адресной книге безо всяких оганичений, если это то, что надо. Но, по-моему, надо какой-то референс ставить.