[ D u C k @ 22.11.2004. 14:27 ] @
Pozdrav, nakon sto sam probao sve zivo, pretrazio cijeli NET jos mi preostaje da vas pitam pa bi mi puno pomoglo ako neko moze pomoci
Ovako:

Imal neko source ili, jel moze napraviti iducu aplikaciju.

Imam program u DOS-u za knjigovodstvo htio bi napraviti u vb-u aplikaciju u kojoj ce se taj program u biti pokretati. Znaci da ja imam gore od windowsa sucelje (Minimize, Maximize, FILE, EDIT i taj toolbar...) a da mi od DOS-a program otvori unutar toga i izbaci(izbrise) onaj naziv COMMAND prompt...
Znaci ukratko. Kad ja pokrenem tu aplikaciju da on meni gore napravi toolbar, ikonice itd a dolje iznad da je DOS bez onog svog toolbara gdje pise COMMAND PROMPT. Evo saljem i slicicu da vidite sta mislim, samo sto u aplikaciji treba biti CMD do kraja ekrana a ne ovako do pola.

Nadam se da cete mi pomoci puno bi mi znacilo. Hvala unaprijed
[ D u C k @ 22.11.2004. 14:51 ] @
Evo ova slika najbolje pokazuje na sta sam mislio. Kako se i vidi na njoj aplikacija je u sredini a gore je navigacija
[ mladenovicz @ 22.11.2004. 14:52 ] @
Sve i da to napravis (mozda moze sa SetParent APIjem) ne znam kako bi povezao Toolbar iz VB aplikacije sa DOS aplikacijom
[ D u C k @ 22.11.2004. 16:27 ] @
Toolbarovi su neovisni o programu u Dos-u. To je samo meni za pomoc da mogu napraviti UPGRADE sa neta, indexiranje snimanje arhiva... Jer to vec imam gotovo u VB-u pa bi povezao. Jel moze onda primjer aplikacije sa ovim SetParent, jer zbilja ne znam kako to napraviti pa bi sve pomoglo
[ mladenovicz @ 24.11.2004. 12:13 ] @
Code:

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 = GetWindow(test_hwnd, GW_HWNDNEXT)
    Loop
End Function
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    Dim Pid As Long
    'Lock the window update
    LockWindowUpdate GetDesktopWindow
    'Execute notepad.Exe
    Pid = Shell("c:\windows\notepad.exe", vbNormalFocus)
    If Pid = 0 Then MsgBox "Error starting the app"
    'retrieve the handle of the window
    mWnd = InstanceToWnd(Pid)
    'Set the notepad's parent
    SetParent mWnd, Me.hwnd
    'Put the focus on notepad
    Putfocus mWnd
    'Unlock windowupdate
    LockWindowUpdate False
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'Unload notepad
    DestroyWindow mWnd
    'End this program
    TerminateProcess GetCurrentProcess, 0
End Sub


[ D u C k @ 24.11.2004. 23:54 ] @
Nije to-to, on otvori glavnu formu i unutar nje notepad, ne znam kako da objasnim, al trebam nesto tipa da on otvara prozor dosa (cmd.exe) tipa full screen kao preko short cuta al da ne ide na FULL SCREEN nego da ga omedjim u tu formu. Prakticki da se uglavi u nju. Np3. ako je rezolucija 1024*768 da on bude cirka 1000*768 a ova 24 pixela kao za toolbar (FILE, EDIT...) Hvala ti na ovom sto si se trudio, probao sam ja s ovim tvojim pozvat i command promp i program al opet nista.

I jos jedna stvar program se inace poziva preko desktopa "XXX.PIF" jer samo tako ga pod XP-om mogu otvoriti u full screenu.

Ako ikako mozes pomoc. Hvala unaprijed
[ mladenovicz @ 25.11.2004. 09:46 ] @
Moras da pokreces VB aplikaciju, a ona da pokrece DOS aplikaciju i da je uglavi unutar svoje forme
[ Shadowed @ 25.11.2004. 13:43 ] @
Mislim da razumem sta ti je potrebno jer je i meni trebalo takvo nesto (i jos uvek mi treba :)). Pretpostavljam da bi ti trebalo nesto kao da u TextBox-u ide tekst koji bi inace isao u konzoli (ovo je meni trebalo), ili da se u tako nekoj kontroli iscrtava ono sto bi se iscrtavalo u konzoli.
Nazalost, nemam resenje za ovo, ali se nadam da sam pomogao da se pitanje bolje razume (ako neko zna resenje).
[ mladenovicz @ 25.11.2004. 13:47 ] @
@Shadowed
http://www.elitesecurity.org/poruka/390889
[ Shadowed @ 25.11.2004. 14:26 ] @
Svaka cast!
Kako li sam samo propustio ovo?
Isprobano, radi. Jedino se nisam bas udubljivao u API-je. Znas li mozda zasto ne rade komande kao dir, copy i sl.?
[ mladenovicz @ 25.11.2004. 14:47 ] @
U primeru se koristi ping, ali to je u stvari ping.exe (keyword CreateProcess). Probaj umesto ping da stavis cmd.exe /c dir
[ Shadowed @ 25.11.2004. 15:15 ] @
Tacno, kao sto rekoh nisam gledao detaljno kod, neophodno je da bude neki proces i logicno cmd.exe /c dir c: radi.
[ acatheking @ 29.11.2004. 18:44 ] @
Ako bih mogao da se dodam na ovu temu...
Da li je nekako moguće "inkapsulirati" dos prozor (cmd.exe) u formu?
Problem je u tome što u programu koristim WScript.Shell koji otvori cmd.exe i kada se koristi SendKeys, prozor mora uvek biti fokusiran. Inače SendKeys, ne odrađuje posao. Može li se to nekako rešiti?
[ mladenovicz @ 29.11.2004. 19:18 ] @
Pogledaj ovaj kod iznad. SetParent API bi trebao da radi to sto ti treba
[ acatheking @ 30.11.2004. 20:32 ] @
Citat:
Pogledaj ovaj kod iznad.

Hm.... koji? Nisam bas ukapirao.
[ mladenovicz @ 01.12.2004. 10:00 ] @
http://www.elitesecurity.org/poruka/506045
[ D u C k @ 07.12.2004. 16:33 ] @


Nisam uspio rijesiti s onim sto si mi dao, moram priznat da nisam tolko iskusan
pa bi te htio jos jednom zamoliti ako mozes da se posvetis u svezi tog pitanja, pa
najbolje da mi na ovaj mail posaljes aplikaciju pod zipom ili rar-om

Napomenut cu jos jedno sta mi treba pa se nadam da ces moc pomoci

Treba mi nesto kao KONZOLA koja ce pokretati dos a da mi je sucelje 32-bitno, mislim
da se sjecas o cemu je rijec. Da gore imam meni koji cu poslje sam napraviti i povezati sa
postojecim aplikacijama koje imam al nikako da uvucem u njega cmd.exe

Rijec je o knjigovodstvenom programu kojeg bi htio pokretati unutarj windows shella.
Program je radjen u CLIPPERu i pozivam ga preko shortcuta na desktopu koji se zove (POS.PIF)
Taj PIF poziva jedan BAT (POS.BAT) koji se nalazi u direktoriju C:\POS i unutra je i POS.EXE

To sam morao tako napraviti jer kako su dosli win xp imao sam neke linije oko
svih rubova programa pa ima jedna datoteka koja radi neki rezize i onda bude sve ok

Znaci ne moze direktno POS.EXE da se poziva jer bude mali prozor i pun linija, pa taj bat ujedno pozove
i taj podprogramcic za resize ekrana i bude full screen i bez tih linija.
Nadam se da nisam prezakompliciro i da si shvatio kako to ide

Na desktopu zena klikne na ikonu i ona pozove taj bat i normalno program bude preko
cijelog ekrana (logicno)
Sad ako ikako mozes da mi napravis pod VB da se taj POS otvori nesto tipa u child formi
da je fixan i ne mrda a gore da imam meni koji je neovisan o tom programu.
Ja sam to zamislio da on taj PIF poziva koji ujedno pokrece program u FULL SCREENU
a da mu se sad taj FULL SCREEN malo skrati tj. strpa u ovo sucelje.

Nadam se da si shvatio a ako si voljan pomoc slobodno se javi na ovaj mail u vezi bilo kakve dileme i
nejasnoce. U svakom slucaju puno ti hvala sto si pokusu pomoc

Hvala

[ D u C k @ 08.12.2004. 13:04 ] @
Sinoc sam do kasna radio i danas malo i evo maximum sta sam ja uspio izvuci, nasao sam na netu neku dos, console skriptu pa sam je ubacio unutra da probam, al ne mogu otvoriti program unutar ove VB aplikacije. Evo stavit cu i datoteku sa sourcom pa pogledajte, to je kao dos shell, znaci u direktorij di cete raspakirati ovaj program napravite i bat npr DOS.BAT i snimite ga u direktorij od ovog programa, a on neka poziva CMD.EXE, jos mi samo to reba da uglavim unutra. Pa javite ako uspijete
[ mladenovicz @ 08.12.2004. 13:39 ] @
Code:

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 = GetWindow(test_hwnd, GW_HWNDNEXT)
    Loop
End Function
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    Dim Pid As Long
    'Lock the window update
    LockWindowUpdate GetDesktopWindow
    Pid = Shell("cmd.exe", vbNormalFocus)
    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)
    'Unload notepad
    DestroyWindow mWnd
    'End this program
    TerminateProcess GetCurrentProcess, 0
End Sub



[ D u C k @ 08.12.2004. 22:40 ] @
Nije to to, otvori on cmd al je u onoj maloj velicini ne bude cijeli unutar aplikacije...
[ mladenovicz @ 09.12.2004. 10:02 ] @
Sad moras da pomeris prozor i da ga resizeujes.

Dodaj u deklaracije ovo

Code:

Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)


i promeni form load da izgleda ovako

Code:

Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    Dim Pid As Long
    
    Me.WindowState = vbMaximized
    
    'Lock the window update
    LockWindowUpdate GetDesktopWindow
    Pid = Shell("cmd.exe", vbNormalFocus)
    If Pid = 0 Then MsgBox "Error starting the app"
    mWnd = InstanceToWnd(Pid)
    SetParent mWnd, Me.hWnd
    SetWindowPos mWnd, 0, -4, -24, Me.Width, Me.Height, SWP_NOZORDER Or SWP_SHOWWINDOW
    Putfocus mWnd
    LockWindowUpdate False
End Sub
[ D u C k @ 09.12.2004. 21:26 ] @
Vidim da ima napredka i nadam se da ce biti nesto od toga, ovo je sad puno bolje od onog al fali mi jos pola ekrana da ga rastegne, to ne mogu nikako dobiti
probao sam upisivati pod with i height duzine al ne prihvaca, saljem i sliku da vidis kako bi to bude.

Probao sam umjesto ovoga staviti da otvara POS.PIF (umjesto CMD.EXE) al kad stavim pif baca ga u onaj dosov full screen tako da mi prekrije i windowse i sve
mislim da znas na sta misli, a pif bi meni i trebao da otvara najvise jer ovako imam one linije u programu.

Najbolje bi bilo da kad vindows salta sebe u onaj full screen da se to nekako promijeni i umjesto preko cijelog ekrana da ga strpa u vb formu

Znas li kako da dobijem to, evo slicice, pozdrav
[ D u C k @ 09.12.2004. 21:52 ] @
Evo ova nova slika ce ti najbolje pokazati o cemu je rijec. Ja i kad stavim rucno da mi je cmd preko cijelog prozora to radi, al kad pokrenem aplikaciju on ga automatski smanji na neki minimum i iako ga ja pokuso opet povecati opce ga ne ferma, i tu mozes najbolje vidjeti te linije sto sam ti govorio, buduci da se tehnologija mijenjala :) bilo je potrebno prosiriti aplikaciju (menu) pa je trebalo povecati prozor i to sad radi jedna datoteka koja to makne, al ona kad se pozove program ode u FULL SCREEN i radi a ovako nista.

Mozda ti bude jasnije kad vidis...