Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kontrola drugog programa

[es] :: Visual Basic 6 :: Kontrola drugog programa

[ Pregleda: 2822 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.static.isp.telekom.rs.



+322 Profil

icon Kontrola drugog programa27.08.2010. u 17:58 - pre 165 meseci
Imam problem. Potrebno mi je da popunim vise polja nekog programa od koga nemam sorce.
Trenutno on radi na sledeci način. Forma mog programa je uvek on top u odnosu na sve prozore u Windowsu. Ja kliknem na dugme kreni u mom programu i on me ceka 2s da ja nanisanim pocetno mesto na formi drugog programa, odakle pocinje popunjavanje i zatim se pomocu keysends upisuju vrednosti u polja i krece sa Tab-ovima od polja do polja.

E sad zanima me neki elegantniji nacin za postizanje istog. Mozda kada bi moj program prepoznao da se korisnik pozicionirao u neki Textbox u drugom programu i tada da zapocne izvrsavanje?

Krace i lepse receno, kako da iz mog programa upisem neku vrednost u odredjeni textbox drugog programa?
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Kontrola drugog programa28.08.2010. u 11:56 - pre 165 meseci
ukratko: moras da radis subclassing tog programa, tj da presreces poruke od strane windowsa namenjene tom programu, da ih obradis i da ih prosledis natrag ciljanom programu.

guglaj malo: Google: "vb6 subclassing"
 
Odgovor na temu

miki987

Član broj: 208123
Poruke: 511
178.217.10.*



+5 Profil

icon Re: Kontrola drugog programa28.08.2010. u 12:58 - pre 165 meseci
Aleksandre na ovoj temi malo dole ispod https://www.elitesecurity.org/...setup-factory-kao-setup-wizard hteo sam nesto slicno kao Blue82 da postignem.
Molim te reci mi kako da iz mog VB-a samo kliknem na buton drugog programa koji takodje aktivan konretno mislim na PRIMO PDF, zelim da mi se iz DataReporta stampa PDF dokument a ne znam da li je zapravo moguce to.
Dakle imam DataReport, idem na ikonicu za stampu biram virtuelni stampac i PRINT,e sada poziva se PRIMO PDF koji je HIDE stisne se na to dugme i on odradi konvertovanje u PDF?
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Kontrola drugog programa28.08.2010. u 13:30 - pre 165 meseci
to bi mogao sa SendMessage api-jem, konkretno posaljes BM_CLICK poruku, sve sto ti treba je HWND (window handle) tog dugmeta, koje mozes da nadjes sa FindWindow set-om apija, pretrazi malo i ovaj forum, bilo je dosta price o tome..

ja ti nazalost ne mogu pomoci jer godinama ne radim u vb6 i ne posedujem ga vise tako da ne bih mogao ni da isprobam kod.
 
Odgovor na temu

miki987

Član broj: 208123
Poruke: 511
178.217.10.*



+5 Profil

icon Re: Kontrola drugog programa28.08.2010. u 13:40 - pre 165 meseci
predpostavljam da je to neki debuger, otvorim EXE nadjem kod za taj Command i iz mog exe saljem click...sve je to za mene teorija, ajde ako se neko javne nek mi ostavi primer. Hvala
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Kontrola drugog programa28.08.2010. u 15:47 - pre 165 meseci
nije debugger, SendMessage je isti api koji windows koristi da obavesti tvoj program da je kliknuto na neko "tvoje" dugme, samo sto vb to lepo sakrije u vb eventove i pozove Button1_Click()

mozes da prelistas Programming Windows knjigu od Petzolda, za c/c++ je ali ima lepo objasnjeno kako radi messaging u windowsu.
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-a-2.sezampro.yu.



+322 Profil

icon Re: Kontrola drugog programa29.08.2010. u 15:49 - pre 165 meseci
Postoji li neki primer kako da se sazna HWND nekog dugmeta, labele, textboxa i slicno? Znam primer kako se to radi kada se cita podatak sa Internet stranice, ima mali kod koji ispisuje sve HWND objekata na koje se klikne ali za ovo ne znam.
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
...213.wifi.dynamic.gronet.rs.



+3 Profil

icon Re: Kontrola drugog programa31.08.2010. u 20:08 - pre 165 meseci
Evo.


Code:
'**************************************
' Name: ***UPDATED*** Window SPY
' Description:***UPDATED*** Gets tons of
'     information on the window your mouse is
'     over.
' By: Matt Evans
'
'This code is copyrighted and has' limited warranties.Please see http://w
'     ww.Planet-Source-Code.com/vb/scripts/Sho
'     wCode.asp?txtCodeId=1424&lngWId=1'for details.'**************************************


'Put this is notepad and rename is winsp
'     y.frm

Private Sub Timer1_Timer()

    WindowSPY Text1, Text2, Text3, Text4, Text5, Text6, Text7, Text8, Text9
End Sub


Code:
'**** Put this In a module ****

'**************************************
'Windows API/Global Declarations for :**
'     *UPDATED*** Window SPY
'**************************************
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long


Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Public Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long


Public Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long


Public Declare Function GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long)


Public Declare Function GetWindowWord Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Integer


Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

Function WindowSPY(WinHdl As TextBox, WinClass As TextBox, WinTxt As TextBox, WinStyle As TextBox, WinIDNum As TextBox, WinPHandle As TextBox, WinPText As TextBox, WinPClass As TextBox, WinModule As TextBox)

    'Call This In A Timer
    Dim pt32 As POINTAPI, ptx As Long, pty As Long, sWindowText As String * 100
    Dim sClassName As String * 100, hWndOver As Long, hWndParent As Long
    Dim sParentClassName As String * 100, wID As Long, lWindowStyle As Long
    Dim hInstance As Long, sParentWindowText As String * 100
    Dim sModuleFileName As String * 100, r As Long
    Static hWndLast As Long
    Call GetCursorPos(pt32)
    ptx = pt32.X
    pty = pt32.Y
    hWndOver = WindowFromPointXY(ptx, pty)


    If hWndOver <> hWndLast Then
        hWndLast = hWndOver
        WinHdl.Text = "Window Handle: " & hWndOver
        r = GetWindowText(hWndOver, sWindowText, 100)
        WinTxt.Text = "Window Text: " & Left(sWindowText, r)
        r = GetClassName(hWndOver, sClassName, 100)
        WinClass.Text = "Window Class Name: " & Left(sClassName, r)
        lWindowStyle = GetWindowLong(hWndOver, GWL_STYLE)
        WinStyle.Text = "Window Style: " & lWindowStyle
        hWndParent = GetParent(hWndOver)


        If hWndParent <> 0 Then
            wID = GetWindowWord(hWndOver, GWW_ID)
            WinIDNum.Text = "Window ID Number: " & wID
            WinPHandle.Text = "Parent Window Handle: " & hWndParent
            r = GetWindowText(hWndParent, sParentWindowText, 100)
            WinPText.Text = "Parent Window Text: " & Left(sParentWindowText, r)
            r = GetClassName(hWndParent, sParentClassName, 100)
            WinPClass.Text = "Parent Window Class Name: " & Left(sParentClassName, r)
        Else
            WinIDNum.Text = "Window ID Number: N/A"
            WinPHandle.Text = "Parent Window Handle: N/A"
            WinPText.Text = "Parent Window Text : N/A"
            WinPClass.Text = "Parent Window Class Name: N/A"
        End If

        hInstance = GetWindowWord(hWndOver, GWW_HINSTANCE)
        r = GetModuleFileName(hInstance, sModuleFileName, 100)
        WinModule.Text = "Module: " & Left(sModuleFileName, r)
    End If

End Function

'****** End OF MODULE ******


rgdrajko
Prikačeni fajlovi
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-a-6.sezampro.rs.



+322 Profil

icon Re: Kontrola drugog programa01.09.2010. u 19:42 - pre 165 meseci
Hvala puno ako radi! Jos nisam isprobao ali sad cu.
Pozdrav!
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-4.sezampro.yu.



+322 Profil

icon Re: Kontrola drugog programa08.09.2010. u 18:01 - pre 164 meseci
Oooo Ruzicicuuuuu.... :)

Znas li mozda kako da pronadjem HWND nekog objekta (npr textboxa) koji u sebi ne sadrzi nikakav tekst?
Pomocu FindWindowEx je lako pronaci textbox u kome neso pise ili Dugme ili bolo sta u cemu nesto pise ali ako je Textbox prazan, ne znam kako da ga lociram.
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Kontrola drugog programa08.09.2010. u 18:46 - pre 164 meseci
sto mene prozivas kad ti je rajko nasao kod na netu? :)

trazi elemente po njihovom class name-u (pomocu spy++ mozes lako da saznas zeljeni class name), ja sam uvek tako radio.
mislim da cak i ima okaceno ovde na esu neki moj kod koji radi to pretrazivanje.

edit: evo nadjoh kod: http://www.elitesecurity.org/p1907031
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-4.sezampro.yu.



+322 Profil

icon Re: Kontrola drugog programa08.09.2010. u 19:46 - pre 164 meseci
Onaj njegov code je dobar i koristim ga da ocitam klasu koju trazim ali za HWND textboxa je neupotrebljiv posto se on uvek menja kod svakog startovanja programa a meni treba kod koji ce ga prepoznati a ne da korisnik prvo stavi misa na sve textboxove pa stisne neku kombinaciju tastera i da program zapamti njihove HWND- ove da bi posle radio sa njima :)

Sad cu pogledati ovo sto si mi poslao. Hvala!

EDIT

Moze pojasnjenje po cemu trazi.

Code:

LookupWindow = GetChild(Parent, ClassName, Title, UseLike)


Parent?
UseLike?

Ne vidim kako mogu pronaci od 3 textboxa da upisem u npr drugi.
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-a-1.sezampro.yu.



+322 Profil

icon Re: Kontrola drugog programa09.09.2010. u 18:38 - pre 164 meseci
Eheeej drug,

Verovatno nisi skontao da sam pisao posto sam samo editovao, ili mozda nemas resenje? Reci mi cisto da znam, da ne cekam.
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Kontrola drugog programa10.09.2010. u 14:56 - pre 164 meseci
nisam video edit...

Citat:
Blue82
Moze pojasnjenje po cemu trazi.

Code:

LookupWindow = GetChild(Parent, ClassName, Title, UseLike)


Parent?
UseLike?


Parent parametar znaci od kog prozora ce da pocne da trazi to sto ti treba, ako prosledis 0 onda ce traziti od desktopa (znaci svi otvoreni programi), ukoliko vec imas hwnd aplikacije koja ti treba (tj prozora koji sadrzi taj textbox) onda to prosledi kao vrednost Parent parametra.

UseLike mozes da setujes na True i onda ce se provera text/class name-a vrsiti operatorom Like umesto znakom jednakosti (kada sam ovo pisao meni je trebao neki prozor kome se klasa svaki put menja prilikom pokretanja pa sam zato ubacio Like opciju)

mozes da prosledis samo ClassName ili samo Title ili oba parametra (inace, treba da pozivas LookupWindow a ne GetChild direktno, tako da i ne moras onaj Parent parametar da prosledjujes ako ti ne treba), zavisi sta ti treba.

Citat:
Blue82: Ne vidim kako mogu pronaci od 3 textboxa da upisem u npr drugi.

hmm, to nije bilo predvidjeno (nije mi trebalo), ali nije tesko izmeniti kod da podrzava i pretragu po Indexu.

evo mozda ovo radi (nemam vb6 da probam, pisem napamet):
Code (vb):

Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Public Function LookupWindow(Optional ByVal ClassName As String, Optional ByVal Title As String, Optional ByVal Index As Long = 0, Optional UseLike As Boolean = False, Optional ByVal Parent As Long) As Long
    LookupWindow = GetChild(Parent, ClassName, Title, UseLike, Index)
End Function
'

Private Function GetChild(Optional ByVal hwnd As Long, Optional ByVal ClassName As String, Optional ByVal Title As String, Optional UseLike As Boolean = False, Optional ByVal Index As Long = 0)
   
    Dim lHandle     As Long
    Dim lRet        As Long
    Dim sBuffer     As String
    Dim bClassMatch As Boolean
    Dim bTitleMatch As Boolean
    Dim lIndex As Long

    lIndex = 0    

    Do
        lHandle = FindWindowEx(hwnd, lHandle, vbNullString, vbNullString)
       
        bClassMatch = False
        bTitleMatch = False
       
        If lHandle <> 0 Then
           
            bClassMatch = LenB(ClassName) = 0
            bTitleMatch = LenB(Title) = 0
           
            If Not bClassMatch Then
                   
                sBuffer = String(160, 0)
                lRet = GetClassName(lHandle, sBuffer, 160)
                sBuffer = Left$(sBuffer, lRet)
               
                bClassMatch = (UseLike And (sBuffer Like ClassName)) Or (Not UseLike And (ClassName = sBuffer))
           
            End If
           
            If Not bTitleMatch Then
               
                sBuffer = String(160, 0)
                lRet = GetWindowText(lHandle, sBuffer, 160)
                sBuffer = Left$(sBuffer, lRet)
               
                bTitleMatch = (UseLike And (sBuffer Like Title)) Or (Not UseLike And (Title = sBuffer))
           
            End If
           
            If bClassMatch And bTitleMatch And lIndex = Index Then
               
                GetChild = lHandle
                Exit Function
           
            Else
               
                lRet = GetChild(lHandle, ClassName, Title, UseLike, Index)
               
                If lRet <> 0 Then
                   
                    GetChild = lRet
                    Exit Function
               
                End If
               
            End If
       
        End If

        lIndex = lIndex + 1    

    Loop While lHandle

End Function
 

 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-a-1.sezampro.yu.



+322 Profil

icon Re: Kontrola drugog programa10.09.2010. u 20:15 - pre 164 meseci
E ovo radi. Kao i uvek na tebe se moze osloniti. Hvala ti!
 
Odgovor na temu

[es] :: Visual Basic 6 :: Kontrola drugog programa

[ Pregleda: 2822 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.