Beeper C++-al
2021-08-12T11:36:49+02:00
2021-08-14T18:05:57+02:00
2022-07-20T09:11:53+02:00
  • Nagyon köszönöm, már építem is befele...
    Mutasd a teljes hozzászólást!
  • Nagyon rég nem nyúltam semmilyen Pascal variánshoz, de gyors Google alapján a ParamCount és ParamStr függvények kellenek neked. Az első megadja hogy hány parancssori paramétert kaptál, a második sorszám alapján visszad egyet.

    A szokásos konvencióknak megfelelően a ParamStr(0) azt adja vissza, milyen módon hívták meg a programodat, tehát ezt neked nem kell majd figyelembe venni, csak az 1-es és fentebbi indexeket.
    Mutasd a teljes hozzászólást!
  • Hálásan köszönöm mindenki igyekezetét!

    Annyi hír van, hogy sikerült a Lazarust munkára bírni (a 'Ctr' unitban elérhető a 'Sound(frekvencia)', a 'Delay(időtartam)', és a 'Nosound' parancsokkal, illetve ezek kombinációival.) A megjelenni kívánkozó Form kirajzolását pedig egyszerűen hatástalanítottam, mert nekem csak a csipogás kell. Így nem jön fel a fekete parancssori ablak... Most már tudok bármilyen csipogó exe-t gyártani 32, bitest, hogy mindenütt fusson...

    Most már csak 1 gondocska maradt: Szeretném, hogy a kis csipogó exe-t egy (vagy több) indítási paraméterrel szabályozni is lehessen, hogy sokféle csipogás-beepelés közül lehessen választani, a futó szkriptben történő eseményektől függően...

    A Lasarusban van lehetőség arra, hogy -amennyiben paraméterrel indítom az exe fájlt-, akkor azt a paramétert lekérdezhessem a programon belül? (Ugyanarról a paraméter-lekérdezésről van szó, mint pl. a VB szkriptben a 'WScript.Arguments(0)', vagy a Visual Basicban a 'Command' kifejezés.)
    Mutasd a teljes hozzászólást!
  • Sima winapis Beep hívás egyáltalán nem biztos, hogy működni fog. OS és gép függő kb.

    Természetesen meglehet oldani más API-n keresztül is, hogy adott frekvenciát adott ideig játszon le, de az már hosszabb lenne (nem sokkal).

    /*! * @author **G** * @details * Simple background beeper. * Usage: beep <freqency> <duration_ms> * @return * 0 on success * -1 invalid number of parameters were provided * -2 parameter parse error * -3 Beep function call failure */ #include <utilapiset.h> #include <string> using namespace std; int main(int argc, char** args) { try { if (argc != 3) { return -1; } if (!Beep( stoul( args[1]), stoul( args[2]) )) { return -3; } } catch (...) { return -2; } }
    Nálam laptopon Windows10-el pl nem szól... Sokkal egyszerűbb lenne szerintem az alap windows hangok lejátszása. Nem repülőgép ez, hogy hangjelzések alapján hozz döntést..
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Egy megoldás lazarus-al. Nem próbáltam ki. 
    Lazarus Pascal beep command
    Mutasd a teljes hozzászólást!
  • Köszönöm, igen, csak a felugró ablakkal van gondom. Le lehet tiltani ezt valahogy?
    Mutasd a teljes hozzászólást!
  • Amit bemásoltál beep.exe jó lenne, csak a felugró ablakkal van gondod?
    (nem néztem, hogy van-e felugró ablak..)
    Mutasd a teljes hozzászólást!
  • > Esetleg Lazarussal megoldható (hasonlóan a Turbo Pascalhoz), merthogy az is Pascal-lal megy (tudomásom szerint)...?
    > Igen, megoldható.

    Meg tudná valaki mondani, milyen paranccsal tudom a hangszórót szólaltani Lazarussal?
    Vagy meg kell hívni valamilyen DLL-t...?
    Mutasd a teljes hozzászólást!
  • > Eltudnád mondani, hogy mi lenne a cél, mihez kell? Úgy sokkal könnyebb lenne érdemben segíteni.

    Nos, különféle vbs szkriptekhez kellene, pl. egy olyanhoz, amivel gyorsan le tudom radírozni a régi Windows -az összes partíciókon ragadt- (pl. 'System Volume Information') könyvtárait mielőtt belekezdek az újra-installálásba. (A sikeres-, vagy a sikertelen eltávolításokat szeretném hangjelzésekkel is elkülönítve érzékelni.) A Hiren's Boot CD nevű -pendrájvról- bootolható XP-vel lehet elkezdeni ezt a Windows-újrainstall előkészítést.... Viszont -ilyen kerülő-úton bootolva- aligha számíthatok a gépben lévő hangkártyára...

    Nekem végül is mindegy, milyen módszerrel lövöm be a szükséges frekit és időtartamot, lényeg, hogy ne ugráljon fel a parancssori ablak akkor se, ha szkriptből hívok egy olyan hang-generáló exe-t, ami pl. parancssorból (vagy másképp) kapja meg a működéséhez szükséges információkat.

    Csatoltam egy Beep.zip-et, ha valaki esetleg vetne rá egy pillantást. (Parancssori indítási paraméterek és kapcsolók a csatolt txt-ben vannak... ) Ez többet is tud, nekem elég egy olyan megoldás, ahol (valahogy) megadom a frekit és az időtartamot, aztán, hogy milyen dallamot milyen eseménynél csiripeljen, azt a scriptekben már könnyű elvégezni...

    Nagyon köszönöm az eddigi válaszaitokat!
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Valemelyikunk nem tudja, hogy a rundll es a  user32 hogyan mukodik.

    Csodálatos. Én már linkeltem egy cikket, ami leírja hogyan működik és miért nem jó ötlet random függvényeket hívogatni vele.

    Leírnád, hogy szerinted hogyan működik? Vagy bármi konkrétumot? Mert amit most csinálsz az nem túl produktív.
    Mutasd a teljes hozzászólást!
  • Ezt az egészet amit irsz.

    Valemelyikunk nem tudja, hogy a rundll es a  user32 hogyan mukodik.
    Mutasd a teljes hozzászólást!
  • Nagyon jó lenne, ha futtatáskor paraméterekkel tudnám szabályozni a frekit, és az időtartamot.Ebből már gyerekjáték lesz olyan szkriptet csinálni, amelyik sokféle csiripelést tud generálni, az üzeneteknek megfelelőt..

    Amennyiben ilyesmit szeretnél, akkor valószínűleg egyetlen exe helyett, mely a parancssori paraméterket nézi, a helyett inkább olyan programot használnál, ami standard input-ról olvasott frekvencia és időtartalmakkal dolgozna, vagy akár külső fájlból olvasná..

    Eltudnád mondani, hogy mi lenne a cél, mihez kell? Úgy sokkal könnyebb lenne érdemben segíteni.

    (maga egy paraméterezhető beep, vagy akár ami fájból dolgozik kb 3 sor leprogramozni..)
    Mutasd a teljes hozzászólást!
  • MessageBeep function (winuser.h)
    Egyetlen input paramétere van, ami ha invalid érték, akkor a windows default beep-et adja.
    Nem igazán látok kockázatot ennek a használatára, max néha nem azt a hangjelzést adja, mint amire számítunk..

    Nem profi megoldás, de elég egyszerű és megfelelő lehet a kérdezőnek. (későbbi hozzászólásokból kiderült, hogy nem az)
    Mutasd a teljes hozzászólást!
  • Azért gondoltam C++-ben, mert -első közelítésben ehhez találtam (némi) anyagot az Interneten.
    Sajnos mindkét gépemen némák maradnak a ruddll32-vel való megoldások, többfélét is kipróbáltam. A Beep-nek Windows-verziótól függetlennek kell lennie...
    Nagyon jó lenne, ha futtatáskor paraméterekkel tudnám szabályozni a frekit, és az időtartamot. Ebből már gyerekjáték lesz olyan szkriptet csinálni, amelyik sokféle csiripelést tud generálni, az üzeneteknek megfelelőt..

    A régi DOS-os Turbo Pascal-ban futtattam a Sound-, meg a Delay parancsokat, meg a NoSound parancsokat, tudta, amit kellett..

    > Parancssorból is lehet ilyet (windows specifikus természetesen)
    > rundll32 user32,MessageBeep
    >Ezt lementheted egy '.cmd'-be is akár..

    Ja igen! Ha le tudnám tiltani a parancssori ablak felugrását, amíg fut az exe (Vagy bármi egyéb működő parancs), akkor már elégedett is lennék...

    Most a Lazarus-t böngészem, remélem, kihozok belőle valamit, mielőtt megöregszem...
    Mutasd a teljes hozzászólást!
  • 1. A rundll32 feltételezi, hogy a hívott függvénynek egy fix szignatúrája van.
    2. A MessageBeep függvénynek nem olyan a szignatúrája mint amit a rundll32 feltételez.
    3. Amikor a rundll32 lepakolja a veremre azt, ami az ő általa gondolt szignatúra szerint oda kell, a MessageBeep meg úgy olvassa fel, mintha az ő általa gondolt szignatúra szerint lenne, nem definiált működés jelentkezik.

    Melyik részét nem érted?
    Mutasd a teljes hozzászólást!
  • Ezt nem igazan értem.
    Mutasd a teljes hozzászólást!
  • A rundll32-t ilyesmire használni nem túl jó ötlet. Egyrészt nem garantált, hogy nem omlik össze, vagy nem fog összeomlani egy későbbi Windows verzióban. Ha mégse omlik össze, akkor is zagyvaságot fog küldeni a frekvencia és a hossz paraméterekbe, úgyhogy nem sok értelme lesz.
    Mutasd a teljes hozzászólást!
  • Miért pont C++-ban szeretnéd?
    Parancssorból is lehet ilyet (windows specifikus természetesen)

    rundll32 user32,MessageBeep
    Ezt lementheted egy '.cmd'-be is akár..
    Mutasd a teljes hozzászólást!
  • Hali!

    Azonban nekem nincs sem C++ fejlesztői környezetem, sem pedig C++ tudásom. […] Kérjek meg valakit, hogy rakja össze nekem?

    Ha semmilyen C++ fejlesztői környezeted és tudásod nincs, akkor értelemszerű, hogy te nem fogod tudni megoldani C++ segítségével (ha mindenképpen ezzel szeretnéd). Szóval igen, kérj meg valaki, hogy rakja össze neked (persze, elképzelhető, hogy az a valaki ellenszolgáltatást fog érte kérni – ebben az esetben pedig már állás-rovatba tartozik a topik).

    Esetleg Lazarussal megoldható (hasonlóan a Turbo Pascalhoz), merthogy az is Pascal-lal megy (tudomásom szerint)...?

    Igen, megoldható.

    Mutasd a teljes hozzászólást!
  • Szeretnék egy beep (hangjelzés belső hangszórón) exet-készíteni.
    C++-ban találtam egy eljárás-ötletet:
    BOOL Beep(
      DWORD dwFreq,
      DWORD dwDuration
    );
    Nem tűnik bonyolultnak, sőt részletesebben is le vagyon írva:
    Beep function (utilapiset.h) - Win32 apps

    Azonban nekem nincs sem C++ fejlesztői környezetem, sem pedig C++ tudásom.
    Hogyan lehetne ezt a kis exe-t megoldani?
    - Kérjek meg valakit, hogy rakja össze nekem?

    Régi (DOS-os Turbo Pascal-lal) tudtam ilyet csinálni (a Sound, és a Delay parancsokkal), sőt találtam is az interneten Beep.exe-ket, de ezek mind parancssorból futnak, és szeretném elkerülni a parancssori ablak felugrálásait...

    - Esetleg Lazarussal megoldható (hasonlóan a Turbo Pascalhoz), merthogy az is Pascal-lal megy (tudomásom szerint)...? (Azt letöltöttem...)

    Köszönettel 

    Gyuri

    (Kérlek, moderátor-urak, ne legyetek (nagyon) mérgesek, ha valamit nem jól csináltam, először próbálkozom itt, segítség-kéréssel...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd