Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Toisen ohjelman avaaminen omaan ohjelmaan

Sivun loppuun

remontti-reiska [21.05.2004 16:36:48]

#

Eli miten pystyisi avata toisen ohjelman oman ohjelman sisään?

rndprogy [21.05.2004 17:03:29]

#

No eikös ole Shell komento

avaus = shell("ohjelma")

edit: Ja pitikin juuri kysyä että tuskin tuota tarkoitit

hunajavohveli [21.05.2004 17:09:45]

#

En usko, että remontti-reiska tarkoitti tuota.

setä [21.05.2004 17:22:18]

#

Onko se toinen ohjelma eräänlainen funktio omalle ohjelmalle. Call-kutsulla ehkä ??

remontti-reiska [21.05.2004 20:24:00]

#

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.

rndprogy [21.05.2004 20:31:41]

#

Tarkoitatko että ohjelma olisi tavallaan ikkunan sisällä? Tarvitaan varmaan taas jotain apeja tai riippuu versiostakin voiko tuon ja miten tuon voi toteuttaa.

Antti [21.05.2004 21:57:36]

#

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.

Tiha [21.05.2004 23:21:26]

#

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

remontti-reiska [21.05.2004 23:26:28]

#

Sain tuosta idean. Kiitti poju/tyttö tai mikä ikinä oletkin. Tuntuu tuo Api kelpaavan kaikkeen. ;)

Tiha [21.05.2004 23:29:41]

#

Ole hyvä (ihan jo 1 pojua+2 tyttöä käskyttävä ikäihminen)

nomic [22.05.2004 05:37:13]

#

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 :]


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta