[ igor-ch @ 23.12.2010. 10:44 ] @
Da li postoji mogucnost da se neki gotov program (npr. notepad) integrise u vb6 formu, a ne da se otvara kao eksterni program (sa shell)?

Hvala unapred
[ dzigilibonglica @ 23.12.2010. 12:55 ] @
Ne razumem bas ovo pitanje...

Daj nesto konkretnije, konkretniji problem ili konkretnije pitanje...

Notepad je obicni TextBox u VB, ne radi nista vise. Za malo slozenije stvari imas ole isertable objects,
a za pravu primenu imash objekte i klase.

Pa se odluci za nesto, ako ne znas za sta,
pitaj pa ce ti ovde neko svakako pomoci.

Pozdrav!
[ igor-ch @ 23.12.2010. 13:20 ] @
Evo primer:
Citat:

Dim pa As String, pat1 As String, pat2 As String

pat1 = "notepad"

pat2 = "test"

pa = pat1 & pat2

Shell pa, vbNormalFocus


Kada se ovo izvrsi, otvara se notepad kao eksterna aplikacija. Meni treba da se notepad integrise u formu.
TextBox, a ni Rich TextBox (kao ni TX - Text Control, koji nije besplatan) ne dolaze u obzir, jer njihova uporteba izaziva jedan tehnicki problem... Jedino sa Notepad-om funktionise sve kako treba.

[ rgdrajko @ 23.12.2010. 14:47 ] @
Pa to se radi preko RES fajla.
Dao sam objasnjenje u
http://www.elitesecurity.org/t398875-0#2597342
[ Aleksandar Ružičić @ 23.12.2010. 14:58 ] @
mozes sa SetParent winapi funkcijom to da izvedes, samo ti treba hwnd notepad prozora koji ti pokrenes i hwnd forme na koju hoces da stavis notepad (to vec imas - Me.hWnd).

tako ces notepad da stavis unutar forme, ali sa sve njegovim titlebarom i menu bar-om, mada i njih mozes da uklonis tako sto ces da sklonis neke stilove iz njegove window klase (mozes prvo sa spy++ da vidis sta tacno od stilova treba da uklonis/dodas)..

za primere i dalje ideje konsultuj ApiGuide programcic (ako me secanje ne vara mislim da bas imaju primer gde notepad prozor integrisu u vb formu)
[ MasterOfDisaster @ 23.12.2010. 15:08 ] @
Aj da se ubacim i ja, evo gotovog primera, koji raspakuje *.EXE u C:\ i od tamo ga poziva.

Pozdrav
[ MasterOfDisaster @ 23.12.2010. 15:12 ] @
Ja uradim primer i slucajno ga zakacim na pogresnu temu... :D

http://www.elitesecurity.org/t398875-0#2768778

Aleksandre ako ti nije problem obrisi :)

Pozdrav i izvinjavam se.
[ Aleksandar Ružičić @ 23.12.2010. 15:22 ] @
^ jos bolje, prebacio sam samo tu poruku u ovu temu :)
[ igor-ch @ 24.12.2010. 10:53 ] @
Citat:
Aleksandar Ružičić: mozes sa SetParent winapi funkcijom to da izvedes, samo ti treba hwnd notepad prozora koji ti pokrenes i hwnd forme na koju hoces da stavis notepad (to vec imas - Me.hWnd).

tako ces notepad da stavis unutar forme, ali sa sve njegovim titlebarom i menu bar-om, mada i njih mozes da uklonis tako sto ces da sklonis neke stilove iz njegove window klase (mozes prvo sa spy++ da vidis sta tacno od stilova treba da uklonis/dodas)..

za primere i dalje ideje konsultuj ApiGuide programcic (ako me secanje ne vara mislim da bas imaju primer gde notepad prozor integrisu u vb formu)


Ovo bi trebalo da bude resenje mog problema :)
Nasao sam i nesto jos lakse za razumevanje, samo ne mogu da podesim da se notepad otvori maksimalno:
Code:
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Dim OtherApplicationsWindowHandle As Long

Private Sub Form_Load()

OtherApplicationsWindowHandle = FindWindow("Notepad", vbNullString)

If IsWindow(OtherApplicationsWindowHandle) = 0 Then

  Call Shell("notepad", vbMaximizedFocus)

  Do Until IsWindow(OtherApplicationsWindowHandle) <> 0
   OtherApplicationsWindowHandle = FindWindow("notepad", vbNullString)
   DoEvents
  Loop
End If

Me.Visible = True

SetParent OtherApplicationsWindowHandle, Me.hWnd

End Sub


Naredba Call Shell("notepad", vbMaximizedFocus) nema uticaja na otvaranje maksimalnog notepad-a?!?
[ Shadowed @ 24.12.2010. 11:14 ] @
Mene najvise kopka kakav si to problem imao sa TextBox-om a koji ne postoji u Notepad-u :)
[ igor-ch @ 24.12.2010. 12:50 ] @
Citat:
Shadowed: Mene najvise kopka kakav si to problem imao sa TextBox-om a koji ne postoji u Notepad-u :)


Ukratko: napravio sam program koji se izvrsava na jednom DFS serveru i pomocu koga mogu da se otvaraju log fajlovi koji se nalaze na 34 razlicita udaljena servera...


1. Varijanta
Kada direktno otvaram fajl sa npr:
Code:
TX.Load file

odnosno
Code:
RichTextBox1.LoadFile (file)

fajl se otvara brzo, ali se desava da aplikacija (koja kreira taj log-fajl, koji hocu pomocu mog programa da otvorim) pocinje da "pise" novi log-fajl.

2. Varijanta
Kada na sledeci nacin otvaram fajl (Get):
Code:
Dim t As String
Dim Free As Integer

Free = FreeFile()

Open file For Binary As Free
  t = Space$(LOF(Free))
  Get #Free, , t
Close (Free)

aplikacija koja kreira taj log-fajl ne pise novi log, medjutim problem je sto je kod vecih fajlova (30-50 mb) potrebno veoma dugo dok se isti otvore (a uz to su mem. i cpu proptereceni)

3. Varijanta
Kada se otvara u notepad-u
Code:
Dim pa As String, pat1 As String, pat2 As String
pat1 = "notepad"
pat2 = file
pa = pat1 & pat2
Shell pa, vbNormalFocus

niti se kreira novi log, niti se opterecuje server. Medjutim, notepad se otvara kao novi program, a to nije dobro resenje...
[ Shadowed @ 24.12.2010. 13:36 ] @
Tu je najverovatnije problem do deljenja tog fajla. Tvoja aplikacija ga zauzme previse restriktivno pa aplikacija koja upisuje logove ne moze da pise vise u taj fajl i kreira nov.
Mozes probati citanje iz fajla preko API-a ako ti odgovara. Tu mozes postaviti neko manje restriktivno otvaranje fajla (ocigledno moze, posto notepad to radi ).
[ dzigilibonglica @ 25.12.2010. 10:13 ] @
Da uzrok problema ti je egzaktno opisao Shadowed.

Restriktivno otvarash fajl, i ta aplikacija blokira sve ostale. E sad da ne bi nesto previshe budzio i radio sa API-jem posao koji je jednostavan, sto ne uradish sledece:

Kopirash sa udaljenog racunara fajl na racunar koji ga iscitava u neki Temp.txt (filecopy, ili neka FSO.* fukkcija..nacina je mnogo) i onda ga lepo RichText kontrolom otvorish sa tog racunara?

Bez muke i nauke, a posao radi.
[ igor-ch @ 27.12.2010. 08:19 ] @
Probao sam da ga kopiram, isto se desava u toku kopiranja (kreira se novi log-fajl) - bilo da ga kopiram pomocu mog programa, bilo da ga kopiram rucno...

Jedino resenje mi je za sada API....

Jel bi mogao neko da mi pomogne u vezi otvaranja notepad-a? Kako da ga otvorim maksimalno?
Kao sto rekoh,
Code:
Call Shell("notepad", vbMaximizedFocus)
ne funkcionise kao bi trebalo:
http://www.elitesecurity.org/t418000-0#2769323
[ igor-ch @ 28.12.2010. 10:38 ] @
Citat:
Aleksandar Ružičić: mozes sa SetParent winapi funkcijom to da izvedes, samo ti treba hwnd notepad prozora koji ti pokrenes i hwnd forme na koju hoces da stavis notepad (to vec imas - Me.hWnd)....


Nikako ne mogu da notepad pokrenem u maksimalnom modu: otvara se jedino u normalnom modu, bez obzira sta stoji kao Shell parametar (vbMaximizedFocus, vbMinimizedFocus...). Jedino kada stavim za parametar vbHide , onda se notepad ne prikazuje... Jel to mozda SetParent winapi ima neki problem ili ja mozda nesto pogresno radim?

Prikacio sam jedan mali primer, pa ako neko ima vremena i volje, zamolo bih da mi pomogne.
[ igor-ch @ 28.12.2010. 14:51 ] @
Reseno pomocu API SetWindowsPlacement!

Citat:
Aleksandar Ružičić: tako ces notepad da stavis unutar forme, ali sa sve njegovim titlebarom i menu bar-om, mada i njih mozes da uklonis tako sto ces da sklonis neke stilove iz njegove window klase (mozes prvo sa spy++ da vidis sta tacno od stilova treba da uklonis/dodas)..


A kako ide ovo sa uklanjanjem stilova? Vecinu stvari sam uspeo da doteram pomocu "Resource Tuner" programa (izbacio sam otvaranje fajla, snimanja, printanje...), ali jedino sto mi nikako ne polazi za rukom je kako da se Notepad zatvori, bez da pita (Pop-up) da li treba da se promena snimi?


[Ovu poruku je menjao igor-ch dana 29.12.2010. u 15:34 GMT+1]