sebqo111 Posted October 28, 2013 Report Share Posted October 28, 2013 Cześć Jako iż marny ze mnie programista, to od dłuższego czasu głowię się jak można sprawdzić w języku c++, czy jakiś klawisz jest wciśnięty czy może został już puszczony. Chcę napisać coś w rodzaju keyboardu - program będzie działał mniej więcej tak - gdy wcisnę klawisz 'd' to odpali się funkcja Beep, za pomocą której pipcyk systemowy będzie grał dźwięk o określonej częstotliwości tak długo, aż klawisz zostanie puszczony. Ogólnie próbowałem na własną rękę stworzyć coś, co ma w sobie funkcje getch oraz kbhit, ale chyba trafiłem w ślepy zaułek. Byłbym wdzięczny za jakąkolwiek pomoc Nie mówię tutaj o tym, aby ktoś wysłał mi gotowy kod, tylko podpowiedział co i jak.Z góry dziękuję! Link to comment Share on other sites More sharing options...
[Ekspert] Hakken Posted October 28, 2013 Report Share Posted October 28, 2013 Program ma działać na windows, czy na innych systemach też? Link to comment Share on other sites More sharing options...
sebqo111 Posted October 28, 2013 Author Report Share Posted October 28, 2013 Tylko i wyłącznie Windows, zapomniałem także dodać, iż program pracuje w trybie konsolowym. Link to comment Share on other sites More sharing options...
[Ekspert] Mormegil Posted October 28, 2013 Report Share Posted October 28, 2013 Przeczytać to i to. Link to comment Share on other sites More sharing options...
sebqo111 Posted October 28, 2013 Author Report Share Posted October 28, 2013 Poddaję się... zielonego pojęcia nie mam jak użyć dwóch wymienionych przez Ciebie funkcji. Mógłbyś podać jakiś mały przykład? (uprzedzając pytanie - tak, przejrzałem praktycznie 762873 różnych stron, Google nie pomogło) Link to comment Share on other sites More sharing options...
[Ekspert] Mormegil Posted October 29, 2013 Report Share Posted October 29, 2013 Konsola ma kolejkę komunikatów wejściowych. Komunikaty te można pobierać za pomocą funkcji ReadConsoleInput do struktury INPUT_RECORD. Funkcja ta jest blokująca, czyli nie skończy się dopóki nie wczyta przynajmniej jednego komunikatu. Dlatego przed jej wywołaniem należy upewnić się czy jest jakikolwiek komunikat dostępny, służy do tego funkcja GetNumberOfConsoleInputEvents.while (1){ DWORD number_of_events; GetNumberOfConsoleInputEvents(console_handle, &number_of_events); if (0 != number_of_events) { INPUT_RECORD event; ReadConsoleInput(console_handle, &event, 1, &number_of_events); // do something about event }} Link to comment Share on other sites More sharing options...