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 SubSain 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.