Eli miten pystyisi avata toisen ohjelman oman ohjelman sisään?
No eikös ole Shell komento
avaus = shell("ohjelma")
edit: Ja pitikin juuri kysyä että tuskin tuota tarkoitit
En usko, että remontti-reiska tarkoitti tuota.
Onko se toinen ohjelma eräänlainen funktio omalle ohjelmalle. Call-kutsulla ehkä ??
On ohjelma, jossa on vaikkapa harmaa tausta ja joku toinen ohjelma avautuisi vaikka siihen harmaataustaisen ohjelman keskelle ilman tuota ylhäällä olevaa sinistä systeemiä tai sen kanssa. Ääh... todella vaikea selittää. Kieli on vb.
Tarkoitatko että ohjelma olisi tavallaan ikkunan sisällä? Tarvitaan varmaan taas jotain apeja tai riippuu versiostakin voiko tuon ja miten tuon voi toteuttaa.
Itse asiassa VB:llä homma on aika toivoton. VB.netillä se on mahdollista ainakin siten, että ohjelma käynnistetään toisesta siten, että sen säie on hallittavissa toisesta ohjelmasta.
Kokonaisuudessaan aika hankala homma. Nostan hattua jos onnistut, Reiska.
OLE on mielestäni nykyään varsin käyttökelpoinen moiseen
tässä kuitenkin API:lla esimerkki
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 GetDesktopWindow Lib "user32" () 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 mhWnd As Long Function InstanceToWnd(ByVal target_ProsessiId As Long) As Long 'etsi käynnistetyn ohjelman Prosessiid Dim testi_hwnd As Long, testi_ProsessiId As Long, testi_thread_id As Long testi_hwnd = FindWindow(ByVal 0&, ByVal 0&) Do While testi_hwnd <> 0 If GetParent(test_hwnd) = 0 Then testi_thread_id = GetWindowThreadProcessId(testi_hwnd, testi_ProsessiId) If testi_ProsessiId = target_ProsessiId Then InstanceToWnd = testi_hwnd Exit Do End If End If testi_hwnd = GetWindow(testi_hwnd, GW_HWNDNEXT) Loop End Function Private Sub Form_Load() Dim ProsessiId As Long Me.Show 'Tarkista onko notepad tässä hakemistossa.. ProsessiId = Shell("c:\windows\notepad.exe", vbNormalFocus) If ProsessiId = 0 Then MsgBox "Käynnistys ei onnistunut" mhWnd = InstanceToWnd(ProsessiId) SetParent mhWnd, Me.hwnd Putfocus mhWnd End Sub
Sain tuosta idean. Kiitti poju/tyttö tai mikä ikinä oletkin. Tuntuu tuo Api kelpaavan kaikkeen. ;)
Ole hyvä (ihan jo 1 pojua+2 tyttöä käskyttävä ikäihminen)
joo ole ja eikäs tää joku ado vai onko ddo vai mikää onkaan, mutta OLE on tekniikka mitä itse oon joskus käyttänyt :]
Aihe on jo aika vanha, joten et voi enää vastata siihen.