Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Ссылка на объект по ID


Автор: Michigan 31.1.2007, 12:53
При помощи какой функции можно сделать ссылку на объект(Приложение), для последующей работы.

                    Dim Obj_Explorer As Object
                    Dim ID_Prog As Integer

                    ID_Prog =Shell("C:\WINDOWS\explorer.exe", AppWinStyle.NormalFocus)

                    Obj_Explorer = XXX (ID_Prog)

Автор: Naum 31.1.2007, 13:03
Смотря что ты хочешь потом делать с Obj_Explorer. Один из вариантов
Код

Dim Obj_Explorer as System.Diagnostics.Process
Dim ID_Prog as Integer
ID_Prog = Shell(.....)
Obj_Explorer=System.Diagnostics.Process.GetProcessById(ID_Prog)

Автор: Michigan 31.1.2007, 13:19
Странное дело - Приложение запускается, ID получает, а дальше стопиться, мол...

          Additional information: Process with an Id of 3116 is not running.

Автор: Naum 31.1.2007, 13:40
Скорее всего дело в explorere. Всегда запускается только один экземпляр. Т.е. данные процеесса который ты запустил передаются в этот экземпляр. А сам процесс закрывается. Попробуй поставь в вызове процедуры Shell агрумент WaitForExit = true и увидишь, что после запуска процесс сразу закрывается.
И все таки ты реши зачем тебе это. Если просто следить за процессом, то можно воспользоваться System.Diagnostics.Process.GetProcessesByName(string name). А затем среди модулей этого процесса можно попробавть найти свое окошко. 
А как управлять я не знаю, но на форуме уже это обсуждалось поищи.

Автор: Yama 31.1.2007, 14:08
Еще 1 вопрос в тему:

Цитата(Naum @  31.1.2007,  13:40 Найти цитируемый пост)
А затем среди модулей этого процесса можно попробавть найти свое окошко. 

Если окно, которое надо найи - это pop-up или просто новое окно программы(например, новое окно ИЕ, в котором открывается новая страничка), и, по сути, новое окно открывает уже запущенный процесс. Можно ли его найти как дочернее? Или как в принципе можно найти окна, которые были открыты вследствие каких-либо действий какого-либо конкретного приложеня? (говоря окна, я подразумеваю не в принципе все контролы, тексбоксы и т.п., а любой другой процесс, который был запущен данным процессом).

Автор: Michigan 31.1.2007, 15:23
   Что я хочу с ним делать!? 
   Ну скажем задать путь для открытия папки, Отключить дерево с левой стороны Explorera и т.д. ...
   Возможно путь открытия папки можно было бы задать во время выполнения команды SHELL ? Мне бы этого хватило

Автор: Naum 31.1.2007, 15:32
Shell это всего лишь командная строка. Поэтому надо читать документацию по explorer'у какие у него есть параметры.
Но скорее всего должно прокатить
Код

Shell("C:\Windows\explorer.exe C:\Windows")

Автор: Michigan 31.1.2007, 17:57
Сенкс Naum ! Фраза типа... 

Shell("""C:\WINDOWS\explorer.exe"" C:\", AppWinStyle.NormalFocus) 

Дала мне желаемый результат.

А что касается открытого экземпляра эксплорера как объекта, пытался исследовать объект

        Obj_Explorer = Process.GetProcessesByName("EXPLORER")  

действительно эксплорер запущен один а в нем открываются экземплярчик.

в нем (Obj_Explorer) есть следующие множества Modules & Threads, я пытался найти в нем мой 
открытый экземплярчик по ID

                    ID_Prog = Shell("""C:\WINDOWS\explorer.exe"" C:\", AppWinStyle.NormalFocus)
                    Obj_Explorer = Process.GetProcessesByName("EXPLORER")
                    For i = 0 To Obj_Explorer(0).Threads(i).Count - 1
                        If Obj_Explorer(0).Threads(i).ID = ID_Prog Then
                            Obj_Explorer = Obj_Explorer(0).Threads(i)
                            Exit For
                        End If
                    Next

 ... но меня постигла неудача - такого объекта по такой метке комп не нашел... Но тема перспективная , буду ковыряться в форуме. 

Еще раз сенкс.

Автор: Naum 5.2.2007, 12:56
Цитата(Michigan @  31.1.2007,  18:57 Найти цитируемый пост)
пытался найти в нем мой открытый экземплярчик по ID

Так точно не получиться. Shell возвращает ID процесса, а не потока. Про этот ID можно вообще забыть, потому что процесс сразу закрывается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)