Страница: 1 |
Страница: 1 |
Вопрос: Окно стороннего приложения внутри VB-формы
Добавлено: 08.08.07 23:47
Автор вопроса: Zahar | Web-сайт:
Помогите несмышленышу.
Как сделать так, чтобы окно другого приложения, скажем Exсel размещалось внутри созданной VB-формы. Без всяких там OLE. Просто надо чтобы окно, в том виде, как мы видим его обычно (с тулбарами, полосами прокрутки и т.д.) не выходило за пределы созданной формы.
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #1
Добавлено: 09.08.07 00:30
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Const GW_HWNDNEXT = 2
Dim mWnd As Long
Function InstanceToWnd(ByVal target_pid As Long) As Long
 im test_hwnd As Long, test_pid As Long, test_thread_id As Long
test_hwnd = FindWindow(ByVal 0&, ByVal 0&
 o While test_hwnd <> 0
If GetParent(test_hwnd) = 0 Then
test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
If test_pid = target_pid Then
InstanceToWnd = test_hwnd
Exit Do
End If
End If
test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
Loop
End Function
Private Sub Form_Load()
 im Pid As Long
LockWindowUpdate GetDesktopWindow
Pid = Shell("c:\windows\notepad.exe", vbNormalFocus) 'замени "c:\windows\notepad.exe" на путь к Excel
If Pid = 0 Then MsgBox "Error starting the app"
mWnd = InstanceToWnd(Pid)
SetParent mWnd, Me.hwnd
Putfocus mWnd
LockWindowUpdate False
End Sub
Private Sub Form_Unload(Cancel As Integer)
 estroyWindow mWnd
End Sub
Номер ответа: 2
Автор ответа:
Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #2
Добавлено: 20.08.07 23:32
Хорошо!
Ну а если не известно, где на компьютере находится файл приложения (приложение запускается сразу открытием документа Excel или Word), то как мне в таком случае сделать, чтобы оно открывалось в заданной форме
Номер ответа: 3
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #3
Добавлено: 21.08.07 00:27
Если я тебя правильно понял, то ты хочешь узнать где находится приложение Word или Excel?
Номер ответа: 4
Автор ответа:
Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #4
Добавлено: 21.08.07 21:52
ДА!!!
(Я же говорил, что я несмышленыш.)
Номер ответа: 5
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #5
Добавлено: 21.08.07 23:49
Надеюсь, ты знаешь что такое реестр, и как с ним обращаться.
Вот, например, как узнать путь к Word'у (из Office 2003):
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Word\InstallRoot". В этом разделе находится запись Path, которая имеет значение, например "С:\Program Files\Microsoft Office\OFFICE11\". Имя exe-файла (тобишь Word'а) "WINWORD.EXE". Теперь всё соединяешь и получается: "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE" Это и будет именем файла Word'а. Вот его и запускай.
Номер ответа: 6
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #6
Добавлено: 21.08.07 23:51
Ну и намудрил я!
Номер ответа: 7
Автор ответа:
Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #7
Добавлено: 22.08.07 13:31
Всё сделал. Но почему-то с Notepad этот код работает, а с Excel и Word окна программы открывюатся отдельно, вне VB-формы.
Номер ответа: 8
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #8
Добавлено: 22.08.07 22:23
P.S.: точки, это так... для сокращения.
Номер ответа: 9
Автор ответа:
Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #9
Добавлено: 24.08.07 23:30
Последний (опятьб же глупый) вопрос.
А как обращаться из VB к этому окну. Скажем, как получить данные из одной из ячеек, находящихся внутри длочернего окна Excel.
Номер ответа: 10
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #10
Добавлено: 26.08.07 00:39
Прав он только в том случае (не работает), когда Вёрд 2003 и старше. А на 2002 (ХР), 2000 и меньших братах работает. Самому-тоже интересно. У меня был аналог этого кда, только по короче. Так вот тот тоже (правда на нём я АКСЕСС пробовал) 2003 вылетало извне а 2002-ая становилась дочерной. Наверняка это новые уловки МелкоМягких .