在DOS下用C ++发送密钥? [英] Send Keys in C++ for DOS?

查看:83
本文介绍了在DOS下用C ++发送密钥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨.

有没有一种发送键/模拟使用Broland C ++按下键的方法? (非视觉);我知道可以在C#中完成,但是我才刚开始学习它.

我对与DOS C ++相关的答案感兴趣
Ty.

Hi.

Is there a way to send keys / simulate a key being pressed using Broland C++? (not visual); I know it can be done in C# but I just started learning that one.

Im interested in an answer related to DOS C++
Ty.

推荐答案

BIOS具有默认的键盘缓冲区存储区,最多可容纳16次击键.
该区域从0040:001Eh开始,长度为32个字节. (16个2字节扫描码)
0040:001Ah处的字(2个字节)保存BIOS键盘缓冲区的当前头.
0040:001Ch处的字(2个字节)保存BIOS键盘缓冲区的当前尾部.
如果这两个指针不同,则有一个可供提取的击键.

////////////////////////////////////////////////////////////////
DOS环境中的func插入键,其中sizeof(short)== 2;

short * ptrHead =(短距离*)0x0040001A;
short * ptrTail =(短距离*)0x0040001C;
简短的* ptrNewHead;

ptrNewHead = ptrHead;
ptrNewHead + = sizeof(short);
ptrNewHead& = 0xFFFFFFE0; //不是31

if(ptrNewHead!= ptrTail){//如果有空间
* ptrHead =(短)扫描码; //任何键..
ptrHead = ptrNewHead
}
//////////////////////////////////////////////////////////////////
一些扫描码

-A--B--C--D--E--F--G--H--I--J-
1E61h 3062h 2E63h 2064h 1265h 2166h 2267h 2368h 1769h 246Ah
班次1E41h 3042h 2E43h 2044h 1245h 2146h 2247h 2348h 1749h 244Ah
Ctrl 1E01h 3002h 2E03h 2004h 1205h 2106h 2207h 2308h 1709h 240Ah
Alt 1E00h 3000h 2E00h 2000h 1200h 2100h 2200h 2300h 1700h 2400h

-K--L--M--N--O--P--Q--R--S--T-
256Bh 266Ch 326Dh 316Eh 186Fh 1970h 1071h 1372h 1F73h 1474h
Shift 254Bh 264Ch 324Dh 314Eh 184Fh 1950h 1051h 1352h 1F53h 1454h
Ctrl 250Bh 260Ch 320Dh 310Eh 180Fh 1910h 1011h 1312h 1F13h 1414h
Alt 2500h 2600h 3200h 3100h 1800h 1900h 1000h 1300h 1F00h 1400h

-U--V--W--X--Y--Z-
1675h 2F76h 1177h 2D78h 1579h 2C7Ah
班次1655h 2F56h 1157h 2D58h 1559h 2C5Ah
Ctrl 1615h 2F16h 1117h 2D18h 1519h 2C1Ah
Alt 1600h 2F00h 1100h 2D00h 1500h 2C00h

F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
3B00h 3C00h 3D00h 3E00h 3F00h 4000h 4100h 4200h 4300h 4400h 8500h 8600h
班次5400h 5500h 5600h 5700h 5800h 5900h 5A00h 5B00h 5C00h 5D00h 8700h 8800h
Ctrl 5E00h 5F00h 6000h 6100h 6200h 6300h 6400h 6500h 6600h 6700h 8900h 8A00h
Alt 6800h 6900h 6A00h 6B00h 6C00h 6D00h 6E00h 6F00h 7000h 7100h 8B00h 8C00h
The BIOS has a default memory area for the keyboard buffer which holds up to 16 keystrokes.
This area starts at 0040:001Eh and is 32 bytes in length. (16 2-byte scancodes)
The word (2 bytes) at 0040:001Ah hold the current head of the BIOS keyboard buffer.
The word (2 bytes) at 0040:001Ch hold the current tail of the BIOS keyboard buffer.
If these two pointers are different, then there is a keystroke ready for extraction.

//////////////////////////////////////////////////////////////
func insert key in a DOS environement, where sizeof(short) ==2;

short *ptrHead =(short far *)0x0040001A;
short *ptrTail =(short far *)0x0040001C;
short *ptrNewHead;

ptrNewHead =ptrHead;
ptrNewHead +=sizeof(short);
ptrNewHead &=0xFFFFFFE0; // not 31

if (ptrNewHead !=ptrTail) { // if there is room
*ptrHead =(short)scancode; // whatever key ..
ptrHead =ptrNewHead
}
////////////////////////////////////////////////////////////////
some scancodes

- A - - B - - C - - D - - E - - F - - G - - H - - I - - J -
1E61h 3062h 2E63h 2064h 1265h 2166h 2267h 2368h 1769h 246Ah
Shift 1E41h 3042h 2E43h 2044h 1245h 2146h 2247h 2348h 1749h 244Ah
Ctrl 1E01h 3002h 2E03h 2004h 1205h 2106h 2207h 2308h 1709h 240Ah
Alt 1E00h 3000h 2E00h 2000h 1200h 2100h 2200h 2300h 1700h 2400h

- K - - L - - M - - N - - O - - P - - Q - - R - - S - - T -
256Bh 266Ch 326Dh 316Eh 186Fh 1970h 1071h 1372h 1F73h 1474h
Shift 254Bh 264Ch 324Dh 314Eh 184Fh 1950h 1051h 1352h 1F53h 1454h
Ctrl 250Bh 260Ch 320Dh 310Eh 180Fh 1910h 1011h 1312h 1F13h 1414h
Alt 2500h 2600h 3200h 3100h 1800h 1900h 1000h 1300h 1F00h 1400h

- U - - V - - W - - X - - Y - - Z -
1675h 2F76h 1177h 2D78h 1579h 2C7Ah
Shift 1655h 2F56h 1157h 2D58h 1559h 2C5Ah
Ctrl 1615h 2F16h 1117h 2D18h 1519h 2C1Ah
Alt 1600h 2F00h 1100h 2D00h 1500h 2C00h

F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
3B00h 3C00h 3D00h 3E00h 3F00h 4000h 4100h 4200h 4300h 4400h 8500h 8600h
Shift 5400h 5500h 5600h 5700h 5800h 5900h 5A00h 5B00h 5C00h 5D00h 8700h 8800h
Ctrl 5E00h 5F00h 6000h 6100h 6200h 6300h 6400h 6500h 6600h 6700h 8900h 8A00h
Alt 6800h 6900h 6A00h 6B00h 6C00h 6D00h 6E00h 6F00h 7000h 7100h 8B00h 8C00h


这篇关于在DOS下用C ++发送密钥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆