Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire casa fara gaz/lemne

Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...
 probleme cu ochelarii

Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National
 Sub mobila de bucatarie si sub fr...

Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...
 Lucruri inaintea vremurilor lor

Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...
 

Visual Basic + Winamp

- - - - -
  • Please log in to reply
28 replies to this topic

#1
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Imi trebuie la programul pentru lucrarea de diploma o chestie de genul urmator :
- am 2 controale : Run Winamp si Play.
Vrea ca la apasarea butonului Run Winamp sa porneasca winampul - asta am reusit s-o fac cu functia "shell" : var = shell("C:Program FilesWinampwinamp.exe",1).In MSDN scrie ca dupa apelarea functiei shell aceasta intoarce TaskID-ul ferestrei deschise
La apasarea butonului de Play vrea sa dau focus pe Winamp si sa-i trimit shorcut-ul "x" cu ajutorul functiei SendKeys, numai ca nu merge focus-ul, adica AppActivate nu functioneaza corect.
Aveti idee de ce nu merge?
MAi jos introduc codul programului poate va dati seama care este problema.

Dim TaskID

Private Sub cmdRunWinamp_Click()
TaskID = Shell("C:Program FilesWinampwinamp.exe", 1)
End Sub

Private Sub cmdPlay_Click()
AppActivate (TaskID)
SendKeys "x"
End Sub

Mercimesc frumos  :OK:

#2
ezekio

ezekio

    Active Member

  • Grup: Banned
  • Posts: 1,679
  • Înscris: 07.01.2002
Mie de exemplu imi merge urmatoarea linie de cod :
AppActivate "Winamp 5.03a"

Unde Winamp 5.03a este numele ferestrei din task_manager
Rulat pe win98se

#3
ezekio

ezekio

    Active Member

  • Grup: Banned
  • Posts: 1,679
  • Înscris: 07.01.2002
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long



Private Sub Command1_Click()

ShellExecute hwnd, "open", "C:Program FilesWinampwinamp.exe", vbNullString, "", 1

End Sub



Private Sub Command2_Click()

AppActivate "Winamp 5.03a"

SendKeys "s"

End Sub

Alta varianta mai eleganta ... care merge pe toate os/urile...

#4
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Faza e ca merge asa cu "Winamp 5.03" dar merge decat sa dau play. In modentul in care o melodie ruleaza, fereasta isi schimba nulele, deci nu mai corespunde cu "Winamp 5.03". Tocmai de asta m-am chinuit sa folosesc TaskID-ul ala.  :confused:

#5
ezekio

ezekio

    Active Member

  • Grup: Banned
  • Posts: 1,679
  • Înscris: 07.01.2002
Uite c-am gasit un 'workaround'
Dim xxx As Double



Public Sub cmdLoad_Click()

Winamp_Load

End Sub



Sub Winamp_Load()

xxx = Shell("C:program fileswinampwinamp.exe", vbNormalFocus)

End Sub



Sub Act()

AppActivate xxx

SendKeys "x"

End Sub



Private Sub cmdPlay_Click()

Act

End Sub

E practic acelasi cod doar ca am pus codul principal in proceduri vizibile in tot programul... Daca modifici intr-o procedura declarata cu private o variabila, acea variabila_modificata nu e vazuta de restul programului....presupun ;)

#6
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Man esti un dulce  :OK: mii de multumiri.

#7
ezekio

ezekio

    Active Member

  • Grup: Banned
  • Posts: 1,679
  • Înscris: 07.01.2002
Cu placere.

#8
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Am urmat sfaturile tale si am ajuns la urmatorul cod :

Dim xxx As Double

Public Sub cmdLoad_Click()
Winamp_Load
End Sub

Sub Winamp_Load()
xxx = Shell("C:program fileswinampwinamp.exe", vbNormalFocus)
End Sub

Sub Act()
AppActivate xxx
End Sub

Private Sub cmdPlay_Click()
Act
SendKeys "x"
End Sub

Private Sub cmdPrevious_Click()
Act
SendKeys "z"
End Sub

Private Sub cmdStop_Click()
Act
SendKeys "v"
End Sub

Private Sub cmdPause_Click()
Act
SendKeys "c"
End Sub
Private Sub cmdNext_Click()
Act
SendKeys "b"
End Sub

Private Sub cmdUnload_Click()
Unload Me
End Sub

Si se pare ca aceeasi problema....Invalide procedure call or argument.
Nu stiu ce dreaq sa-i mai fac ca m-am saturat de eroarea asta

#9
hErr

hErr

    Member

  • Grup: Members
  • Posts: 738
  • Înscris: 16.12.2003
Cum stai cu API?
Calea cea curata: folosesti EnumWindows si gasesti hwnd-ul ferestrei principale dupa care folosesti PostMessage care-i trimite ferestrei ce mesaje vrei tu, fara sa mai fii nevoit sa o activezi.

#10
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Habar nu am sa folosesc Windows Api....am citit ceva de pe net dar nu am inteles mare lucru :((

#11
hErr

hErr

    Member

  • Grup: Members
  • Posts: 738
  • Înscris: 16.12.2003
hm... banuiam eu.
Visual Basic e foarte simplu si usor de folosit, insa cum incerci sa programezi chestii mai serioase, cum iti pune piedica.
eu zic sa incerci alta solutie. cauta pe la nullsoft sa vezi daca nu cumva winampul se poate comanda prin parametrii.

#12
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Man e chiar atat de greu de folosit API-ul Windowsului? Ca daca sigur asta imi rezolva problema ma apuc sa invat api-uri ca doar nu oi fi ultimul tantalau...trebuie sa inteleg cum functioneaza....sper

#13
hErr

hErr

    Member

  • Grup: Members
  • Posts: 738
  • Înscris: 16.12.2003
de rezolvat ti-o rezolva sigur. pt invatat api iti trebuie initial cunostinte vaste de C. pt a invata API iti trebuie minim 6 luni, iar ca biblie iti recomand cartea lui Charles Petzold.

insa pt problema ta poate se indura cineva sa te ajute. merge cu API si in VB. eu nu prea am timp.

#14
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Din pacate cunostintele mele de C se rezuma la cateva programe facute in timpul facultatii. Si cum 6 luni nu am timp...raman sa sper ca poate isi face mila de mine :( sau poate nu-mi mai trebuie programul ca mai am 2 examene pana la licenta si nu am chef de invatat :((

#15
hErr

hErr

    Member

  • Grup: Members
  • Posts: 738
  • Înscris: 16.12.2003
pai asta e pt licenta? sau pt tine personal.

daca nu sint prea indiscret ... ;)

#16
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Pentru licenta...am facut un dispozitiv care se conecteaza la portul serial si programul asta ar trebui sa faca receptia semnaalelor primite pe serial si sa faca ceva de genul programelului la care ma chinui eu....adica la codul de genul "  0x  " sa imi porneasca winamp-ul, la 0w sa faca play etc.
daca era pentru uz personal foloseam girder-ul si nu mai imi bateam atat capul.

#17
ezekio

ezekio

    Active Member

  • Grup: Banned
  • Posts: 1,679
  • Înscris: 07.01.2002
Pai nu merge din acelasi motiv pt care nu mergea si primul cod  :nu: . Uite m-am obosit si ti-am scris "mura-n gura" tot codul varianta revizuita si adaugita...
Option Explicit

Dim xxx As Double



Public Sub Winamp_Load()

xxx = Shell("C:program fileswinampwinamp.exe", vbNormalFocus)

End Sub



Public Sub Act(ByVal key As String)

AppActivate xxx

SendKeys key

Me.SetFocus

End Sub



Private Sub cmdLoad_Click()

Winamp_Load

End Sub



Private Sub cmdPlay_Click()

Act "x"

End Sub



Private Sub cmdPrevious_Click()

Act "z"

End Sub



Private Sub cmdStop_Click()

Act "v"

End Sub



Private Sub cmdPause_Click()

Act "c"

End Sub

Private Sub cmdNext_Click()

Act "b"

End Sub



Private Sub cmdUnload_Click()

Unload Me

End Sub

PS: Codul merge doar daca Winamp este in background ferestrei principale(a programului asta), daca winamp e prezent doar in systray iti da eroare...

Sper sa te ajute  :OK:

#18
cielo

cielo

    Senior Member

  • Grup: Senior Members
  • Posts: 3,523
  • Înscris: 09.02.2004
Mii de multumiri.
Mai am insa cateva nelamuriri : tie ti-a mers programul cum trebuie? In sensul ca la mine merge decat un load si un play dupa care nu mai sunt transmise caracterele spre Winamp.
Daca la tine a mers zi-mi te rog ca OS, Visual Studio, Winamp ai ca poate asta este cauza problemei.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate