Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: запуск и управление чужей программой Добавлено: 06.01.04 06:48  

Автор вопроса:  Grayich | Web-сайт: grayich.narod.ru | ICQ: 208280504 

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

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 06.01.04 07:04

Запустить - ShellExecute, скрыть/показать: FindWindow, ShowWindow

Ответить

Номер ответа: 2
Автор ответа:
 Grayich



ICQ: 208280504 

Вопросов: 56
Ответов: 164
 Web-сайт: grayich.narod.ru
 Профиль | | #2
Добавлено: 06.01.04 11:11
Спасибо.  Тока как получить дескриптор окна проги которую я запустил ??

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 06.01.04 13:15

Дескриптор... Хм получить можно либо зная название класса окна, либо зная заголовок окна...

Или можно получить ProcessID, даже если не ты запускал эту прогу, а если ее запускал ты, то так даже проще, идентификатор процесса те возвратит VB'шная функция Shell(...)

Далее используем этот вот модуль, и оопля, мы можем перебрать все окна процесса и отсортировав, найти нужное нам :)))

Option Explicit

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long

Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long

Private Const WM_CLOSE As Long = &H10

Public Sub CloseByPID(ByVal target_pid As Long)

Call EnumChildWindows(ByVal GetDesktopWindow, AddressOf ChildWindowProc, target_pid)

End Sub

Private Function ChildWindowProc(ByVal hWnd As Long, ByVal lpData As Long) As Long

Dim pID As Long

Call GetWindowThreadProcessId(hWnd, pID)

If pID = lpData Then If GetParent(hWnd) = &H0 Then Call PostMessage(hWnd, WM_CLOSE, &H0, &H0)

ChildWindowProc = True

End Function

Public Function AppRun(sFullPath As String, Optional WindowStyle As VbAppWinStyle = vbNormalFocus) As Long

AppRun = Shell(sFullPath, vbNormalFocus)

End Function



Правда этот модуль для закрытия окошка, но я уверен что ты его смогешь и для себя переделать ;)

Ответить

Номер ответа: 4
Автор ответа:
 Grayich



ICQ: 208280504 

Вопросов: 56
Ответов: 164
 Web-сайт: grayich.narod.ru
 Профиль | | #4
Добавлено: 15.01.04 15:14

2 sne

т.е.   если я правильно понял то надо перебирать все hWnd  окон и проверять их на принадлежность нужного мне PID  с помощью GetWindowThreadProcessId ????

А если тогда функция обратная GetWindowThreadProcessId ????

и еще если есть примеры рабочие на подобную тему, скиньте плиз

 

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам