WinApista löytyvä mciSendString on siksi monipuolinen komento, että sillä onnistuu lähes kaikki äänentoistoon liittyvät asiat. Yksi eksoottisimmista toiminnoista lienee CD-aseman luukun avaus, jolle löytyy luultavasti eniten käyttöä pilailuohjelmissa yms.
Homma hoituu yksinkertaisesti siten, että mciSendString-funktiolle lähetetään viesti "Set CDAudio Door Open" vakioasetuksilla. Mitään muuta ei tarvita, ja siitä syystä esimerkkikoodikin on todella lyhyt. Edes formia ei tarvita, joten sen voi poistaa ja tilalle laittaa moduulin.
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Sub Main() Dim X As Long X = mciSendString("Set CDAudio Door Open", "", 0, 0) End Sub
Toimii! :)
Ja kiinnihän tuon saa kun laittaa viestiksi "CDAudio Door Closed" Ihan kiva homma!
Ihan kiva :)
Vois kertoa sitten vielä mitä äänentoistoon liittyviä asiota sillä voi tehdä.
Compile error:
Constants, fixed-length strings, arrays, and Declare statements not allowed as Public members of object modules.
Noin sanoo, jos pistää formiin. Jos pistää moduuliin, ei tapahdu mitään. Joko en osaa jotain juttua, tai sitten tuo vaatii VB kutosen.
Formiin esim näin:
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Sub Form_Load() Dim X As Long X = mciSendString("Set CDAudio Door Open", "", 0, 0) End Sub
Ei toi kyl formissa toimi tollee?
No tuo Tihan koodi ei sentään valita virheestä, mutta ei kyllä tapahdukaan mitään.
Edit: Kokeilin pistää moduuliinkin tuon funktion määrittelyn, muttei siltikään toimi. Näin äkkiseltään keksin kaksi mahdollista syytä: VB5, tai WinXP.
Edit: Nyt on VB6, muttei siltikään toimi. :(
Entä kuinka avataan tietty asema jos niitä on useampi? Monissa koneissahan on esimerkiksi kirjoittava- ja lukeva CD-asema.
Nocando: kaverilla ainaki sekos kone vähä ku oli 2 asemaa 8)
Näin jos on monta asemaa:
mciSendString("Set CDAudio!ASEMANKIRJAIN Door Open", "", 0, 0) 'eli esim. mciSendString("Set CDAudio!E Door Open", "", 0, 0)
Tää Toimii tosi hyvin itse asiassa tarvitsinkin juuri tätä koodia uuteen ohjelmaani.
Ku sulla on formi auki ni kaksoisklikkaat sitä siihen aukee se mihin voit kirjottaa koodis pyyhi kaikki muu pois paitsi "Public Class Form1" ja "End Class" tekstit.
"Ohjeita tyhmälle tyhmemmältä :)"
Mulla toi ei toimi :( . Tulee ilmoitus:
Complite error:
Constats, fixed-lenght strings, arrays, user-defined types and Declare statments not allowed as Public memers of object modules
Jos laittaa:
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Sub Main() Dim X As Long do X = mciSendString("Set CDAudio Door Open", "", 0, 0) x = mciSendString("Set CDAudio Door Closed", "", 0, 0) loop End Sub
Niin varmana on kivaa! ;)
Minulla pelkästään aukeaa. "Set CDAudio Door Closed" ei wörki.
laittakaa toi loppu tällee tonne subii:
For b = 1 To 50
Dim X As Long
X = mciSendString("Set CDAudio Door Open", "", 0, 0)
X = mciSendString("Set CDAudio Door Closed", "", 0, 0)
Next b
NIIN ON VARMANA TODELLA KIVAA :D
Onnistuuko sama mitenkään qbasicilla?
ei minun tietääkseni...
Sagetheboss, ei kannata ees kokeilla. Pitäis käyttää vintouvsin funktioita, missä on kvikpasikilla aivan törkeä homma (jos nyt ees onnas). Suosittelen että unohdat.
Kokeilimpa kuitenkin. Ei onnistunut ja työmäärä on kyllä hirveä.
Yksinkertainen ohjelma mutta varma viihdykki
Aika kova. Kyllä naamat venähtää kun luukku hilaa edes takas auki. Tekee vaan tosta loputtoman silmukan tosta avaamisesta :DDDD
Missä muodossa ko. systeemi pitää tallentaa? .exe ei ainakaan toiminut.
Ei .NET:issä toimi Declare Function:it.
HÖ!!!
TOIMII!!!!!!!!!!
Aihe on jo aika vanha, joten et voi enää vastata siihen.