#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"winmm.lib")

HMIDIOUT handle;

unsigned long result = midiOutOpen(&handle, 0, 0, 0, CALLBACK_NULL), device = 0; //键盘midi
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);//鼠标操作
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD state = 0, res;
INPUT_RECORD mouseRec;

int main()
{
COORD size = {90, 25};
SetConsoleScreenBufferSize(hOut, size); // 重新设置缓冲区大小
SMALL_RECT rc = {0, 0, 90 - 1, 25 - 1}; // 重置窗口位置和大小
SetConsoleWindowInfo(hOut, true , &rc);
SetConsoleTextAttribute(hOut, 0xF0);
char table[] =
"  █ █ ▕  █ █ █ ▕  █ █ ▕  █ █ █ ▕  █ █ ▕  █ █ █ ▕\n"\
"  █ █ ▕  █ █ █ ▕  █ █ ▕  █ █ █ ▕  █ █ ▕  █ █ █ ▕\n"\
"  █ █ ▕  █ █ █ ▕  █ █ ▕  █ █ █ ▕  █ █ ▕  █ █ █ ▕\n"\
" ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕\n"\
" ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕\n"\
" ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕\n"\
" ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕ ▕\n"\
"▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔\n";
puts(table);
printf("Q\tW\tE\tR\t\tU\tI\tO \nC2\tD2\tE2\tF2\t\tG2\tA2\tB2\nA\tS\tD\tF\t\tJ\tK\tL \nC1\tD1\tE1\tF1\t\tG1\tA1\tB1\nZ\tX\tC\tV\t\tM\t,\t. \nC0\tD0\tE0\tF0\t\tG0\tA0\tB0\n");
while(1)
{
if(GetAsyncKeyState(65))midiOutShortMsg(handle, 0x00603C90);//A
if(GetAsyncKeyState(83))midiOutShortMsg(handle, 0x00603E90);//S
if(GetAsyncKeyState(68))midiOutShortMsg(handle, 0x00604090);//D
if(GetAsyncKeyState(70))midiOutShortMsg(handle, 0x00604190);//F
if(GetAsyncKeyState(74))midiOutShortMsg(handle, 0x00604390);//J
if(GetAsyncKeyState(75))midiOutShortMsg(handle, 0x00604590);//K
if(GetAsyncKeyState(76))midiOutShortMsg(handle, 0x00604790);//L
if(GetAsyncKeyState(90))midiOutShortMsg(handle, 0x00603090);//Z
if(GetAsyncKeyState(88))midiOutShortMsg(handle, 0x00603290);//X
if(GetAsyncKeyState(67))midiOutShortMsg(handle, 0x00603490);//C
if(GetAsyncKeyState(86))midiOutShortMsg(handle, 0x00603590);//V
if(GetAsyncKeyState(77))midiOutShortMsg(handle, 0x00603790);//M
if(GetAsyncKeyState(188))midiOutShortMsg(handle, 0x00603990);//,
if(GetAsyncKeyState(190))midiOutShortMsg(handle, 0x00603b90);//.
if(GetAsyncKeyState(81))midiOutShortMsg(handle, 0x00604890);//Q
if(GetAsyncKeyState(87))midiOutShortMsg(handle, 0x00604a90);//W
if(GetAsyncKeyState(69))midiOutShortMsg(handle, 0x00604c90);//E
if(GetAsyncKeyState(82))midiOutShortMsg(handle, 0x00604d90);//R
if(GetAsyncKeyState(85))midiOutShortMsg(handle, 0x00604f90);//U
if(GetAsyncKeyState(73))midiOutShortMsg(handle, 0x00605190);//I
if(GetAsyncKeyState(79))midiOutShortMsg(handle, 0x00605390);//O

ReadConsoleInput(hIn, &mouseRec, 1, &res);
if (mouseRec.Event.MouseEvent.dwMousePosition.Y < 7 && mouseRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //左键
{
switch(mouseRec.Event.MouseEvent.dwMousePosition.X / 4)
{
case 7:
midiOutShortMsg(handle, 0x00603C90);
break;
case 8:
midiOutShortMsg(handle, 0x00603E90);
break;
case 9:
midiOutShortMsg(handle, 0x00604090);
break;
case 10:
midiOutShortMsg(handle, 0x00604190);
break;
case 11:
midiOutShortMsg(handle, 0x00604390);
break;
case 12:
midiOutShortMsg(handle, 0x00604590);
break;
case 13:
midiOutShortMsg(handle, 0x00604790);
break;
case 0:
midiOutShortMsg(handle, 0x00603090);
break;
case 1:
midiOutShortMsg(handle, 0x00603290);
break;
case 2:
midiOutShortMsg(handle, 0x00603490);
break;
case 3:
midiOutShortMsg(handle, 0x00603590);
break;
case 4:
midiOutShortMsg(handle, 0x00603790);
break;
case 5:
midiOutShortMsg(handle, 0x00603990);
break;
case 6:
midiOutShortMsg(handle, 0x00603b90);
break;
case 14:
midiOutShortMsg(handle, 0x00604890);
break;
case 15:
midiOutShortMsg(handle, 0x00604a90);
break;
case 16:
midiOutShortMsg(handle, 0x00604c90);
break;
case 17:
midiOutShortMsg(handle, 0x00604d90);
break;
case 18:
midiOutShortMsg(handle, 0x00604f90);
break;
case 19:
midiOutShortMsg(handle, 0x00605190);
break;
case 20:
midiOutShortMsg(handle, 0x00605390);
break;
default:
break;
}
}
}
return 0;
}


  


作者:​​火星十一郎​

本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.