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

Kontrola druge aplikacije

[es] :: Office :: Excel :: Kontrola druge aplikacije

[ Pregleda: 658 | Odgovora: 5 ] > 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 druge aplikacije17.12.2021. u 08:53 - pre 28 meseci
Imam problem sa ovim jednostavnim kodom. Na jednom računaru sve radi kako bi trebalo dok na drugom računaru isti program radi polovično.

Naime ovaj code pročita šta piše u otvorenom Notepadu i to prikaže u MsgBox-u, a posle toga u isti notepad upiše drugi tekst i ponovo ga pročita i prikaže u TextBoxu.
Na računaru na kome ne radi, iz nekog razloga ne uspeva da očita šta piše u Notepadu ali uspeva da u njega unese novi tekst.

Nemam predstavu zašto se to dešava i u kom pravcu da tražim grešku.

Code:
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_GETTEXT = &HD
Private Const WM_SETTEXT = &HC

Private Sub Form_Load()
Dim lNoteP&, edit&
lNoteP = FindWindow("Notepad", vbNullString)
edit = FindWindowEx(lNoteP, 0&, "Edit", "")

MsgBox GetText(edit)
    SetText edit, "HEYYY IK BEN JOP"
MsgBox GetText(edit)
End Sub
Private Sub SetText(Wnd As Long, Text As String)
    SendMessage Wnd, WM_SETTEXT, ByVal CLng(0), ByVal Text
End Sub
Private Function GetText(Wnd As Long)
Dim l%, Wintext$, retval&
    l = SendMessage(Wnd, WM_GETTEXTLENGTH, ByVal CLng(0), ByVal CLng(0)) + 1
    Wintext = Space(l)
    retval = SendMessage(Wnd, WM_GETTEXT, ByVal l, ByVal Wintext)
GetText = Left(Wintext, retval)
End Function
 
Odgovor na temu

Blue82
dipl. ecc.

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



+322 Profil

icon Re: Kontrola druge aplikacije17.12.2021. u 13:17 - pre 28 meseci
Mislim da sam pronašao mada je bilo po sistemu probanja i logičkog zaključivanja.

Code:
Private Function GetText(Wnd As Long)
Dim l%, Wintext$, retval&


U ovom delu prilikom deklarisanja promenjive "l" sam obrisao % koji ne znam čemu služi i tada je proradilo.
Mada me baš zanima da li će bez toga raditi na onom računaru na kom je i sa tim korektno radio.
 
Odgovor na temu

bokinet

Član broj: 29844
Poruke: 574



+50 Profil

icon Re: Kontrola druge aplikacije17.12.2021. u 22:30 - pre 28 meseci
Predstavlja tip promenljive.
Vise o tome:
docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/type-characters
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.dynamic.sbb.rs.



+322 Profil

icon Re: Kontrola druge aplikacije18.12.2021. u 09:50 - pre 28 meseci
Zanimljivo, to nisam znao i tek sada mi nije jasno zašto onda program nije hteo korektno da radi kada je tip te promenjive korektno postavljen.

Uglavnom rešio sam sve, ostao mi je još samo jedan problem.
Nikako da pronađem način kako preko sendmessage da pošaljem komandu da stisnem taster "F6" (u toj drugoj aplikaciji koju kontrolišem)? Našao sam neke primere ali ne funkcioniše kod mene.
 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
89.216.49.*

Sajt: www.gowi.rs


+109 Profil

icon Re: Kontrola druge aplikacije18.12.2021. u 11:00 - pre 28 meseci
Probaj sa SendKeys "{F6}", ali treba notepad da ti bude aktivan AppActivate ...
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.dynamic.sbb.rs.



+322 Profil

icon Re: Kontrola druge aplikacije18.12.2021. u 13:03 - pre 28 meseci
Ne želim SendKey jer onda nemam potpunu kontrolu nad aplikacijom.
To sam pravio ranije pa bih sada da unapredim. Naime dešava se da program koji kontrolišem štucne jer mu treba vremena da nešto odradi a ja preko SendKey šaljem nove naredbe koje se ne izvršavaju (odlaze niz vetar).

Možda grešim ali testirao sam SendMessage na veliki broj slanja komandi i deluje mi da kod nje ne dolazi do gubljenja komandi. Kada kroz for petlju pustim 300 komandi program to izvrti za par sekundi i stane sa izvršavanjem, ali aplikacija kojoj sam zadao da to radi, nastavlja da ih izvršava sledećih par minuta i nije došlo do gubljenja ni jedne komande. Probao sam više puta. Deluje kao da SendMessage čeka dok aplikacija koju kontrolišem ne primi komandu.

Zato sam želeo da probam preko nje.
Takođe prednost SendMessage je što on izvršava naredbe i ako aplikacija koju kontrolišem nije aktivna, pa mogu da radim nešto drugo.
 
Odgovor na temu

[es] :: Office :: Excel :: Kontrola druge aplikacije

[ Pregleda: 658 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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