Need a unique gift idea?
A Pastebin account makes a great Christmas gift
SHARE
TWEET

Untitled

a guest Dec 6th, 2018 53 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
 
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include <malloc.h>
  4. #include <Windows.h>
  5. #pragma comment(lib,"winmm.lib")
  6. int WaitPressKey(int,int);
  7. int WaitPressKeyEx(int,int,bool,...);
  8.  
  9. int main(void){
  10.     int check = 0;
  11.     printf("何らかのキーを押してください\n");
  12.     WaitPressKey(-1,-1);
  13.  
  14.     printf("Dキーを押してください\n");
  15.     WaitPressKey('D',-1);
  16.  
  17.     printf("Alt+Wを押してください\n");
  18.     WaitPressKeyEx(2,-1,true,VK_MENU,'W');
  19.  
  20.     printf("Enter(Return)キーかスペースキーを押してください\n");
  21.     WaitPressKeyEx(2,-1,false,VK_RETURN,VK_SPACE);
  22.    
  23.     printf("Ctrl + Shift + Nを押してください\n");
  24.     WaitPressKeyEx(3,-1,true,VK_CONTROL , VK_SHIFT , 'N');
  25.  
  26.     printf("ESCキーかF4キーかバックスペースキーを押してください\n");
  27.     WaitPressKeyEx(3,-1,false,VK_ESCAPE,VK_F4,VK_BACK);
  28.  
  29.     printf("Ctrl + Shift + Alt + F を押してください\n");
  30.     WaitPressKeyEx(4,-1,true,VK_CONTROL , VK_SHIFT , VK_MENU, 'F');
  31.  
  32.     printf("Alt + F2を押してください(タイムアウト:4秒)");
  33.     check = WaitPressKeyEx(2,4000,true,VK_MENU,VK_F2);
  34.     if(check == -2)printf("[timeout]\n"); else printf("\n");
  35.  
  36.     printf("Ctrl + Shift + F5を押してください(タイムアウト:3秒)");
  37.     check=WaitPressKeyEx(3,3000,true,VK_CONTROL , VK_SHIFT , VK_F5);
  38.     if(check == -2)printf("[timeout]\n"); else printf("\n");
  39.  
  40.  
  41.    
  42.     return 0;
  43. }
  44.  
  45. int WaitPressKey(int keyid,int timeout){
  46.     int byteKeyState[256];
  47.     int flag = 0 , i , retkey = keyid;
  48.     int starttime;
  49.     if(keyid >= 256)return -1;
  50.  
  51.     timeBeginPeriod(1);
  52.     starttime = timeGetTime();
  53.     do{
  54.         //キーボードの状態を取得
  55.         for(i = 0 ; i < 256 ; i++)byteKeyState[i] = GetAsyncKeyState(i) & 0x8000;
  56.  
  57.         //確認
  58.         if(keyid == -1){
  59.             //引数で確認すべきキーコードが-1(全て対象)と指定されてる時
  60.             //全てのデータをチェックして押されてるものがあったらflagを1にして
  61.             //forループを抜ける(OEMのコードは除く)
  62.             for(i = 0 ; i < 256 ; i++){
  63.                 if(i>=0xE9  &&  i<=0xF5 || i==0xE1 || i==0xE3 ||  i==0xE4 || i==0xE6){
  64.                     continue;
  65.                 }else if(byteKeyState[i]){ 
  66.                     flag = 1;
  67.                     retkey = i;
  68.                     break;
  69.                 }
  70.             }          
  71.         }else{
  72.             //引数で確認すべきキーコードが指定されてる時
  73.             if(byteKeyState[keyid]) flag = 1;
  74.         }
  75.         if((flag==0) && ((timeout == 0) || ((timeout>0)&&((int)(timeGetTime() - starttime) >=timeout)))){
  76.             retkey = -2;
  77.             break;
  78.         }
  79.     }while(flag == 0);
  80.     timeEndPeriod(1);
  81.     return retkey;
  82. }
  83.  
  84.  
  85. int WaitPressKeyEx(int NumberOfKeys,int timeout,bool isAND,...){
  86.     int byteKeyState, *keycodes , retkey=0  ,cnt ;
  87.     int andendflag , orendflag=0;
  88.     va_list dynamic_val;
  89.     int starttime;
  90.     if(NumberOfKeys == 0 || NumberOfKeys>256)return -1;
  91.    
  92.     //動的メモリ確保
  93.     keycodes = new int[NumberOfKeys];
  94.     //キーリスト取得開始
  95.     va_start(dynamic_val , isAND);
  96.  
  97.     //キーリスト取得ループ
  98.     for(cnt = 0 ; cnt < NumberOfKeys ; cnt++) *(keycodes + cnt) = va_arg(dynamic_val,int); 
  99.     //キーリスト取得完了
  100.     va_end(dynamic_val);
  101.  
  102.     timeBeginPeriod(1);
  103.     starttime = timeGetTime();
  104.     do{
  105.         //キーボードの状態確認ループ
  106.         for(cnt = 0 , andendflag = 1,orendflag = 0; cnt < NumberOfKeys ; cnt++){
  107.             byteKeyState = (GetAsyncKeyState(*(keycodes + cnt)) & 0x8000) >> 15;
  108.             if(isAND){
  109.                 andendflag *= byteKeyState ;
  110.                 if(andendflag == 0)break;
  111.             }else if(byteKeyState){
  112.                 orendflag = 1;
  113.                 retkey = *(keycodes + cnt);
  114.                 break;
  115.             }
  116.         }
  117.         if((!orendflag && !andendflag) && ((timeout == 0) || ((timeout>0)&&((int)(timeGetTime() - starttime) >=timeout)))){
  118.             retkey = -2;
  119.             break;
  120.         }  
  121.     }while((isAND && !andendflag) || (!isAND && !orendflag));
  122.     timeEndPeriod(1);
  123.     //動的メモリ解放
  124.     delete []keycodes;
  125.     return (isAND && retkey!=-2) ? 0 : retkey;
  126. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top