আমি কী কী চাপলাম?


15

কাজটি হ'ল কী-বোর্ডে কোন কী টিপিত হয় তা চিহ্নিত করার জন্য কোড লিখি। আপনি ধরে নিতে পারেন যে একবারে কেবল একটি চাবি টিপানো হয় এবং সেখানে একটি স্ট্যান্ডার্ড মার্কিন কীবোর্ড বিন্যাস রয়েছে। @ ওভার 2 এর সাথে এটি লেআউট।

আপনার কোড টি চাপলে যে কোনও কী জন্য একটি অনন্য শনাক্তকারী আউটপুট করা উচিত। এর মধ্যে রয়েছে প্রিটএসসিএন, স্ক্রোল লক, বিরতি, বাম শিফট, ডান শিফট, বাম সিআরটিএল, ডান সিটিআরএল, ক্যাপস লক, ট্যাব, এন্টার, নম্বর প্যাডে প্রবেশ, নাম লক, সন্নিবেশ, নম্বর প্যাডে ইনস, ব্যাকস্পেস, ডেল, এফ 1 ... F12, Esc, বাম উইন্ডোজ কী, ডান উইন্ডোজ কী, Alt, AltGr, অ্যাপ্লিকেশন কী (প্রসঙ্গ মেনু) এবং আরও কিছু so

আপনার কোডটি মূল প্রেসগুলির জন্য অপেক্ষা করা এবং এটি খুন না হওয়া পর্যন্ত তাদের পরিচয় আউটপুট করা উচিত। কোনও কী প্রকাশিত হওয়ার সাথে সাথে এটি সনাক্তকারীকে আউটপুট করে। এটি প্রাপ্ত কী কীগুলি টি থেকে অন্য কোনও পদক্ষেপ নেওয়া উচিত নয় এবং এটি অনন্য শনাক্তকারী ছাড়া অন্য কোনও কিছু আউটপুট করা উচিত নয়।

আপনার উত্তরে, দয়া করে নীচের কী টিপসের জন্য আপনি কী কোড আউটপুটগুলি দেখান: ট্যাব, বিরতি দিন, প্রবেশ করুন, নম্বর প্যাডে প্রবেশ করুন, বাম উইন্ডোজ কী, ডান উইন্ডোজ কী, সন্নিবেশ করুন এবং নম্বর প্যাডে ইনস করুন।

আপনার যদি খুব আলাদা কীবোর্ড থাকে তবে আপনার কীবোর্ডের প্রতিটি একক কীটির জন্য আলাদা শনাক্তকারী আউটপুট আনা চ্যালেঞ্জ।


1
জেএসে (ব্রাউজার জেএস, যাইহোক), নির্দিষ্ট কীগুলি টিপছে কিনা তা পরীক্ষা করা অসম্ভব (যেমন ক্যাপস লক, নম লক, স্ক্রোল লক, প্রিটসকন)। এর অর্থ কী জেএস উত্তর দিতে পারে না?
ইটিএইচ প্রডাকশন

2
পছন্দ করুন জেএস প্রেমীদের কাছে সর্বত্র ক্ষমা প্রার্থনা।

2
5 টি উত্তর সরবরাহের পরে প্রয়োজনীয় সংশোধন করা হয়েছে (এখন মুছে দেওয়া একটি সহ) এটি সত্যিই ন্যায্য নয় ...
অলিভিয়ার গ্রাগোয়ার

6
উইন্ডোজ কী ইত্যাদির মতো অনেকগুলি কীবোর্ডে নেই এমন কীগুলির আউটপুট অনুরোধ করা আমার পক্ষে ন্যায্য / সঠিক বলে মনে হয় না
নটস 90 এ 19-18-এ

1
@ Notts90 তারা মানক ইউএস কীবোর্ড বিন্যাসের অংশ না? আপলোড.উইকিমিডিয়া.আর.উইকিপিডিয়া

উত্তর:


22

x86 মেশিন কোড, ডস এক্সিকিউটেবল, 29 * 28 বাইট

FAE464D0E873FAE460D0E073F4D41005212192B402CD2188F2CD21EBE3

এটি এমএস-ডসের জন্য কার্যকর একটি সিওএম , এটির জন্য আইবিএম পিসি সামঞ্জস্যপূর্ণ হার্ডওয়্যার প্রয়োজন। বিশেষত একটি 8042 PS / 2 নিয়ামক বা সম্ভবত এসএমএম এর মাধ্যমে এটির একটি এমুলেশন । দীর্ঘ গল্প সংক্ষিপ্ত, এটি যে কোনও মূলধারার পিসিতে বক্সের বাইরে কাজ করা উচিত।

উত্স কোড হয়

BITS 16

 ;Disable the interrupts so we don't compete with the IRQ 1 (the 8042 main
 ;device IRQ) handler (the ISR n. 9 by default) for the reading of the codes.
 cli

_wait:

 ;Is 'Output buffer full (OBF)' bit set?

 in al, 64h                ;Read the 8042 status register             
 shr al, 1                 ;Move bit 0 (OBF) into the carry flag

jnc _wait                  ;Keep spinning if CF = OBF not set

 ;Read the scan code S
 in al, 60h

 ;Is S a break code?

 shl al, 1                 ;Bit 7 is set if it is
jnc _wait

 ;PART 2

 ;AL = S mod 10h := y, AH = S / 10h := x
 aam 16
 add ax, 2121h             ;Make both quantities in the printable ASCII range (skip space though)

 ;Print y
 xchg dx, ax
 mov ah, 02h
 int 21h                   ;int 21/ah=02 prints the char in DL

 ;DH is still valid here, it holds x. We print it now
 mov dl, dh
 int 21h

 ;Never terminate
jmp _wait

আমি প্রোগ্রামটি দুটি ভাগে বিভক্ত করেছি।

প্রথম অংশটি স্ক্যানকোডগুলি পড়ার বিষয়ে আলোচনা করে । স্ক্যানকোডগুলি প্রতিটি কীগুলির সাথে যুক্ত সংখ্যাসূচক মান।
মনে রাখবেন যে এগুলি হার্ডওয়্যার কোড, তারা ওএস বা চরসেটের উপর নির্ভর করে না। এগুলি কীটির এনকোডড জোড় (কলাম, সারি) এর মতো।
প্রতিটি কীতে একটি স্ক্যানকোড থাকে, এমনকি কিছু কীবোর্ডে পাওয়া অ-মানক অদ্ভুত ফাংশন কীগুলি (যেমন "ওপেন ক্যালক" কী)।
কিছু কীতে মাল্টি-বাইট স্ক্যানকোড রয়েছে, তারা কেবলমাত্র বাইটের ক্রম দেখে স্ট্রিমটিকে ডিকোডিবলযোগ্য করার জন্য ডিজাইন করেছেন উপসর্গ।
সুতরাং প্রতিটি কী তার অনন্য শনাক্তকারী এমনকি সিটিআরএল, শিফট, উইনকি এবং আরও অনেক কিছু পেয়ে যায়।

কেবল "ব্রেক কোডগুলি", যখন কীটি প্রকাশিত হয় তখন প্রক্রিয়াকরণ করা হয়, "কোডগুলি তৈরি করুন" উপেক্ষা করা হয়।
ফর্মারগুলির উচ্চতর বিট (একটি বাইটের জন্য বিট 7) সেট থাকে, সুতরাং তাদের সনাক্ত করা সহজ।

দ্বিতীয় অংশটি একটি বাইট মুদ্রণের সাথে সম্পর্কিত।
মুদ্রণ সবসময় সমাবেশে দীর্ঘ হয়, আমাদের কোন বিল্টিন নেই।
এটি সংক্ষিপ্ত রাখতে এবং যেহেতু এটি লেখার প্রয়োজন ছিল required কীটির শনাক্তকরণ , তাই আমি ব্যক্তিগত এনকোডিংয়ের পক্ষে দশমিক বা হেক্স সংখ্যাগুলি ত্যাগ করেছি।

একটি বাইট xy, যেখানে x উচ্চ স্তনবৃন্ত এবং y নীচে দুটি ধারাবাহিক অক্ষর সি 0 হিসাবে মুদ্রিত হয় এবং সি 1 বর্ণিত:

c 0 = 0x21 + y
1 = 0x21 + x

নোট করুন যে নীচুটি প্রথমে মুদ্রিত হয়েছে (এটি আমাকে বদলে দিয়েছে)।
যুক্তিটি হ'ল '!' থেকে একটানা ASCII অক্ষরগুলিতে একটি স্তনবৃন্তের 16 টি সম্ভাব্য মানের প্রতিটি মানচিত্র তৈরি করা।
সহজভাবে বলতে গেলে এটি একটি হেক্স সংখ্যার সাথে

  1. নিবলস অদলবদল
  2. !"#$%&'()*+,-./01 পরিবর্তে অঙ্ক হিসাবে (als) 0123456789abcdef

এটিকে ডসবক্সে চালানো এবং কিছু এলোমেলো কী (যার কয়েকটি একটি বিশেষ কী তবে টিপুন যে উইন্ডোজ প্রক্রিয়া হিসাবে ডসবক্স সমস্ত কীগুলি ক্যাপচার করতে পারে না) ফলন দেয়

ডসবক্স কী শনাক্তকারী চালাচ্ছে

নোট করুন যে এই প্রোগ্রামটি কখনই শেষ হয় না (আরও, এটি বিঘ্নগুলি নিষ্ক্রিয় করে পিসির সম্পূর্ণ নিয়ন্ত্রণ নেয়) কারণ আমি বিশ্বাস করি যে প্রশ্নটি দ্বারা উদ্দেশ্য করা হয়েছিল (কেবলমাত্র ডসটিতে প্রক্রিয়াজাতকরণের কোনও হত্যাকাণ্ড নেই)।


* কডিগ্রিকে ধন্যবাদ হ্রাস করা হয়েছে


INনির্দেশটি ব্যবহার করে কি রম বায়োস ইন্টারপ্রেটগুলি (যেমন int 16h, ফাংশন 10 ঘন্টা) কল করার চেয়ে বাইটের ক্ষেত্রে ছোট হতে পারে ?
কোডি গ্রে

@ কোডি গ্রে সম্ভবত না, পুরো লুপটি এড়িয়ে যেতে পারে। কোনওভাবে আমি সরাসরি লাফিয়ে inনির্দেশের দিকে চলে গেলাম । এটি আসলে আপনার কাছে খুব ভাল পয়েন্ট। আপনি যদি ইতিমধ্যে না থাকেন তবে উত্তর হিসাবে পোস্ট করবেন না কেন? :)
মার্গারেট ব্লুম

1
আচ্ছা এখন আপনি পাগল কথা বলছেন! এটি আপনার বিদ্যমান উত্তরের উপর মন্তব্য করার চেয়ে আরও অনেক বেশি কাজ বলে মনে হচ্ছে। :-p আমি একসাথে কিছু রেখে খেলছি। মজাদার টিপ, যদিও: যখন কোড গল্ফিং, যখন একাউন্টারের xchgসাথে রেজিস্টারগুলির মধ্যে 1 বাইট হয়, তাই এটি 2-বাইটের চেয়ে ভাল mov
কোডি গ্রে

1
ঠিক আছে, সমস্যাটি int 16hহ'ল আমি শিফট কী, স্ক্রোল লক, বা বিরতি / বিরতি (সম্ভবত অন্যদের) জন্য স্ক্যান কোড পাই না এবং এটি চ্যালেঞ্জের দ্বারা প্রয়োজনীয়। আই / ও থেকে সরাসরি ইনপুট পড়ার আপনার সমাধানটি কাজ করে, যদিও এটি আমার কাছে দেখে মনে হচ্ছে এটি ইন / ডেল / হোম / এন্ড / পিজিইউপি / পিজডাউন ক্লাস্টারের সমস্ত কীগুলির জন্য একই মান প্রদান করে।
কোডি ধূসর

1
@ পিটারকর্ডস: এছাড়াও পাউসের কিছু অদ্ভুত আচরণ রয়েছে, আইআইইউসি ব্রেক প্রেসটি একসাথে কী প্রেসে মেক কোড প্রেরণ, এবং কী রিলিজে কিছু না পাঠানো। বা এটিই আমি পিসি গেম প্রোগ্রামিং এনসাইক্লোপিডিয়া থেকে বুঝেছি।
নিনজালজ

12

জাভা 7 বা উচ্চতর, 246 228 বাইট

import java.awt.event.*;class K{public static void main(String[]a){new java.awt.Frame(){{addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){System.out.println(e);}});show();setFocusTraversalKeysEnabled(0<0);}};}}

Ungolfed:

import java.awt.event.*;
class K{
    static void main(String[]a){
        new java.awt.Frame(){
            {
                addKeyListener(new KeyAdapter(){
                    public void keyPressed(KeyEvent e){
                        System.out.println(e);
                    }
                });
                show();
                setFocusTraversalKeysEnabled(0<0);
            }
        };
    }
}

-18 এর জন্য @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ জানাই show(), 0<0এবংimport java.awt.event.*;

যার ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

এমনকি বড় আকারের অক্ষর, উইন্ডো কী, ক্যাপ লকস ইত্যাদির জন্য শিফট-প্রেসগুলিও পরিচালনা করে ... আপনি এটি 'মোডিফায়ারগুলি' প্রিন্ট করতে দেখতে পারেন যা 'হোল্ড কীগুলি' রয়েছে।

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=27,keyText=Escape,keyChar=Escape,keyLocation=KEY_LOCATION_STANDARD,rawCode=27,primaryLevelUnicode=27,scancode=1,extendedKeyCode=0x1b] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=192,keyText=Back Quote,keyChar='`',keyLocation=KEY_LOCATION_STANDARD,rawCode=192,primaryLevelUnicode=96,scancode=41,extendedKeyCode=0xc0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=9,keyText=Tab,keyChar=Tab,keyLocation=KEY_LOCATION_STANDARD,rawCode=9,primaryLevelUnicode=9,scancode=15,extendedKeyCode=0x9] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=20,keyText=Caps Lock,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=20,primaryLevelUnicode=0,scancode=58,extendedKeyCode=0x14] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=17,keyText=Ctrl,keyChar=Undefined keyChar,modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_LEFT,rawCode=17,primaryLevelUnicode=0,scancode=29,extendedKeyCode=0x11] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=524,keyText=Windows,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=91,primaryLevelUnicode=0,scancode=91,extendedKeyCode=0x20c] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,modifiers=Alt,extModifiers=Alt,keyLocation=KEY_LOCATION_LEFT,rawCode=18,primaryLevelUnicode=0,scancode=56,extendedKeyCode=0x12] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=32,keyText=Space,keyChar=' ',keyLocation=KEY_LOCATION_STANDARD,rawCode=32,primaryLevelUnicode=32,scancode=57,extendedKeyCode=0x20] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,modifiers=Alt,extModifiers=Alt,keyLocation=KEY_LOCATION_RIGHT,rawCode=18,primaryLevelUnicode=0,scancode=56,extendedKeyCode=0x12] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=17,keyText=Ctrl,keyChar=Undefined keyChar,modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_RIGHT,rawCode=17,primaryLevelUnicode=0,scancode=29,extendedKeyCode=0x11] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=37,keyText=Left,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=37,primaryLevelUnicode=0,scancode=75,extendedKeyCode=0x25] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_RIGHT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=38,keyText=Up,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=38,primaryLevelUnicode=0,scancode=72,extendedKeyCode=0x26] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=39,keyText=Right,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=39,primaryLevelUnicode=0,scancode=77,extendedKeyCode=0x27] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=96,keyText=NumPad-0,keyChar='0',keyLocation=KEY_LOCATION_NUMPAD,rawCode=96,primaryLevelUnicode=48,scancode=82,extendedKeyCode=0x60] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=110,keyText=NumPad .,keyChar='.',keyLocation=KEY_LOCATION_NUMPAD,rawCode=110,primaryLevelUnicode=46,scancode=83,extendedKeyCode=0x6e] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=Enter,keyChar=Enter,keyLocation=KEY_LOCATION_NUMPAD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=107,keyText=NumPad +,keyChar='+',keyLocation=KEY_LOCATION_NUMPAD,rawCode=107,primaryLevelUnicode=43,scancode=78,extendedKeyCode=0x6b] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=109,keyText=NumPad -,keyChar='-',keyLocation=KEY_LOCATION_NUMPAD,rawCode=109,primaryLevelUnicode=45,scancode=74,extendedKeyCode=0x6d] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=106,keyText=NumPad *,keyChar='*',keyLocation=KEY_LOCATION_NUMPAD,rawCode=106,primaryLevelUnicode=42,scancode=55,extendedKeyCode=0x6a] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=34,keyText=Page Down,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=34,primaryLevelUnicode=0,scancode=81,extendedKeyCode=0x22] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=33,keyText=Page Up,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=33,primaryLevelUnicode=0,scancode=73,extendedKeyCode=0x21] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=35,keyText=End,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=35,primaryLevelUnicode=0,scancode=79,extendedKeyCode=0x23] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=36,keyText=Home,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=36,primaryLevelUnicode=0,scancode=71,extendedKeyCode=0x24] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=127,keyText=Delete,keyChar=Delete,keyLocation=KEY_LOCATION_STANDARD,rawCode=46,primaryLevelUnicode=0,scancode=83,extendedKeyCode=0x7f] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=155,keyText=Insert,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=45,primaryLevelUnicode=0,scancode=82,extendedKeyCode=0x9b] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=123,keyText=F12,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=123,primaryLevelUnicode=0,scancode=88,extendedKeyCode=0x7b] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=122,keyText=F11,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=122,primaryLevelUnicode=0,scancode=87,extendedKeyCode=0x7a] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=121,keyText=F10,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=121,primaryLevelUnicode=0,scancode=68,extendedKeyCode=0x79] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=120,keyText=F9,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=120,primaryLevelUnicode=0,scancode=67,extendedKeyCode=0x78] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=119,keyText=F8,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=119,primaryLevelUnicode=0,scancode=66,extendedKeyCode=0x77] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=118,keyText=F7,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=118,primaryLevelUnicode=0,scancode=65,extendedKeyCode=0x76] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=117,keyText=F6,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=117,primaryLevelUnicode=0,scancode=64,extendedKeyCode=0x75] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=116,keyText=F5,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=116,primaryLevelUnicode=0,scancode=63,extendedKeyCode=0x74] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=115,keyText=F4,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=115,primaryLevelUnicode=0,scancode=62,extendedKeyCode=0x73] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=114,keyText=F3,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=114,primaryLevelUnicode=0,scancode=61,extendedKeyCode=0x72] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=113,keyText=F2,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=113,primaryLevelUnicode=0,scancode=60,extendedKeyCode=0x71] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=112,keyText=F1,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_STANDARD,rawCode=112,primaryLevelUnicode=0,scancode=59,extendedKeyCode=0x70] on frame0

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

11

এইচটিএমএল (জাভাস্ক্রিপ্ট সহ), 46 31 টি অক্ষর, 46 31 বাইট

ব্যবহার এই পার্থক্য এন্টার নামপ্যাড এবং বিনিময়ে, LControl এবং RControl ... আর না যেহেতু apsillers একটি signle ফাংশন কল সঙ্গে এটি করতে একটি উপায় খুঁজে পাওয়া যায়নি।

<body onkeyup=alert(event.code)

নির্দিষ্ট ফলাফল:

যে নম্বরগুলি এখনও রয়েছে আমি তার ল্যাপটপটিতে পরীক্ষা করতে পারি না এমন ফলাফলগুলি
দয়া করে এই চাবিগুলির অ্যাক্সেস পাওয়ার জন্য আমার অপেক্ষা করুন

PrtScn -> মুদ্রণস্ক্রিন
স্ক্রোল লক -> স্ক্রোললোক
বিরতি ->
বাম শিফট বিরতি -> ShiftLeft
ডান শিফট -> ShiftRight
বাম Ctrl -> কন্ট্রোললাইফ্ট
ডান Ctrl -> কন্ট্রোলরাইট
ক্যাপস লক -> CapsLock
ট্যাব -> ট্যাব
এন্টার -> প্রবেশ
করুন প্যাড -> NumpadEnter
গণনা লক -> NumLock সক্রিয়, নিষ্ক্রিয়
ঢোকান -> সন্নিবেশ
ইন নম্বর প্যাডে -> Numpad0
ব্যাকস্পেস -> ব্যাকস্পেস
দেল -> মুছুন
এফ 1 ... F12 চেপে -> F12 চেপে করার এফ 1
Esc চাপুন -> Escape
বাম Windows কী -> MetaLeft
অধিকার উইন্ডোজ কী -> মেটাআরাইট
আল্ট -> অল্ট লেফট আলটগ্রি
-> আলট্রাইট (এক ধরণের বাগি, এটি কন্ট্রোল লেফট এবং তারপরে AltRight সনাক্ত করে,তবে এটি সত্যই আল্টরাইট)
অ্যাপ্লিকেশন কী (প্রসঙ্গ মেনু) -> কনটেক্সটমেনু

সম্পাদনা: ফান কল
করার ;পরে 1 বাইট সংরক্ষণ করা হয়েছে
18 বাইট লিল 'বিটস এবং ইটিএইচ প্রোডাকশনগুলিকে ধন্যবাদ জানায়, তারা লক্ষ্য করেছে আমি ফানক এবং বর্ণের নামগুলি সংক্ষিপ্ত করতে ভুলে গেছি।
32 বাইট রজারস্পিলকারকে ধন্যবাদ রক্ষা করেছে, তিনি লক্ষ্য করেছেন যে আমি অকারণে স্পারেটেড কোড করছি; এবং আবার -2 বাইট: onkeydown-> onkeyup
1 বাইট সংরক্ষিত: চূড়ান্ত স্ল্যাশ
2 বাইটের প্রয়োজন নেই ক্রেগআয়েরকে ধন্যবাদ: with()ফাংশন
2 বাইট সংরক্ষণ করেছে কেবলমাত্র এসসিআই -র জন্য: আমাদের 4 টি বাইটের keyজায়গায় which
সংরক্ষণ করা হয়েছে, যেহেতু আমাদের পাঠ্য রয়েছে, তাই কোনও প্রয়োজন নেই কারণ '-'+(প্রতিটি সনাক্তকারী এটি ব্যতীত অনন্য) 1 বাইট > এসএসআইআই -কেবলমাত্র (আবার) ধন্যবাদ সংরক্ষণ করেছে: আমার উত্তরের শীর্ষে যেমনটি বলা হয়েছে, অ্যাপসিলারদের 15 টি বাইট সংরক্ষণের জন্য আর কোনও চিহ্ন নেই ।

<body onkeyup=alert(event.code)


অপেক্ষা করুন ... কীভাবে ... ক্যাপস লক ... সনাক্ত হয়েছে? আমি ভেবেছিলাম যে এটা অসম্ভব ... হুঁ, ওহ ভাল। প্রাইসসিএন এবং সিসআরকি আমার পক্ষে কাজ করে না, তবে আমি একটি ল্যাপটপে যাচ্ছি একটি ছোট কীবোর্ড যা এই দুটি কীগুলির জন্য Fn + End এবং Fn + Home ব্যবহার করে।
ETH প্রোডাকশনস

আমি এই উত্তরটি পছন্দ করি তবে মনে হয় এটির কিছু সমস্যা আছে। আমি কোডেপেন.ইও / অ্যানন / ওপেন / মোলপিকিউএম পরীক্ষার সময় ট্যাব আমার জন্য কিছুই জানায় না । এছাড়াও এফ 12, প্র্টসকন এই নিয়মটি অনুসরণ করে না "এটি যে কী প্রেসগুলি গ্রহণ করে তা থেকে অন্য কোনও পদক্ষেপ নেওয়া উচিত নয় এবং এটি অনন্য শনাক্তকারী ছাড়া কিছু আউটপুট করা উচিত নয়" "

@ ল্যাম্বিক এইচটিএমএল ব্যবহার করে, সিস্টেমটি কী ব্যবহার করা থেকে বিরত করা সত্যিই সম্ভব নয়। আপনাকে এটিকে কোনও মেশিন (বা সিস্টেম) কার্যকর ভাষার (যেমন সি সম্ভবত) এর সাথে কী ইনপুটগুলি না চিনতে বাধ্য করতে হবে। ট্যাবে জন্য, আমি জানি না কি কাজ করার জন্য এটা শর্ত (আমি বলতে চাচ্ছি, কখনও কখনও কাজ করে এবং কখনও কখনও এটি না, আমি কিভাবে আমার উত্তর একইরূপে traversable কী জানি না নেই।
ভি Courtois

@ ল্যাম্বিক যদি আপনি কোডটি একটি স্ট্যান্ডেলোন (স্নিপেট বা ফিডাল বা অনুরূপ নয়), পূর্ণস্ক্রিন পৃষ্ঠায় (উদাহরণস্বরূপ, এফ 11 সহ) দেখেন তবে এটি ট্যাবগুলি ক্যাপচার করে; এটি ট্যাবগুলি ক্যাপচার করে না এমন ঘটনাটি পৃষ্ঠায় কোড চালানো নয়, বৃহত্তর ব্রাউজার পরিবেশের অবস্থার একটি ফাংশন। ডিফল্ট ব্যবহার প্রতিরোধ হিসাবে, <body onkeydown=return!!alert(event.code)>ফিরে কৌতুক করতে হবে falseউপরkeydown
apsillers

8

টিসিএল / টাকা, 22 টি অক্ষর

bind . <Key> {puts %K}

নমুনা রান:

টিসিএল / টাকা দ্বারা চিহ্নিত কীগুলি

মন্তব্য:

  • আমার কীবোর্ডে কোনও ডান উইন্ডোজ কী নেই ☹ ( চতুর ডিজাইনার ব্যাকলাইট স্যুইচটি তার জায়গায় রেখে দিয়েছে)
  • সংখ্যার প্যাডের সন্নিবেশ নুমলকের স্থিতির উপর ভিত্তি করে বিভিন্ন কোড উত্পন্ন করে
  • ভলিউম গিঁটটি X.org নির্দিষ্ট কোড উত্পন্ন করে, অন্য সবগুলি কেবল নিয়মিত কীওয়ার্ড

6

X.org, 21 বাইট সহ বাশ করুন

xev|awk 'NR%2&&/\(k/'

দুর্ভাগ্যক্রমে, আমি যেহেতু লিনাক্সে ম্যাকবুক এ আছি তা পরীক্ষা করতে পারছি না - প্রেন্টসক্রি নেই, কোনও সংখ্যাসূচক কীবোর্ড এবং সমস্ত নেই।

xevএমন একটি সরঞ্জাম যা মাউস এবং কীবোর্ড ইভেন্টগুলিকে আউটপুট করে X.org। আমি এটিকে জোর করে পাইপ করি, এমনকি লাইনগুলি ফিল্টার করি (যেহেতু প্রতিটি কী টিপানো হয় তখন প্রদর্শিত হবে, এবং তারপরে এটি প্রকাশিত হবে), এবং কেবল যেগুলি রয়েছে সেগুলি নির্বাচন করুন (k- এই স্ট্রিংটি প্রতিটি লাইনে চাপযুক্ত কী বর্ণনা করে।


আপনি দয়া করে প্রশ্নের তালিকাভুক্ত উদাহরণ আউটপুট যুক্ত করতে পারেন?

1
@ ল্যাম্বিক সমস্ত আউটপুট প্রস্থান করার পরে উপস্থিত হবে।

আহ। এটি অনুমানের জন্য জিজ্ঞাসা করে না। আমি এখন এটি পরিষ্কার করব।

এটি এখন একটি সিনট্যাক্স ত্রুটি দেয়।

3
নোট করুন যে লিনাক্স এক্স 11 বোঝায় না। উদাঃ এটি কোনও পাঠ্য কনসোলে ( showkey -sসেখানে ব্যবহার করুন : পি), বা খাঁটি ওয়েল্যান্ড জিইউআই ডেস্কটপে কাজ করবে না। এটি সত্যিই একটি বাশ + জোর উত্তর।
পিটার কর্ডেস

5

সি এবং উইন 32, 240 224 216 205 202 194 191 বাইট

#include<d3d.h>
#include<stdio.h>
w[9];p(x,y,a,b){printf("%X",a^b);}main(){w[1]=p;w[9]=p;CreateWindow(RegisterClass(w),0,1<<28,0,0,0,0,0,0,0,0);for(;GetMessage(w,0,16,0);)DispatchMessage(w);}

আউটপুট

TAB: F0008C00F0008

PAUSE: 450012C0450012

ENTER: 1C000CC01C000C

NUMPAD-ENTER: 11C000CC11C000C

WINDOWS-LEFT: 15B005AC15B005A

WINDOWS-RIGHT: 15C005DC15C005D

INSERT: 152002CC152002C

NUMPAD-INSERT: 52002CC052002C

ব্যাখ্যা

#include <d3d.h> // shortest built-in header that includes windows.h
#include <stdio.h> // for printf

w[9]; // space for wndclass-data array

// function castable to the signature of WNDPROC
p(x,y,a,b)
{
    // key and state are encoded in the last two 4-byte arguments to wndproc
    printf("%X",a^b);
}

main(m)
{
    // set minimal window class equivalent data pointing to wndproc above
    w[1]=p;w[9]=p;

    // create the window using the class, with WS_VISIBLE flag
    CreateWindow(RegisterClass(w),0,1<<28,0,0,0,0,0,0,0,0)
    for(;GetMessage(w,0,16,0);) // filter messages 15 and lower, which fire without input
        DispatchMessage(w);
}

সম্পাদনাগুলি

-16 @ugoren ধন্যবাদ

-8: এ পরিবর্তিত WNDCLASSহয়েছেint অ্যারেতে যেহেতু সমস্ত 10 সদস্য 4 বাইট রয়েছে

-11: ডাব্লুডক্লাস-ডেটা অ্যারের আংশিক সূচনা, কমে 9 টি উপাদান

-3: অন্তর্নিহিত ব্যবহার করুন int wndclass-ডেটা অ্যারের জন্য অন্তর্ভুক্ত ডিক্লে

-8: আউটপুট ফর্ম্যাট থেকে নিউলাইনটি সরিয়ে ফেলুন (তা ছাড়া তাত্ক্ষণিকভাবে প্রিন্ট এবং প্রিন্টফ ফ্লাশ হয় না); ফেরত ব্যবহার RegisterClassকরে CreateWindowআরগ এ সরান ATOM; Wndclass নামটি সেট করুনm যার বৈধ স্ট্রিং হওয়ার জন্য এটিতে কেবল একটি শূন্য-বাইট প্রয়োজন।

-3: ডেটা wজন্য পুনরায় ব্যবহারMSG


ব্যবহার করে সি ++ দিয়ে একই জিনিস করছেন cout অনেক খাটো হবে না?
onurcanbektas

@ লেথ নং <iostream>+ std::cout<<a^b<<"\n"লম্বা। প্লাস আমি মনে করি আপনার ফাংশন ডিক্সগুলিতে রিটার্নের ধরণ যুক্ত mকরতে হবে এবং এটি অন্তর্ভুক্ত হতে পারে না int
মোজবয়েস

সঙ্গে একটি গৃহস্থালির কাজ সংরক্ষণ করুনfor(;GetMessage(&m,0,16,0);)DispatchMessage(&m);
ugoren

এছাড়াও, p(x,y,a,b)এবং (void*)pকিছু সংরক্ষণ করা উচিত।
উগোরেন

3

জাভা (ওপেনজেডিকে 8) , 369 বাইট

import java.awt.event.*;import javax.swing.*;class F{public static void main(String[] a){JFrame f=new JFrame();f.addKeyListener(new KeyListener(){public void keyPressed(KeyEvent e){System.out.print(e.getKeyCode()*8+e.getKeyLocation());}public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}});f.setVisible(true);f.setFocusTraversalKeysEnabled(false);}}

এটি টিআইও দিয়ে চালানো যায় না কারণ এটি গ্রাফিকাল ইন্টারফেস ব্যবহার করে তবে এটি আমার কম্পিউটারে কাজ করে।

বিরতি: 153
প্রবেশ করুন: 81
নুমপ্যাডে প্রবেশ করুন: 84
বাম সুপার কী: 193 (আমার ডেস্কটপের জন্য মেনু শর্টকাটটি অক্ষম করার পরে)
ডান সুপার কী: 201
সন্নিবেশ: 241
নম্প্যাডে সন্নিবেশ করুন: 522948 (আমার কাছে একটি নেই, তবে আপনি যখন নম লক বন্ধ দিয়ে 5 টি চাপেন তখন আপনি এটি পাবেন N নুম লক চালু থাকলে আপনি 812 পেয়ে যাবেন)

অবহেলিত / ব্যাখ্যা:

import java.awt.event.*; // KeyListener, KeyEvent
import javax.swing.*; // JFrame

class F implements KeyListener {

    public static void main(String[] a) {
        JFrame f=new JFrame(); // creates a new GUI frame
        f.addKeyListener(new KeyListener() {  // puts a KeyListener in the frame with the following properties:

            // Method that runs whenever a key is pressed
            public void keyPressed(KeyEvent e) {
                // getKeyCode returns an integer that uniquely identifies the key,
                // but not the location (e.g. LShift and RShift have the same key code)
                // To fix this, I scale up the key code by 8 and add the location,
                // which is always 0-4 (Standard, Left, Right, NumPad, or Unknown)
                // I could have scaled by 5 instead but I wasn't really thinking
                System.out.print(e.getKeyCode() * 8 + e.getKeyLocation());
                // If you want nicer-looking output, just change "print" to "println"
            }

            // Method that runs whenever a printable character is typed (does nothing)
            public void keyTyped(KeyEvent e){}

            // Method that runs whenever a keyboard key is released (does nothing)
            public void keyReleased(KeyEvent e){}
        });

        f.setVisible(true); // the frame will only except key presses if it is visible
        f.setFocusTraversalKeysEnabled(false); // disables "focus traversal" keys (such as Tab) from actually traversing focus
    }
}

এটি ট্যাব কীটির জন্য কাজ করে না বলে মনে হচ্ছে না?
পোকে

setFocusTraversalKeysEnabled(false);আপনার উত্তরে এটি ঠিক করবে।
ম্যাজিক অক্টোপাস উরন

@ ম্যাজিক অ্যাক্টোপাস ইউরান আমি জানি না এটি কী করে এবং আমার মনে হয় না আমি চাই: পি
musicman523

এটি আপনার উত্তরটি ট্যাব কী-এর পক্ষে কাজ করে, কারণ এটি আপনার উত্তরটি ব্যতীত অবৈধ stands
ম্যাজিক অক্টোপাস উরন

ওহহহ্ আমি দেখছি - ট্যাবটি একটি "ফোকাস ট্র্যাভার্সাল কী"
সঙ্গীতজ্ঞ 523

3

স্কেলা ২.১০+, ২9৯ টি চর, ২ 27৯ বাইট

এখন এটি একটি স্কেলার প্রতিক্রিয়া :) যদিও মনে হচ্ছে আমি জাভা করছি। যাইহোক আমরা এটি টিআইওতে পরীক্ষা করতে পারি না।

import scala.swing._
import java.awt.event._
object M extends SimpleSwingApplication{def top=new MainFrame{this.peer.addKeyListener(new KeyListener(){def keyPressed(e:KeyEvent){print(e.getKeyCode+"-"+e.getKeyLocation)}
def keyReleased(e:KeyEvent){}
def keyTyped(e:KeyEvent){}})}}

দুঃখজনক যে আমাদের সমস্ত উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিগুলি যদি আমরা সেগুলি ব্যবহার না করি তবেই তা ঘোষণা করতে হবে: আমি কী বাইট গণনা থেকে এগুলি সরাতে পারি, যেহেতু কিছু সংকলক পতাকাগুলি তাদের ঘোষণা না করার অনুমতি দিতে পারে?

এই মুদ্রণগুলি (আমার এইচটিএমএল-জেএস প্রতিক্রিয়া হিসাবে) কীপ্রেসড, "-" এবং তারপরে "অবস্থান" রয়েছে।

এই ক্ষেত্রে :

PrtScn -> যাচাইযোগ্য
স্ক্রোল লক -> 145-1
বিরতি -> 19-1
বাম শিফট -> 16-2
ডান শিফট -> 16-3
বাম Ctrl -> 17-2
ডান Ctrl -> 17-3
ক্যাপস লক -> 20-1
ট্যাব -> যাচাইযোগ্য নয়
এন্টার -> 10-1
নম্বর প্যাডে প্রবেশ করুন -> 10-4
নম লক -> 144-4
সন্নিবেশ করুন ->
নম্বর প্যাডে 96-1 ইন -> 96-4
ব্যাকস্পেস -> 8-1
ডেল -> 127-1
এফ 1 ... এফ 12 -> 112-1 থেকে 123-1 এসকি
-> 27-1
বাম উইন্ডোজ কী -> 524-2
ডান উইন্ডোজ কী -> 524-3
আল্ট -> 18- 2
AltGr -> 18-3 (একধরনের বগি, এটি 17-2 এবং তারপরে 18-3 টি সনাক্ত করে,তবে এটি প্রকৃতপক্ষে 18-3)
অ্যাপ্লিকেশন কী (প্রসঙ্গ মেনু) -> 525-1

যদিও আমি মনে করি এটি কম্পিউটারের উপর নির্ভর করে: / আমি এখনই একটি অ্যাজার্টি ল্যাপটপে আছি।


আপনি যদি অনিবদ্ধ ঘোষণাগুলি গণনা করতে না চান, আপনাকে অ-মানক সংকলক পতাকাগুলির দৈর্ঘ্য অন্তর্ভুক্ত করতে হতে পারে। যদি না পুরানো সংকলকরা এতে ডিফল্ট ব্যবহার করে? সি উত্তরগুলি সাধারণত সংকলন করতে হয় -std=c89যেহেতু আধুনিক সংকলকগণ সিফল বা সি 11 এ ডিফল্ট হয় তবে এটি গণনা করার দরকার নেই। সুতরাং রায়টি কোড-গল্ফ মেটা থেকে কী হবে তা আমি নিশ্চিত নই।
পিটার

3

টিআই-বেসিক, 19 বাইট

প্রোগ্রাম: এস

If Ans
Disp Ans
getKey
prgmS
  • প্রবেশ করুন: 105,
  • বাম কী: 24,
  • ডান কী: 26,
  • ইনস [এআরটি] কিছুটা আলাদা কারণ এটি সাধারণত দুটি কী চাপতে পারে তবে এগুলি 21 এর পরে 23 হবে।

বাকি কীগুলির একটি চিত্র এখানে দেওয়া হয়েছে:

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা:

প্রোগ্রাম: এস সম্পাদক কোড বাদে শীর্ষে নামটি প্রদর্শন করে; নাম "এস"

If Ans    // If the last input isn't zero
Disp Ans  // Display the last input
getKey    // Input a key press
prgmS     // Call the same program in a recursive fashion

দুর্ভাগ্যক্রমে, এটি আর্নল্ড সি-তে করা সম্ভব নয়, তাই আমাকে টিআই-বেসিকের সাথে লেগে থাকতে হয়েছিল।


1
এটি কি ছবিতে প্রতিটি কি জন্য কাজ করে? কোনটি কী না হলে এটি ব্যর্থ হয়?

2
হ্যাঁ, এটি অন কন্ট্রোলার থেকে কোনও ব্যাটারি বের করে না রেখে প্রোগ্রামটি মারার জন্য সংরক্ষিত অন বোতাম ব্যতীত প্রতিটি কী-তে কাজ করে।
বেরাকুদা 13

@ বেরাকুদা 13: আমার কাছে সমান ক্যালকুলেটর রয়েছে যা আমি 18 বছর আগে কিনেছিলাম এবং বছরের পর বছর ধরে কী কী বিশদ বিবরণ জানতাম না। আমি বিশ্ববিদ্যালয়ের শেষ থেকেই এটি ব্যবহার করে আসছি (11 বছর আগে), তবে কে জানে ...
সার্জিওল

1

সি #, 144 + 601 = 745 বাইট

দুটি শ্রেণীর সমন্বয়ে, আমি তাদের সফলভাবে একটি শ্রেণিতে সংযুক্ত করতে পারিনি।

প্রধান শ্রেণি:

namespace System.Windows.Forms{class P:Form{static void Main(){Application.Run(new P());}P(){new Reflection.M().U+=k=>Console.Write(k.f+k.v);}}}

হুক শ্রেণি:

namespace System.Reflection{using Runtime.InteropServices;public class M{public delegate void d(s s);event d u;public event d U{add{if(h<1){j=m;h=SetWindowsHookEx(13,j,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);}u+=value;}remove{u-=value;}}public struct s{public int v;public int c;public int f;}[DllImport("user32.dll")]static extern int SetWindowsHookEx(int idHook,p lpfn,IntPtr hMod,int dwThreadId);delegate int p(int c,int w,IntPtr l);p j;int h;int m(int c,int w,IntPtr l){if(c>=0&u!=null&(w==257|w==261))u.Invoke((s)Marshal.PtrToStructure(l,typeof(s)));return -1;}}}

আউটপুট:

  • ট্যাব: 137
  • বিরাম: 147
  • প্রবেশ করান: 141
  • নুমপ্যাড প্রবেশ করুন: 142
  • বাম উইন্ডোজ: 220
  • ডান উইন্ডোজ: 221
  • প্রবেশ করান: 174
  • নুমপ্যাড sertোকান: 224

আমি পরিবর্তন করে একটু নিচে বাইট পেতে পারেন ||করতে |এবং অন্যান্য অনুরূপ golfs কিন্তু আমার মস্তিষ্কের যে করছেন পরে বিশ্রাম প্রয়োজন!
TheLethalCoder

হুক শ্রেণিতে, আমি মনে করি public int v;public int c;public int f;সংক্ষিপ্ত করা যেতে পারেpublic int v,c,f;
প্রশ্ন চিহ্ন


1

অটোহটকি , 26 বাইট

loop{
input,x,L1M
send %x%
}

পরীক্ষা করা যাবে না (কেবলমাত্র বিজয়ী), তবে M বিকল্পটি বলে

এম: কন্ট্রোল-জেড মাধ্যমে নিয়ন্ত্রণ-এ-র মতো পরিবর্তিত কী-স্ট্রোকগুলি আসল এএসসিআইআই অক্ষরের সাথে মিলে যদি স্বীকৃত হয় এবং প্রতিলিপি হয়।

সুতরাং এটি জরিমানা করা উচিত।


1

WinApi সি ( gcc ), 156 বাইট

#include <d3d.h>
#define b GetStdHandle(-10)
BYTE i[20];main(){SetConsoleMode(b,0);a:ReadConsoleInput(b,i,1,i+5);*i^1||*(i+4)||printf("%X\n",i[10]);goto a;}

এই প্রোগ্রামটি উইন্ডোজ ভার্চুয়াল-কোড কোডটি ইনপুটটির প্রতিটি কীবোর্ড কী দিয়ে সহায়তা করে। দ্য \nইনprintf বিন্যাস স্ট্রিং ঐচ্ছিক (কিন্তু আউটপুট মানুষের বান্ধব তোলে) এবং মোট স্কোর জন্য বাদ যাবে 154 বাইট । প্রোগ্রামটি হত্যা করার একটি সহজ উপায় (টাস্কগ্রাগার ছাড়াই) রয়েছে CTRL + PAUSE। আপনার যদি কোনও Fn কী সহ একটি কীবোর্ড থাকে তবে উইন্ডোজ দ্বারা এমনকি এটি নজরে না আসার কারণে এই প্রোগ্রামটি এটি তুলতে পারে না।

  • অ্যারের #include <d3d.h>জন্য কৌশল এবং অনুপ্রেরণার জন্য মুজবয়েসের উত্তরে কৃতিত্ব BYTE

স্থানীয় ভেরিয়েবল, পাঠযোগ্যতা এবং সংকলক সতর্কতা ছাড়াই প্রোগ্রামটি এরকম দেখাচ্ছে:

#include <windows.h>
#include <stdio.h>

int main(void)
{
    HANDLE conIn = GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD ir;
    DWORD useless;

    SetConsoleMode(conIn, 0);

    for(;;)
    {
        ReadConsoleInput(conIn, &ir, 1, &useless);

        if(ir.EventType == KEY_EVENT && !ir.Event.KeyEvent.bKeyDown)
            printf("%X\n", ir.Event.KeyEvent.wVirtualKeyCode);
    }

    return 0;
}

1

C (gcc) + Win32, 94 95 98 105 107 110 বাইট

#import"d3d.h"
j;f(){for(;;)for(j=191;j--;)GetAsyncKeyState(j)&(j<16||j>18)?printf("%d",j):0;}

ফোকাস হারিয়ে যাওয়ার পরেও কোড কীগুলি ক্যাপচার করে।

নীচের স্ক্রিনশটগুলি আরও printf("%d ",j);ভাল পঠনযোগ্যতার জন্য আউটপুটগুলির ( +1 বাইট) এর মধ্যে ফাঁকা স্থান যুক্ত রেকর্ড করা হয় :

কী স্ক্রিনশট

Left-ctrl Left-win Left-alt Space Right-alt Right-win Right-menu Right-ctrl Left-shift Z X C Right-shift Left-shift 1 2 3 Num 1 Num 2 Num 3 Left-shift +/= (on the main part) Num + Left-alt PrtScn

কোডটি GetAsyncKeyStateমেসেজের সারিটি পরীক্ষা না করে মূল স্থিতিকে জিজ্ঞাসা করতে ব্যবহার করে, সাধারণত অন্যান্য ব্যবহারকারী-মোড পদ্ধতির চেয়ে বেশি রিয়েল-টাইম (ডাইরেক্টইনপুট ব্যতীত)। কীলগারগুলিতে এই পদ্ধতিটি ব্যাপকভাবে ব্যবহৃত হয়।

(j<16||j>18)নিয়মিত সিটিআরএল / আল্ট / শিফ্ট ফিল্টার করে। অবস্থান নির্দিষ্ট করা ভিকে মান সহ বাম বা ডানদিকে যখনই চাপ দেওয়া হয় তখনই 16/17/18 ট্রিগার করা হয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.