Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Можно запустить программу в программе? Добавлено: 19.04.04 00:08  

Автор вопроса:  kolyanoid

Звучит глупо, но всё же.

Вот, допустим есть программа (VBшная), которая запускает другую программу (не VBшную, но тоже оконную). Можно ли сделать так, чтобы она запускалась не как отдельное окно, а как "окно в окне". Ну как например в PHOTOSHOP'е можно много картинок в разных окнах загружать. Можно ли такое учудить с внешней ЕХЕшкой?

Ответить

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

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 19.04.04 01:54

в фотошопе, это-ж просто окошки (MDI приложения), а вот чтобы ехе прилепить... это надо поизвращяться... Единственно что могу сказать, что проще прилепить себя к какой-то программе, чем ее к себе...

Ответить

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


Лидер форума

ICQ: 216865379 

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

Как вариант, если программа твоя, можно создавать у себя дочерние окна, передавать их хандл стороннему ЕХЕшнику, чтобы он на них отрисовывал... Попробуй поэкспериментировать с SetParent, но, скорее всего, это ничего не даст...

Ответить

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



Вопросов: 86
Ответов: 920
 Профиль | | #3 Добавлено: 19.04.04 23:22

nu pochemuzhe ne srabotaet?srabotaet, da eshe kak! ya vot proboval, tak zapuskal Explorer.exe, cherez Shell, poluchal ego hWnd, i govoril SetParent na formua nashu eto hWnd. vse rabotal prekrasno, tol`ko esli ty zakryvaesh` svoe okno, to tot Explorer net, tak chto ego nado vrushnuyu TerminateProcess'om ili WM_QUIT posylat` emu, ili che-to tak takoe. A vobshe rabotaet, nado tol`ko poeksperimentirovat`.....

Udachi

Ответить

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



Вопросов: 86
Ответов: 920
 Профиль | | #4 Добавлено: 19.04.04 23:24

nu pochemuzhe ne srabotaet?srabotaet, da eshe kak! ya vot proboval, tak zapuskal Explorer.exe, cherez Shell, poluchal ego hWnd, i govoril SetParent na formua nashu eto hWnd. vse rabotal prekrasno, tol`ko esli ty zakryvaesh` svoe okno, to tot Explorer net, tak chto ego nado vrushnuyu TerminateProcess'om ili WM_QUIT posylat` emu, ili che-to tak takoe. A vobshe rabotaet, nado tol`ko poeksperimentirovat`.....

Udachi

Ответить

Номер ответа: 5
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #5 Добавлено: 20.04.04 00:23

2 AASoft

А код можешь представить, пожалуйста? Ну примерно. А то очень надо свой проект доделать :(

P.S.

2 sne

Ну это понятно :) Просто, более доступного примера для народа на ум не пришло :)

Ответить

Номер ответа: 6
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #6 Добавлено: 20.04.04 20:48

a pochemu zhe net?na, lovi:

Private Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long

Dim Prog_hWnd as Long
Dim Me_hWnd as Long

Private Sub Form_Load()

Me_hWnd = Me.hWnd
Prog_hWnd = Shell("explorer.exe",vbnormalfocus")
if Prog_hWnd  <> 0 then
  If SetParent(Prog_hWnd, Me_hWnd) <> 0 Then
    'Succeded
    Me.Caption = "Explorer.EXE war run and it is now in YOUR form!"
  Else
    'Failed
    Me.Caption = "Explorer.EXE war run, but failed to get set in YOUR form!"
  End If
Else
  Me.Caption = "Explorer.EXE war NOT run!"
End If

End Sub

Private Sub Form_Unload(Cancel as integer)
DestroyWindow Prog_hWnd 
unload me
end
End Sub

 

 

P.S. Ya ne uveren chto eto srabotaet, tak kak shas sizhu ne doma, VB6.0 netu, tak chto ........vobshem pridu domoj, proveryu, i napishu eshe raz esli ne srabotaet.udachi

Ответить

Номер ответа: 7
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #7 Добавлено: 21.04.04 19:03

ne moe, s allapi.net, no vse zhe......

 

 

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 TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () 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
    Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
    'Find the first window
    test_hwnd = FindWindow(ByVal 0&, ByVal 0&;)
    Do While test_hwnd <> 0
        'Check if the window isn't a child
        If GetParent(test_hwnd) = 0 Then
            'Get the window's thread
            test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
            If test_pid = target_pid Then
                InstanceToWnd = test_hwnd
                Exit Do
            End If
        End If
        'retrieve the next window
        test_hwnd = GetWin

Ответить

Номер ответа: 8
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #8 Добавлено: 21.04.04 22:25

Спасибо за помощь :) Код я сейчас проверю (оба)

Ответить

Номер ответа: 9
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #9 Добавлено: 22.04.04 16:36

2 AASoft

Ниодин код не работает :( 1й ваще не понял в чём гемор :( 2й пишет, что ЕХЕшка загружена, но не влезла в форму :( Может мне нужно какие-то свойства форме изменить... или оюъект вставить какой-нить (у меня пустая форма), а?

Ответить

Номер ответа: 10
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #10 Добавлено: 22.04.04 20:00

ups, sorry, izvini  blin. pervyj i ne dolzhen rabotat`, on ne pravil`nyj s rozhdeniya, ...mnoj napisan...gy.

da vot, a vtoroj ne vlez, shas ssylku dam, posmotrish. u menya rabotal, nichego menyat` ne nado. rabotaet pravda v XP in 2k.

ssylochka vot:

http://www.mentalis.org/apilist/56C1BBA2F17A9ED35A1B54D4462EB24C.html

izvini eshe raz za ne vlezhshij kod...

 

kstati, ento mne napomnilo:Pavel, kogda budem ves` sajt na tochku perevodit`. pomnica ty mne tama zadanie daval, tak ono gdeto u menya sdelanoe valyaetsya, a design ty mne tak i neprislal. davaj- ka, shli. a to ono der`movo smotricca.

Ответить

Номер ответа: 11
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #11 Добавлено: 22.04.04 23:16

Во, спасибо :) Код щас проверю

А в скомпиленном виде тоже только в ХР\2к работать будет? Мне то пофигу - у меня 2 оси стоят ХР и 98 :) А вот народу, для которого я всё это делать буду - не пофигу :(

Ответить

Номер ответа: 12
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #12 Добавлено: 23.04.04 07:28

Опять не работает :( Как я понял из кода

test_hwnd = FindWindow(ByVal 0&, ByVal 0&)

переменная test_hwnd - хэндл окна... Я попробую окно по заголовку искать. А то запускаю в ВБ прогу... ничего не происходит :( Закрываю прогу - закрывается вся программа VB. Думаю дай-ка скомпилирую проект. Скомпилил, запустил... и она не смогла найти окно Проводника, из которого была запущена :(

Ответить

Номер ответа: 13
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #13 Добавлено: 23.04.04 21:20

zameni "c:\windows\notepad.exe" v proge na "notepad.exe"

i eshe v formu_unload ili gde ono tam pishet

TerminateProcess GetCurrentProcess, 0
 zameni na

unload me

end

 

vse rabotaet prekrasno. shas eshe raz poproboval v 2k, vse pashet, a v 98 ne idet, govorit operaciya ne razreshena windosom.

Ответить

Номер ответа: 14
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #14 Добавлено: 24.04.04 13:40

СПАСИБО БОЛЬШОЕ!!! Ты мне очень помог :)

Ответить

Номер ответа: 15
Автор ответа:
 CaS



ICQ: 165551179 

Вопросов: 10
Ответов: 124
 Web-сайт: www22.brinkster.com/casperz
 Профиль | | #15
Добавлено: 24.04.04 17:43

А у меня все работает

Ответить

Страница: 1 | 2 |

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



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