2012-10-01 9 views
7

दो भाग सवाल:कैद मैक एक Chrome एक्सटेंशन में मीडिया पर नियंत्रण कुंजी

  1. वहाँ कब्जा करने के लिए मीडिया एक मैक कीबोर्ड पर प्लेबैक नियंत्रण कुंजी (पिछले, चलाएं/रोकें (के दबाव पर प्रतिक्रिया) एक रास्ता है , अगला) सख्ती से जावास्क्रिप्ट का उपयोग कर Google क्रोम एक्सटेंशन में?
  2. if (answerToQuestion1 === "no")native plugin (सी/सी ++) के किसी प्रकार का उपयोग करके ऐसा करने का कोई तरीका है?

मुझे पता है कि यह संभव होना चाहिए, क्योंकि Unity Music Media Keys ऐसा करता है (हालांकि मुझे पता है कि वे मूल प्लगइन का उपयोग कर रहे हैं)।

क्या मैं अब तक this plugin है, जो वह कुछ भी दावा है, लेकिन वास्तव FunctionFlip आवश्यकता चाबियाँ समारोह चाबियाँ के रूप में कार्य करने के लिए, और एफ 7, F8, और के दबाव के प्रति प्रतिक्रिया करता है देखा है एफ 8

उत्तर

8

1 - नहीं = [

2 - वाह - पवित्र बकवास। मैंने पहले इस एक्सटेंशन को नहीं देखा था, इसलिए इसके लिए धन्यवाद। मैंने इसे थोड़ा सा खोला, और ऐसा लगता है कि वे ओएसएक्स पर एक .plugin और विंडोज़ समर्थन के लिए एक डीएल स्थापित करते हैं।

डिकंपील्ड प्लगइन केवल कुछ सौ लाइनें - https://gist.github.com/3849247 है।

वे सीधे मीडिया कुंजी (ओएस एक्स पर) प्लग करने के तरीके के रूप में https://github.com/nevyn/SPMediaKeyTap का उपयोग कर रहे हैं। वे रिले कर रहे हैं कि स्थानीय सॉकेट.ओ सर्वर ब्राउज़र के माध्यम से पोर्ट 12345 पर चल रहा है, और प्लगइन उस पर निकाली गई घटनाओं के लिए सुन रहा है।

supppper neat।

संपादित करें: यह अब natively supported in chrome

+0

+1 सहायता के लिए धन्यवाद। मैं निश्चित रूप से इन में देख रहा हूँ। – Whymarrh

3

अंततः मैं पूरा करने के लिए क्या मैं पर हो रही थी कामयाब रहे है। अंतिम क्रोम एक्सटेंशन GitHub पर देखा जा सकता है।

यह कैसे काम करता है?

जिस एक्सटेंशन को मैंने मूल रूप से लिंक किया था, वह वास्तव में फ़ंक्शन कुंजियों के लिए "फ़्लिप" होना आवश्यक था और विशेष उद्देश्य नहीं था, लेकिन ऐसा करने के लिए विशेष कार्यों को करने के लिए अतिरिक्त कीस्ट्रोक की आवश्यकता होती है (जैसे कुंजीपटल बैकलाइट्स को नियंत्रित करना , मात्रा, आदि)।

Patrick's answer से बहुत मदद के साथ

, मैं nevyn/SPMediaKeyTap से अंशों का इस्तेमाल किया उन्हें विस्तार करने पर आग विस्तार और libwebsockets बाहर कुंजी दबाव कब्जा करने के लिए:

- (void) handleKeyCode: (int) kcode withKeyState: (int) kstate 
{ 
    if (kstate) { 
     return; // keydown 
    } 
    // keyup 
    int len = 1; 
    unsigned char data[LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING]; 
    data[LWS_SEND_BUFFER_PRE_PADDING] = kcode; 
    for (int i = 0; i < num_clients; i++) { 
     libwebsocket_write(clients[i], &data[LWS_SEND_BUFFER_PRE_PADDING], len, LWS_WRITE_TEXT); 
     NSLog(@"Sent %d", kcode); 
    } 
} 

अंदर क्रोम, विस्तार बस उपयुक्त टुकड़ा इंजेक्शन मेजबान पृष्ठ में जेएस का:

this.onmessage = function (message) { 
    var keyCode = message.data.charCodeAt(0); 
    if (keyCode === 20) { 
     inject(function() { 
      window.R.player.previous(); 
     }); 
    } 
    if (keyCode === 16) { 
     inject(function() { 
      window.R.player.playPause(); 
     }); 
    } 
    if (keyCode === 19) { 
     inject(function() { 
      window.R.player.next(); 
     }); 
    } 
}; 
संबंधित मुद्दे