|
[ Proko @ 12.10.2005. 18:28 ] @
| Pošto verujem (skoro sam siguran) da će mi elektroničari pre pomoći, prepisao sam temu iz Windows aplikacija:
-Ima li neko, ili može da uradi, jednostavan program pomoću kojeg bi telefonski broj upisan u klipboard bio pozvan pomoću modema. Razgovor bi se dalje obavljao običnim telefonom, i to nije problem. Te mogućnosti ima Phone Dialer Pro, međutim, istekao mi je trayal period, a ponovnom instalacijom neće da radi na XP-u (kao što je radio na Win98!). Taj program ima i niz drugih mogućnosti, ali meni je samo ovo potrebno. |
[ badbadbad @ 12.10.2005. 21:54 ] @
Teoretski prijedlog za rijesenje:
Vecina modema podrzava takozvane AT komande. Ima malo razlike od modema do modema koje komande podrzava, ali vecina modema ima "dial" komandu. Najvjerovatnije AT+Dn gdje je n broj telefona koji zoves. Eh sad sve sto treba da uradis jeste da napravis programcic, u bilo kojem programerskom jeziku i da posaljes tu AT komandu na COM portu gdje ti je modem prikopcan. Ovo znam da garantirano radi sa GSM modemima, a vjerujem da je isti postupak i sa obicnim modemima.
[ Proko @ 12.10.2005. 21:57 ] @
Citat: badbadbad: ... Eh sad sve sto treba da uradis jeste da napravis programcic, u bilo kojem programerskom jeziku i da posaljes tu AT komandu na COM portu gdje ti je modem prikopcan...
Pa to je upravo to što sam pitao, jer ne znam sam da uradim...
[ badbadbad @ 12.10.2005. 22:12 ] @
Hmm... mozda najbolje da ti kupis ili crackiras taj Phone Dialer Pro (vidim ima crackova za verziju 4.0) i nastavis njega koristiti. Jer vjerujem da nisi voljan uciti programirati da bi rijesio problem.
[ dr.NPN @ 13.10.2005. 03:37 ] @
Nisam siguran da sam dobro razumeo sta hoces, ali samo da kazem, mozda pomogne, da ja za sekretaricu i pozivanje koristim ModemSpy ima da se nadje i ono.
Probaj
[ vranjin @ 13.10.2005. 10:33 ] @
Imaš program " Imenik " naših autora iveoma mi se dopada a što je najbitnije cena 000000000 din. Ima mogućnost pozivanja tel. broja. Pogledaj na www.dv.co.yu/imenik/
pozdrav
[ Proko @ 13.10.2005. 11:38 ] @
Nažalost, ne dogovara mojim potrebama, zato što u taj imenik moram prvo upisati telefonski broj. Ja imam Excel tabelu sa mušterijama i ne odgovara mi da njihov broj unosim u imenik, niti da ih pamtim po imenu, prezimenu i sl. Pro dialer mi je omogućavao da prostim kopiranjem broja (tu sam uradio prečicu) zovem taj isti broj, i da sa njim ne zatrpavam imenik. Skinuo sam sada verziju 4 (imao sam 6), i to je OK, ali iz meni nepoznatih razloga ne uspevam da ubacim crack...možda nije pravi. Čak i kupovina tog programa ne bi bila problem, kada ne bismo živeli tu gde živimo. Nedavno sam plaćao članarinu za neki forum (doduše na privatnu adresu u inostranstvu), i ustanovio da iz ove zemlje nije moguće platiti nikome napolje, ako vam nije otac ili brat!!!
Pitanje sam postavio zato što iz svih tih opcija koje ima Pro dialer meni treba samo pozivanje broja smeštenog u klipboard, i ništa više. Mislio sam da to nije problem za nekoga ko zna programiranje.
[ badbadbad @ 13.10.2005. 14:50 ] @
Evo ovdje imas par linkova za crack:
http://asta-killer.com/?srch=Phone+Dialer+Pro&submit=+search
pa probaj mozda neki drugi.
[ vladobk @ 14.10.2005. 18:28 ] @
- mozda bi se nesto moglo pokusati iz VB (visual basic)
- ima primer kako se poziva telefonsko broj u HELPU
- ja sada nemam vremena za probu
----pozzz vladobk
[ Proko @ 14.10.2005. 19:20 ] @
Sigurno da bi u VB to moglo, samo što ja to ne znam da uradim. Znam u Excelu, ali njegov VB to ne može, ili nisam otkrio kako. Meni bi najviše odgovaralo da to bude neki makro u Excelu, pošto su mi telefonski brojevi u Excelovim tabelama.
[ badbadbad @ 17.10.2005. 14:23 ] @
Evo ovako. Trebalo bi da moze i u Excelu, premda to nisam nika probao sa VBA. Visual Basic ima komponentu MSCOMM32.OCX koja se koristi za komunikaciju preko serijske porte. Ako nemas VB instaliran, vjerovatno nemas ni tu kompunentu, ali je mozes skinuti na internetu na primjer ovdje:
http://www.yes-tele.com/mscomm.html
Onda odes u Excel u VBA (Visual Basic for Applications) i dodas jednu "UserForm" u "Toolbox"-u kliknes desnim misom i dodas MSCOMM komponentu (u listi ce ti pisati Microsoft Communications Control). Onda mozes nju koristiti za daljnu komunikaciju sa COM portom na kompjuteru to jeste modemom. Na internetu ces sigurno naci dovoljno primjera kako se ta komponenta koristi.
[ Proko @ 17.10.2005. 20:17 ] @
Ipak bi mi trebala malo konkretnija uputstva, recimo, već na prvom koraku imam problem:
"This is the MSCOMM32.OCX that should be stored in your \windows\system directory."
Ja nemam "system directory" !? Ili ga ne umem naći...
Zatim u Exelovom VBA Toolbox nije aktivan...
Ako neko može korak po korak da mi napiše, bio bih zahvalan...
[ badbadbad @ 18.10.2005. 06:05 ] @
"\windows\system directory" misli se na "\windows\system32" ili "\windows\system" ovisno o kojem operativnom sistemu koristis. U WinXP je ovaj prvi. Ali, manje vise, ti nebi trebao da imas potrebe da fizicki ides u taj katalog. Toolbox u VBA mozes vidjeti ako odes na meni i izaberes "View->Toolbox"
[ Proko @ 18.10.2005. 10:31 ] @
A zašto mi u Excelovom VBA "View->Toolbox" nije aktivan, pa ga stoga i ne mogu uključiti.
[ badbadbad @ 18.10.2005. 12:30 ] @
Predpostavljam da nije aktiviran zato sto nisi ubacio "UserForm" u projekat. Klikni desnim na projekat i izaber "Insert->UserForm" i onda ce ti ToolBox doci automatski.
[ Proko @ 18.10.2005. 14:02 ] @
Nema ga u spisku (ako je to taj spisak), ni pod imenom " Microsoft Communications Control", ni pod imenom "MSCOMM", a iz slike možeš videti da je on smešten na C\WINDOWS\system32
[Ovu poruku je menjao Proko dana 18.10.2005. u 15:03 GMT+1]
[ badbadbad @ 19.10.2005. 07:00 ] @
Da bi koristio COM komponente u projektu nije dovoljno da kopiras fil u sistem direktori, moras takodje registrovati taj fil u registriju. U ovome slucaju:
Odes na "start" i kliknes "run" i napisi ovo:
"regsvr32 C:\WINDOWS\System32\MSCOMM32.OCX"
Kad to uradis i restartas Excel, trebao bi komponent da bude vidljiv u listi.
[ Proko @ 19.10.2005. 09:47 ] @
OK, to sam uradio, i sad je tamo ali...
"The control could not be created because it is not properly licensed."
[ badbadbad @ 19.10.2005. 10:29 ] @
Ako procitas na onoj stranici gdje si skinuo MSCOMM.ZIP vidjeces razlog:
... If you get a licensing error the only way we know to get the licensing is to install VB 6 Professional. You can try the registry entry listed below. Microsoft Technical Support and Sales Staff was of no use when we tried find out how to register or purchase the Comm control.
We were sent this string to be entered into the registry to clear the license issue. We have not tried it but the sender says it worked for them.
[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
[ Proko @ 19.10.2005. 11:00 ] @
Shvatio sam ja razlog, ali ne znam može li se nešto uraditi ako nemam licencu za VB 6, ili sve to ne vredi ništa.
I šta znači ono:
"[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
[ badbadbad @ 19.10.2005. 13:45 ] @
To znaci da u registriju mozrs probati dodati "String value" kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
pod
HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905
Da bi editovao registri klikni na Start->Run i napisi regedit,
ali pazi sta radis jer ako nesto obrises moze ti sjebati operativni sistem.
Ali kao sto su ovi napisali, pitanje je dali ce to funkcionisati. Inace ova komponenta dolazi sa licenom kad instaliras VB.
[ vladobk @ 19.10.2005. 14:25 ] @
Evo i mene. Kod mene ima instaliran VB6 i vec sam radio serijsku komunikaciju sa raznim uredjajima i raznim protokolima, ali ne i sa modemom. Imam XP i modem je na comm3. E sad u HELPU pise sledece
' Open the serial port
MSComm1.CommPort = 2
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
' Activate the modem and dial a phone number.
MSComm1.Output = "ATDT 555-5555" & vbCr
MSComm1.PortOpen = False
'*****************************************************
ja sam korigovao ovako
' Open the serial port
MSComm1.CommPort = 3
MSComm1.Settings = "115200,N,8,1"
MSComm1.PortOpen = True
' Activate the modem and dial a phone number.
MSComm1.Output = "ATDT ...-..." & vbCr '
MSComm1.PortOpen = False
rezultat nista kada ga debagujem on kao da krene cuje se ono css ali nema poziva.
sta sad?
[ badbadbad @ 20.10.2005. 11:19 ] @
To sto kazes da se cuje neki zvuk iz modema, znaci da si uspostavio vezu sa modemom i da VB uspjeva nesto poslati modemu. Sto znaci da uspjevas komunicirati na serijsku portu.
MSComm1.Settings = "115200,N,8,1"
Moze biti da tebas slati nekom drugom brzinom na primjer 9600 sto je veoma standard da bi modem skontao sta mu saljes.
Bez obzira, trebao bi da imas rutinu (metodu) koja ce citati podatke koje modem tebi salje nazad, tako da mozes vidjeti sta se desava (dali ti vraca neke greske). Probaj sa ovim:
Private Sub MSComm1_OnComm()
Debug.Print MSComm1.Input
End Sub
Mozes takodje koristiti HyperTerminal za testiranje i sa njim poslati string na com portu. U slucaju da ne znas, HyperTerminal je programcic koji je dolazio uz prijasnje verzijame windowsa, nisam siguran dali dolazi standard uz XP. Uglavno se moze skinuti na internetu.
Start->Programs->Accessories->Communications->HyperTerminal
[ vladobk @ 20.10.2005. 13:18 ] @
fino - hvala za ideju, radio sam sa hiper terminalom pokusacu i ovde da ga upotrbim
- sto se tice brzine tako je podeseno na samom modemu 115200 ali sam isao i sa 9600 i nista
- kad stignem javicu rezultate
--- pozdrav vladobk
[ vladobk @ 24.10.2005. 18:24 ] @
iz hiper terminala moze da se pozove broj metodom copy paste
ja sam zvao sam sebe na mobilni
mozda je to resenje za sada
[ Proko @ 22.11.2005. 18:33 ] @
Nisam uspeo da rešim problem, našao sam SwyxDial kb2100, koji bi trebao da radi baš to što meni treba: obeležim ćeliju u excelu sa telefonskim brojem i kliknem na ikonu sa telefonom i to je sve. Kažem trebalo bi da radi, ali NE RADI! Dobijem obaveštenje:

Isto je bilo i sa WIN98, i sa XP, pa i na drugom računaru. Pokušavao sam da mu na to mesto smestim to što traži, ali on to ne vidi. Taj SwyxDial postoji i za Word, i on isto ne radi, mada mi za Word i ne treba.
Ako je neko raspoložen da pogleda, možda sam nešto prevideo. Taj makro, modul ili kako se već zove je dole, a takođe i neki makro, koji sam našao na netu u vezi MSCOM-om, koji mi takođe ne radi.
[ lord Vader @ 23.11.2005. 20:12 ] @
Proko da li ti imaš eksterni ili interni modem? Ako imaš eksterni kome treba da se pošalje AT komanda ja ću da ti napravim to! Ne znam kako to ide za interni.
[ Proko @ 23.11.2005. 21:08 ] @
Interni. Ali, kao što sam već napomenuo, meni to radi uz pomoć posebnog programa Phone Dialer, koji bih hteo da zaobiđem, zato što:
- to je trayal verzija i često mora da se reinstalira
- neki put i neće ponovo da radi
- pri podizanju OS traži da se potvrdi agrement
- pri otvaranju Excela (samo prvi put) mora se setuje Excel Dialer=enabled (što bi trebalo da upamti, ali neće.
Šta misliš o SwyxDialu, jesi li pogledao?
[ lord Vader @ 23.11.2005. 21:26 ] @
Vidi ja bih znao da napišem za externi koji je na COM portu, ali ne znam kako da otvorim port tog tvog modema. Ako neko zna kako se otvara takav modem neka kaže da završimo posao!
[ lord Vader @ 23.11.2005. 22:24 ] @
Sad sam saznao da može kao eksterni jer i interni ide na neki virtuelni COM port. Probaj iz HT da otkucaš ono što su gore navodili i ako pozove broj ja ću da ti napravim program samo za to tvoje.
[ Proko @ 23.11.2005. 22:30 ] @
Sa HT radi !
[ lord Vader @ 24.11.2005. 07:37 ] @
Pogledaj na kom je COM portu i kaži imaš li tonsku ili pulsnu centralu.
[ Proko @ 24.11.2005. 09:37 ] @
COM 3, centrala može i pulsno i tonski. Bolje bi bilo tonski.
[ lord Vader @ 24.11.2005. 10:47 ] @
Evo napisao sam, ja sam ga isprobao kod mene na SIEMENS mobilnom na COM 1 i 2 i radi super. Sve ti piše u Help meniju. Automatski traži modem na svim COM portovima i podešen je na tonsko biranje ali se sve ovo može podesiti ako ti ne odgovara.
Što se tiče programa potpuno je Open Source i ako ikome treba sors poslaću mu.
Ajde probaj pa javi da li radi!
[ Proko @ 24.11.2005. 11:20 ] @
A kako da ga pozovem iz Excela, odnosno da ga "ugradim" u Excel?
Inače radi, s time što bira pulsno, a podešen je na tonski. Kada se promeni na pulsno, opet bira pulsno.
I kako da automatski uzme broj upisan u ćeliju, a ne da ga ručno upisujem?
I još nešto...bilo bi poželjno da se posle biranja u roku od nekoliko sekundi sam isključi, pošto mi se telefon (spikerfon) automatski uključuje. (To sam već ranije uradio.) Posle obavljenog razgovora, on i dalje drži vezu, što znači da ga moram ručno isključivati.
[ lord Vader @ 24.11.2005. 12:06 ] @
Ne može da se ugradi u Excel. Što se tiče biranja i gašenja treba da mu pošalješ AT komande za to, što ja ne znam, ko neko zna neka napiše.
Znači potrebne su AT komande za postavljanje modema u tonski/pulsni režim rada i prekid veze po uspostavljanju.
Ja sam koristio 'ATDT0641111111; ' za tonsko biranje 'ATDP0641111111; ' za pulsno biranje
[ Proko @ 24.11.2005. 12:19 ] @
Pa onda, na žalost, nije mi od koristi taj program. U svakom slučaju, hvala! Ti si se ipak zainteresovao za reševanje tog problema.
Koliko se ja razumem (a ne razumem se baš mnogo), to bi trebalo da bude neki makro modul za Excel, poput SwyxDiala, koji sam gore okačio. Samo što mi to ne radi. Može li neko ko se bolje razume da pogleda u čemu je štos, teško da je baš neispravan. Možda treba samo nešto drugačije uraditi...
[ Proko @ 15.12.2005. 18:17 ] @
Postavio sam pitanje i na forumu VB & ASP, ali izgleda da je njima to previše jednostavno...elem, našao sam neki macro, koji sam malo preradio, i RADI !
Problem je što taj macro "nije završen", odnosno, ne isključuje Dialer, a trebalo bi da to uradi posle desetak sekundi (kada preuzmem vezu). I još jedan problem imam; na F particiji imam instaliran WinXP, i on aktivira taj Dialer sa C particije (Win98), ali ne upiše broj iz Excelove ćelije, kao što to radi Win98.
To bi mi trebalo, jer koristim iste Excelove tabele u oba sistema.
Da li bi neko bio voljan da mi pomogne oko makroa?
Code: Sub DialOut() '
Dim strDial As String
Dim intReturn As Long
strDial = ActiveCell.Value
intReturn = Shell("C:\Windows\Dialer.exe", 1) '\ verify correct path
Application.SendKeys (strDial & "%d")
End Sub
Macro koristi MS Phone Dialer (Win98)
[Ovu poruku je menjao Proko dana 15.12.2005. u 20:02 GMT+1]
[ damiru_2 @ 15.12.2005. 20:30 ] @
Može li:
Code: intReturn = Shell("[b]F[/b]:\{path}\Dialer.exe", 1)
Verujem da Dialer.exe sa WinXP-a nije isti kao sa Win98.
Osim toga...
http://www.phonedialerpro.com/phoneex.zip, 2.4 MB (2.508.993 bytes).
ili
http://w3.excel.com/us/update/setup.exe, 4.0 MB (4.187.643 bytes).
Excel Dialer-i. Probaj ako želiš, pa javi utiske. Moje je mišljenje da nema potrebe praviti nešto što je već provereno.
Pozdrav.
[ Proko @ 15.12.2005. 21:14 ] @
Kao prvo, hvala na interesovanju. Cod, koji si napisao ne radi. Trebalo bi nešto u stilu:
Code: Application.OnTime Now + TimeValue("00:00:10"),
ali ne znam šta dalje...
Dialer iz Win98 radi u OS Win98, samo treba da se isključi posle 10 sekundi, i to treba dodati. Kada ga pozovem sa WinXP, onda se pojavi, ali ne upiše broj. Kada upišem broj ručno, onda radi. Naravno, opet treba da se isključi, jer je u pitanju isti macro, koji nije dovršen.
Inače, već sam napisao zašto hoću baš da bude macro u Excelu, imam Phone Dialer Pro, i osim što posle određenog vremena neće da radi (To je trayal verzija, a kreka nema za tu verziju. Ima za neke starije verzije, a one ne preuzimaju broj iz Excela.) Dakle, osim što je problem sa "registracijom", on se prilikom podizanja sistema pojavljuje na ekranu pa ga moram ručno zatvoriti. Ako isključim automatsko podizanje, onda ga moram aktivirati ručno, što je isto! Zatim traži da podesim "vreme zauzeća", što ja i uradim, ali posle ponovnog podizanja opet traži.
I na kraju, zar ne misliš da nije isto nekoliko redova macro koda i nekoliko MB programa, koji ima sve i svašta, od čega mi treba samo pozivanje. I Excelov macro ide zajedno sa tabelom, pa eventualno prenošenje tabele na drugi kompjuter radi i tamo, bez dodatne instalacije posebnog programa.
[ damiru_2 @ 16.12.2005. 17:33 ] @
Citat: Proko: ... I na kraju, zar ne misliš da nije isto nekoliko redova macro koda i nekoliko MB programa...
Slažem se, naravno. Sad si me baš zaintrigirao, moraću da se pozabavim tom problematikom. Inače ja sam se pre nekih desetak godina baš zagrejao za VB programski jezik (pošto sam polako napuštao pomalo zastareli Clipper - baze podataka), pročitao sam neke knjige i ponešto naučio, ali sam prilično zarđao u tome. Razlog je bio što nisam video perspektivu u svemu tome, pa sam odustao od svega. Sve što sam tada ozbiljnije napravio u VB-u je jedna malena logička igra, a u VBA konvertor za M$ Word iz latinice u ćirilicu i obrnuto...
Sad je na redu ponovno instaliranje VB 6 i kopanje po objašnjenjima funkcija i naredbi.
A mogao bi i neki veći poznavalac VB-a da da svoj doprinos, nećemo ga ujesti! 
[ damiru_2 @ 16.12.2005. 22:25 ] @
Izvinjavam se, ja sam tek sada primetio da nije napisan kod onako kako sam mislio...
Umesto:
Code: intReturn = Shell("[b]F[/b]:\{path}\Dialer.exe", 1)
trebalo je da bude:
intReturn = Shell(" F:\{path}\Dialer.exe", 1)
dakle putanja do Dialer-a u XP-u.
Samo sam mislio da ću tako podebljati logičku oznaku drajva - F:, što izgleda ne funkcioniše tako.
Ovih dana baš nemam vremena, pa ću morati da ostavim tu zanimaciju za kasnije... Ali ima da je rešimo, makar i silom!
[Ovu poruku je menjao damiru_2 dana 16.12.2005. u 23:26 GMT+1]
[ Proko @ 16.12.2005. 23:04 ] @
Na šta se ovo poslednje odnosi? Ako si mislio da podigne Dialer.exe u XP-u, neće moći, jer on nema klasičan Dialer, već HiperTerminal, a tu treba više toga upisati.
Inače, i nije mi to rešenje, već da XP koristi Dialer iz C particije, gde je Win98. A to zbog toga da bi iz oba sistema mogao da koristim isti macro. Drugo rešenje su dva macroa, svaki za odgovarajući OS.
Ali važnije mi je prvo završiti postojeći macro, tako da posle 10 sekundi isključi Dialer. Treba posle 10 sekundi poslati naredbu SendKeys, e sad koja bi to bila naredba analogna Alt+F4 ? I to dva puta, pošto se pojavljuju dva prozora, jedan "Dialing" i jedan "PhoneDialer".
Ja sam uradio da mi se telefon (spikerfon) uključuje automatski 5 sekundi od početka zvanja, i u slučaju zauzeća da se sam isključi, ali to je elektronika, a ovo je programiranje...
Imam i poslednu varijantu, a to je da izvedem sa tastature komande Alt+F4, koje bi opet neka automatika dva puta aktivirala. Šta ćeš, to znam da uradim, ali bi ovo ipak bilo elegantnije...
[ damiru_2 @ 17.12.2005. 19:24 ] @
Citat: ... Treba posle 10 sekundi poslati naredbu SendKeys, e sad koja bi to bila naredba analogna Alt+F4 ?...
'Naredba za zatvaranje aktivnog prozora
SendKeys "%{F4}"
'Naredba za dovođenje prozora u fokus
SendKeys "{F6}{TAB X}"
'Gde je: X = redni broj prozora koji treba dovesti u fokus (da bude aktivan). Brojevi počinju od 0 i pređani su isto onako kako se vide u prozoru korišćenjem Alt+Tab. Nadam se da sam bio bar malo jasan.
Ako ovo može da ti pomogne, pročitaj (attach). Preuzeto iz MSDN Library za Visual Studio 6. Podsećanje na "stare dane"...
Što se tiče funkcije Wait, evo jedne za makroe:
'Čeka 10 sekundi do sledećeg reda koda
WAIT(NOW()+"00:00:10")
Pozdrav.
[ Ero S Ovoga Sveta @ 18.12.2005. 01:03 ] @
E ovako. Ako ti ne predstavlja problem za nekih 20 € dobices program koji je bas ono sto
tebi treba. Prije pola godinne ja sam napravi takav program bas kakav ti trazis,
posto mi je grom pukao u telefon pa nije mogao da bira ali se moglo razgovarati kada se uspostavi
veza. Dakle modem poziva odredjeni broj, dignes slusalicu i nakon odredjenog vremena,
ja sam stavio 15 sekundi, modem prekine vezu i ti nastavljas razgovor telefonom.
Jedina razlika je u tome sto moj program koristi Access bazu podataka,
a ne Excel, ali to nebi bio problem jer se excel moze konvertovati u access ili
jednostavno mi posaljes taj tvoj imenik u excelu i ja ga ugradim u program ili ima jos
resenja.
Ako si zainteresovan reci mail na koji oces da ti posaljem demo programa, a dorade
cemo vrsiti u hodu.
[ Proko @ 19.12.2005. 10:00 ] @
Možda bi ga i kupio da si se javio na početku. Sada sam već tako blizu rešenja...Inače, već sam nekoliko puta objašnjavao zašto mora biti baš Excel, i nikakva konverzija, kopiranje ili nešto slično ne dolazi u obzir, jer to nije klasičan imenik, već spisak mušterija, koji se svaki čas dopunjava i menja. Ako ću da pravim poseban spisak telefonskih brojeva, onda mogu da zovem i direktno preko telefonskog aparata.
Pokušao sam da ubacim naredbe, po preporuci Damiru-2
Code: Option Explicit
Sub DialOut() '
Dim strDial As String
Dim intReturn As Long
strDial = ActiveCell.Value
intReturn = Shell("C:\Windows\Dialer.exe", 1)
'Pauza za ručnu komandu Alt+Tab kod XP-a
Application.Wait Now + TimeValue("00:00:02")
Application.SendKeys (strDial & "%d")
Application.Wait Now + TimeValue("00:00:10")
'Naredba za zatvaranje aktivnog prozora
Application.SendKeys "%{F4}"
End Sub
End Sub
I radi na Win98, isključi se posle 10 sekundi, ali Dialer neće da se skloni. Ponavljanjem poslednjeg reda u codu, skloni se i Dialer, ali hoće da se zatvori i Excel, dok sa ručnom komandom Alt+F4 se zatvara samo Dialer.
Naredba za dovođenje prozora u fokus
SendKeys "{F6}{TAB X}" ne radi. Postoji li komanda za dovođenje konkretnog programa (po imenu) u fokus, a takođe i njegovog zatvaranja, jer sam u međuvremenu otkrio da cod "%{TAB X} a ne {F6}{TAB X} predstavlja komandu Alt+Tab, ali ne radi svaki put!
A za upotrebu u WinXP bi trebalo da bude pre upisivanja telefonskog broja naredba za prelazak na aktivni prozor (koja mi ne radi). Kako bi to uticalo ako je taj prozor već aktivan (u slučaju Win98, gde ta naredba nije potrebna). Ili mora sasvim drugi macro?
Evo ovako: kada u WinXP-u uradim sledeće:
-pokrenem macro, ali ubacim pauzu pre upisivanja broja,
-zatim pritisnem Alt+Tab,
on zove telefonski broj, koji je upisan u ćeliju.
zatim (posle 10 sekundi):
-Alt+F4,
-Alt+F4,
isključi se Dialer, i to je to. Kako to prevesti u kod?
[Ovu poruku je menjao Proko dana 20.12.2005. u 00:05 GMT+1]
[ damiru_2 @ 19.12.2005. 23:15 ] @
Citat: Proko:... Naredba za dovođenje prozora u fokus SendKeys "{F6}{TAB X}" ne radi...
Možda si u brzini preleteo preko mog objašnjenja (citiram sebe):
Citat: Damir:... Gde je: X = redni broj prozora koji treba dovesti u fokus (da bude aktivan). Brojevi počinju od 0 i pređani su isto onako kako se vide u prozoru korišćenjem Alt+Tab...
Dakle, može biti:
SendKeys "{F6}{TAB 0}"
SendKeys "{F6}{TAB 1}"
SendKeys "{F6}{TAB 2}"
SendKeys "{F6}{TAB 3}"
...
Citat: Proko:... Kako bi to uticalo ako je taj prozor već aktivan (u slučaju Win98, gde ta naredba nije potrebna)...
Ne utiče nikako, prozor koji je već u fokusu i dalje ostaje u fokusu ako je izabran. Probaj: Alt+Tab (pojavljuje se prozorčić sa ikonama aktivnih prozora), pa klikni na ikonu programa koji je već u fokusu. Prozorčić nestaje, a aktivni prozor i dalje ostaje aktivan (u fokusu).
Priznajem, ne znači da uvek inma isti broj otvorenih prozora, pa je {TAB X} malo problematično. Postoji i naredba koja čita naslovni red prozora, pa na osnovu toga može da se zada koji prozor zatvoriti. Ali koja je...? Ne mogu da se setim, ali mislim da je... (vidi opet Attach).
Citat: Proko:... kada u WinXP-u pre pokretanja macroa uradim sledeće:
-Ctrl+C,
zatim pokrenem macro,
-Alt+Tab,
-Ctrl+V,
-Enter
on zove telefonski broj, koji je upisan u ćeliju.
zatim (posle 10 sekundi):
-Alt+F4,
-Alt+F4,
isključi se Dialer, i to je to. Kako to prevesti u kod?
Možda ovako:
Code:
Sub DialOut_Click()
Dim strDial As String
Dim intReturn As Long
'// Kopiranje (Copy)
Application.SendKeys {"^c"} '/// Ctrl+Insert ili Ctrl+C, svejedno je
strDial = ActiveCell.Value
'// Putanja je vec "overena" :)
intReturn = Shell("C:\Windows\dialer.exe", 1)
'// Umetanje (Paste)
Application.SendKeys {"^v"} '/// Shift+Insert ili Ctrl+V, svejedno je
'// Biranje broja
Application.SendKeys (strDial & "%d")
'//Cekanje isteka vremena
Application.Wait Now + TimeValue("00:00:07")
'//Naredba za zatvaranje aktivnog prozora
Application.SendKeys "%{F4}"
'//Application.SendKeys {"%fx"}
'//Alt+F4, ili File/Exit bi trebalo da bude isto.
'// Ovo gore bi moralo da radi kako treba, jer prethodno aktivan prozor
'// ponovo dolazi u fokus, a to je Excel. Znaci ponovnom naredbom
'// Alt+F4 zatvara se Excel.
Application.SendKeys "%{F4}"
End Sub
Deluje konfuzno, ali šta ću... I to je deo programiranja.
Čudno da se niko ne javlja da besplatno  pomogne povodom ovog, a sumnjam da baš niko ne zna. Nema ni veze..., Ako se ja stvarno zainatim ima da se vratim VB-u, pa kud puklo da puklo...
[ Proko @ 20.12.2005. 11:07 ] @
Vidi ovako:
intReturn = Shell("C:\Windows\dialer.exe", 1)
podiže PhoneDialer, prvi je na ekranu, ali nije aktivan! Alt+Tab ga aktivira, ali ne i komanda u makrou, bez obzira koji index x upisivao. Ne prihvata ni:
AppActivate ("C:\Windows\dialer.exe", 1)
što bi trebalo da bude direktna komanda.
Isti problem je i pri zatvaranju, sa Alt i F4 se zatvori Dialer, a macro zatvara Excel, iako je prozor Dialera ispred.
Kod Win98 prvog problema nema, samo ostaje ovaj drugi.
Postoji li razlika u komandama za Office, pošto mi je jedan 2K, a drugi XP?
[ damiru_2 @ 20.12.2005. 20:38 ] @
Nažalost ja nemam Windows XP, već 2000.
Tačnije, dual (ili triple?) boot. Imam Windows 2000 i Windows 98 iz kojeg mogu da odem i u DOS 6.22 i Windows 3.11 po želji. 
Ne dam ja Windows 2000 za hiljadu XP-a!
Jedino što mogu da ponudim je testiranje konkretnog primera. Okači nekoliko redova imenika u Excelu (imena i brojevi telefona proizvoljno, ne treba da budu pravi) i makro kod, pa ću se malo poigrati. Nekada je put trnovit i dug, ali uvek postoji svetlo na kraju tunela...
Eh, da... ne bi trebalo da postoje razlike za izvršavanje makroa u Office programima, tj. trebalo bi da su "vertikalno kompatibilni".
[Ovu poruku je menjao damiru_2 dana 20.12.2005. u 21:43 GMT+1]
[ Proko @ 20.12.2005. 21:13 ] @
Telefonski brojevi su obični, napiši bilo koji broj u ćeliju i ostavi da bude ćelija aktivna. Hajde da rešimo problem sa Win98; ako nema dva puta zatvaranje, ostaje prozor Dialera, a ako je dva puta, zatvori se i Dialer i Excel!
U međuvremenu sam rešio problem sa XP-om; trebalo je dva puta pozvati Dialer. Tamo se sve lepo zatvori, samo na 98-mici ostaje pomenuti problem. E, sad, bilo bi lepo kada bi isti macro mogao da bude u oba sistema. Za sada "konačna" verzija je:
Code: Option Explicit
Sub DialOut() '
Dim strDial As String
Dim intReturn As Long
intReturn = Shell("C:\Windows\Dialer.exe", 1)
strDial = ActiveCell.Value
intReturn = Shell("C:\Windows\Dialer.exe", 1)
Application.SendKeys (strDial & "%d")
Application.Wait Now + TimeValue("00:00:10")
Application.SendKeys "%{F4}"
Application.SendKeys "%{F4}"
End Sub
[Ovu poruku je menjao Proko dana 20.12.2005. u 23:58 GMT+1]
[ damiru_2 @ 24.12.2005. 22:37 ] @
Uh...
Proko, bojim se da ti ne mogu pomoći u vezi ovog problema.
Naime, problem leži u samom pristupu VBA kodu od strane Excel-a.
Ovo je jedan od primera koji su bili skoro uspešni:
Code:
Option Explicit
Sub DialOut()
Dim strDial As String
Dim intReturn As Long
Dim X As Integer
'Promenljiva dobija vrednost izabrane celije u Excel-u
strDial = ActiveCell.Value
'Pozivanje Dialer-a i biranje telefonskog broja
intReturn = Shell("C:\Windows\dialer.exe", 1)
'Pauza do sledeceg reda koda
Application.Wait Now + TimeValue("00:00:10")
'Dovodjenje Dialer-a u fokus, da bude aktivan prozor
'kako bismo ga mogli zatvoriti
If Application.Activate <> "Phone Dialer" Then
'Dialer nije u fokusu, izvrsava se petlja
'dok je Dialer "u pozadini"
While ActiveWindow <> "Phone Dialer"
For X = 0 To 100
'Prelazak na sledeci otvoren prozor
Application.SendKeys "%{TAB " & X & "}"
Next
Wend
Else
'Dialer je u fokusu, izvrsava se naredba za njegovo zatvaranje
Application.SendKeys "%{F4}"
End If
End Sub
'EOF VBA code
Međutim, najveći problem je što se naredba "Application" odnosi isključivo na Excel i nikakav spoljni program ne dolazi u obzir.
Ovo možeš proveriti u VBA editoru tako što ćeš pokrenuti Debug Mode (taster F8 u VBA prozoru) i gledati kako se izvršava svaki red koda. U jednom trenutku će Phone Dialer biti aktivan, tj. pojaviće se na ekranu...
Code:
For X = 0 To 100
'Prelazak na sledeci otvoren prozor
Application.SendKeys "%{TAB " & X & "}"
Next
... ali funkcija While neće to registrovati, jer se ne radi o Excel-u, pa će nastaviti dalje - ali samo do 100. Ne znam način da izbrojim koliko ima otvorenih prozora, a nisam hteo da lupam velike cifre da se ne bi makro izvršavao u beskonačnost.
Code:
While ActiveWindow <> "Phone Dialer"
Dakle Excel se zatvori zato što je makro pokrenut iz njega, a Phone Dialer je samo pomoćni program za Excel, pa se zatvara zajedno s njim.
U Visual Basic-u ceo kod uopšte ne funkcioniše, pa bi trebalo pisati desetak ili više redova iz početka.
Vidim da postoji i slično rešenje što se tiče VB-a, ali mislim da to nije zadovoljavajuće (opet u attach).
[Ovu poruku je menjao damiru_2 dana 24.12.2005. u 23:40 GMT+1]
[ damiru_2 @ 24.12.2005. 23:36 ] @
Poslednje "hvatanje za slamku"...
Code:
Option Explicit
Sub DialOut()
Dim CellContents As String
Dim AppName As String
Dim AppFile As String
Dim TaskID As Variant
CellContents = ActiveCell.Value
If CellContents = "" Then
MsgBox "Selektuj ćeliju koja sadrži telefonski broj", vbInformation
Exit Sub
End If
AppName = "Dialer"
AppFile = "C:\Windows\dialer.exe"
On Error Resume Next
AppActivate (AppName)
If Err.Number <> 0 Then
Err = 0
TaskID = Shell(AppFile, vbNormalFocus)
If Err <> 0 Then
MsgBox "Can't start " & AppFile, vbExclamation
Exit Sub
End If
End If
Application.SendKeys "%n" & CellContents, True
Application.SendKeys "%d"
Application.Wait Now + TimeValue("00:00:10")
Application.SendKeys "%{F4}"
End Sub
Ovo radi, ali kod mene uopšte neće da bira brojeve. Doduše, tip ćelije je "Opšti format", pa je možda i to razlog (mada ne verujem). Uglavnom, nadam se da je to to. 
[ Proko @ 26.12.2005. 10:08 ] @
Žao mi je što nisi pažljivo pogledao moj poslednji post, ili ga nisi ponovo pogledao, jer sam ga menjao, pošto sam problem upisivanja broja rešio (dvostrukim pozivanjem Dialera). Ostao je problem što se pod Win98 na kraju zatvara i Excel, a pod XP-om se lepo zatvori samo Dielar, ali posle toga scroll dugme postaje zum, a obeležene ćelije neće da se deaktiviraju. Zatvaranjem i ponovnim otvaranjem Excela, sve je u redu. Ovako je macro upotrebljiv, samo bi zatvaranje Dialera trebalo drugačije rešiti.
[Ovu poruku je menjao Proko dana 26.12.2005. u 13:23 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|