Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка 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. Один из вариантов
|
Автор: 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). А затем среди модулей этого процесса можно попробавть найти свое окошко. А как управлять я не знаю, но на форуме уже это обсуждалось поищи. |
Автор: Michigan 31.1.2007, 15:23 |
Что я хочу с ним делать!? Ну скажем задать путь для открытия папки, Отключить дерево с левой стороны Explorera и т.д. ... Возможно путь открытия папки можно было бы задать во время выполнения команды SHELL ? Мне бы этого хватило |
Автор: Naum 31.1.2007, 15:32 | ||
Shell это всего лишь командная строка. Поэтому надо читать документацию по explorer'у какие у него есть параметры. Но скорее всего должно прокатить
|
Автор: 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 |
Так точно не получиться. Shell возвращает ID процесса, а не потока. Про этот ID можно вообще забыть, потому что процесс сразу закрывается. |