Royi Namir
Royi Namir

Reputation: 148524

Console beep character code - wrong number?

ASCII character code 0x07 is a beep character.

Opening CMD and clicking ALT + 007 yields :

enter image description here

And when I click ENTER - I hear a beep. This is fine.

I've searched how to add a beep in the end of a batch file, and I found that this is the solution : (I'm pasting it as an image becuase SO doesn't show the round bullet after editing) :

enter image description here

This does work and does make a sound. When examined with a HEX viewer (with beyond compare) on ECHO, the round bullet is:

enter image description here

But if I manually add ALT+7 to the document , I see this:

enter image description here

Which is a 95 as a hex - and it's not a Beep. In addition, I went to the working batch file and added a new line with my ALT+7 :

enter image description here

But looking via HEX viewer :

enter image description here

Question:

I'm a bit confused. Clicking Alt+65 does yields A everywhere.

So why does the beep different and doesn't work when saved in Windows GUI?

In the console, if I click ALT+007 I get ^G (it does beep), but when I click ALT+7 I get the circle, which is not a beep:

Here are both:

enter image description here

Another interesting observation via notepad++ :

enter image description here

I think it's related to encoding, etc, but I don't understand the inconsistency.

Upvotes: 5

Views: 3186

Answers (3)

efdummy
efdummy

Reputation: 704

To beep in a cmd file :

Solution 1

C:\>rundll32 user32.dll,MessageBeep -1

Solution 2

C:\>echo ^G>beep.txt
C:\>type beep.txt

NB : ^G is obtained by pressing Ctrl+G and you can see the character by editing beep.txt

Upvotes: 0

rojo
rojo

Reputation: 24466

I have a workaround to suggest. Put this in your script:

forfiles /p "%~dp0" /m "%~nx0" /c "cmd /c echo 0x07"

For every file in your script's directory matching your script's filename (e.g. 1 time), it will echo ASCII character 7, and will make noise. From the forfiles /? documentation:

To include special characters in the command line, use the hexadecimal code for the character in 0xHH format (ex. 0x09 for tab). Internal CMD.exe commands should be preceded with "cmd /c".

forfiles is a handy utility to abuse whenever you need a non-printable or extended character.


As for my speculation for why Alt+007 doesn't behave as expected, I believe the console works on a different codepage from windowed applications (console = 437, windowed = 1252 for en-US, IIRC). I've struggled with this issue as well for reasons, ultimately resorting to hard coding the symbols used for console characters 1 through 31 in that JavaScript project.

Upvotes: 1

Mike Nakis
Mike Nakis

Reputation: 61993

This is not really an answer, but it would be too large for a comment.

The "manually adding ALT+7 to the document" part produced strange results which it should not have produced. The result should have been a single 0x07 character. It may be that your editor did something funny when you pressed ALT+7.

The problem with this kind of troubleshooting is that the tools you are working with have complex behavior that distorts the experiment. The tools also have strange modes and strange states. For example, what is the encoding of your console subsystem?

I tried this: copy con x.bat typed echo followed by Alt+7 and then Ctrl+Z and got a beeping batch file. The character looked like a bullet.
Then I tried with Alt+007 and I also got a beeping batch file, but the character was ^G now.

At the C:\> prompt, I typed echo followed by Alt+7, a bullet was also produced, but there was no beep. But an Alt+007, looking like a ^G did produce a beep. Go figure.

I would say ignore the inconsistencies that occur when you are trying to input a control character, because there is a lot of software involved in doing so which is beyond your control and apparently works in mysterious ways. (I know, not an answer.)

Upvotes: 1

Related Questions