मैं वह लड़का हूं जो थोड़ी देर पहले था asking about controlling Windows Media Player via Java. मैंने प्रगति की है, लेकिन मैंने एक परेशानी की समस्या को मारा है, इसलिए मैं मदद की तलाश में हूं।विंडोज मीडिया प्लेयर मुझे अनदेखा कर रहा है
मैंने सलाह दी कि मुझे पिछली बार 'राउंड और जैकब स्थापित किया गया था। मैं एक परीक्षण स्क्रिप्ट से बाहर इन पंक्तियों को अंजाम:
ActiveXComponent wmp = new ActiveXComponent("WMPlayer.OCX");
wmp.invoke("openPlayer", "http://somafm.com/wma128/groovesalad.asx");
... और wmp पॉप अप होता है, SomaFM खेल रहा है। "W00t!" मुझे लगता है। "मुझे यह हल हो गया है!"
सिवाय इसके कि जब मैं इस ऑब्जेक्ट के निर्माण के बाद बातचीत करता हूं, तो ऐसा लगता है कि डब्लूएमपी इंस्टेंस खेलने के साथ ऐसा कुछ नहीं है। जब मैं इस कोड को निष्पादित करें:
VOLUME: 50 VOLUME: 0
यह काफी अहानिकर लगता है, कि
- "50" की मात्रा को छोड़कर कुछ भी नहीं है:
ActiveXComponent wmpSettings = new ActiveXComponent(wmp.getProperty("settings").toDispatch()); System.out.println("VOLUME: " + wmpSettings.getProperty("volume")); wmpSettings.setProperty("volume", 0); System.out.println("VOLUME: " + wmpSettings.getProperty("volume"));
... मैं का उत्पादन मिलता है जहां खिलाड़ी वॉल्यूम वास्तव में सेट है और
- प्लेयर की मात्रानहीं हैवास्तव में सेटप्रोपर्टी कॉल के बाद बदल जाता है।
मैंने अन्य गुणों की भी कोशिश की है, लेकिन यह वही बात है: गुणों का मूल्य खिलाड़ी वास्तव में क्या कर रहा है उससे संबंधित प्रतीत नहीं होता है, और उन्हें बदलने के दौरान राज्य को बदलना प्रतीत होता है ऑब्जेक्ट का उपयोग किया जा रहा है, इसका वास्तविक प्लेयर पर कोई प्रभाव नहीं पड़ता है। (जब भी मैं स्क्रिप्ट चलाता हूं, तो मुझे सटीक वही आउटपुट मिलता है, इसलिए जब भी मैं "वॉल्यूम" को घुमाता हूं तो मैं बदल रहा हूं, इसमें कोड के बाहर कोई दृढ़ता नहीं है।)
स्पष्ट रूप से मैं ' मैं कुछ गलत कर रहा हूं, लेकिन मैं समझने की कोशिश कर रहा हूं कि क्या अंधा कर रहा है। क्या कोई मुझे भयानक होने में कोई अंतर्दृष्टि प्रदान कर सकता है, या मुझे आगे क्या करना चाहिए?
(नोट:।। मैं भी कुछ "WMPlayer.OCX" नहीं कर रहा हूँ सही इनपुट पैरामीटर है जब तक मैं इस एक पाया मैं रजिस्ट्री में HKEY_CLASSES_ROOT में होने की संभावना दिखने प्रविष्टियों के साथ प्रयोग)
मेरे धन्यवाद किसी भी मदद के लिए अग्रिम कोई भी पेशकश कर सकते हैं।
संपादित करें, 2009/04/15: मैं एक कंपनी ईज़ी JCom बुलाया से प्रसाद में एक WMP विशेष पैकेज नहीं मिला। यह उन तरीकों से असफल रहा जो मैं देख रहा था उससे पहले या तो यह सिर्फ जैकब के लिए एक रैपर है, या डब्ल्यूएमपी एक्टिवएक्स/कॉम इंटरफ़ेस सादा टूटा हुआ है। (रुको, मैंने "या तो" क्यों कहा?)
मैंने ग्राहक सेवा से बात की, और वे यह दिखाते हुए घायल हो गए कि वास्तव में उपयोगी होने के बिना आप कैसे सहायक हो सकते हैं। उन्होंने मुझे अपने डब्लूएमपी कोड के क्रियान्वयन के उदाहरण के रूप में प्रदान किए गए गैर-संकलन नमूना कोड को सही करने में मदद की, लेकिन जब मैंने उन्हें कुछ अंतर्दृष्टि के लिए परेशान किया कि कैसे/सेट वॉल्यूम विधियों को काम करना है, तो मुझे यह मिला:
"क्षमा करें, लेकिन यहां कोई डब्ल्यूएमपी गहराई से विशेषज्ञता उपलब्ध नहीं है - ईजेड जेकॉम जावा और डब्ल्यूएमपी जैसे अन्य कार्यक्रमों के बीच सिर्फ एक पुल निर्माता है।"
उनके पैकेज का ध्यान रखें, जिसका मूल्यांकन मैं वास्तव में" wmp.WindowsMediaPlayer "कहलाता था। क्या मुझे इसे काम करने के लिए मिला, तो मुझे लाइसेंस के लिए $ 600 को खोलने के लिए अपने मालिक से बात करनी पड़ी। एक चमत्कार यदि वे वास्तव में अपने स्वयं के उत्पाद के बारे में कुछ विशेषज्ञता था कि वे क्या आरोप था
तो, कोई वास्तविक प्रगति बस सोचा था कि मैं हिस्सा था
संपादित करें, 2009/04/20:।।। हाँ, मैं अभी भी इस पर जोर दे रहा हूं। मेरा वर्तमान ऑपरेटिंग सिद्धांत यह है कि वॉल्यूम सेटिंग्स को प्राप्त करने के लिए, मुझे डब्ल्यूएमपी रिमोट तक पहुंचने की आवश्यकता होगी ly। मैंने IWMPRemoteMediaServices और IServiceProvider इंटरफेस का उल्लेख देखा है, उत्तरार्द्ध की क्वेरी सेवा विधि पूर्व के लिए एक सूचक प्रदान करते हुए। दुर्भाग्यवश, मुझे कोई भाग्य नहीं है कि IServiceProvider को कैसे पकड़ें। मैंने उल्लेख किया है कि यह विंडोज़ "सिस्टम" ऑब्जेक्ट से सुलभ है, लेकिन मैं यह नहीं समझ सकता कि उस ऑब्जेक्ट को कैसे पकड़ें। (और चूंकि "सिस्टम" शब्द जावा में काफी भारी है, इसलिए Google मुझे एक हर्षित शोर दे रहा है: सिग्नल अनुपात।) अगर किसी के पास कोई सलाह है कि मैं System.dll का प्रतिनिधित्व करने वाले COM ऑब्जेक्ट पर हाथ कैसे रखूं, तो मुझे सुन।
संपादित करें, 2009/04/21: स्पष्टीकरण: यह एक XP सिस्टम पर है।
इसके अलावा: मेरा शोध यह सुझाव दे रहा है कि केवल डब्ल्यूएमपी ऑब्जेक्ट से बात करना अपर्याप्त है; आपको इससे अधिक कसकर लपेटने की ज़रूरत है ताकि वह वापस बात कर सके। बहुत सी सी ++ सामानों के साथ एक डब्लूएमपी एसडीके है, लेकिन ऐसा लगता है कि मेरे पास माइक्रोसॉफ्ट विजुअल सी ++ एक्सटेंशन पर कोड नहीं है जो मेरे पास नहीं है और वे मुफ्त में नहीं दे रहे हैं। (इसके अलावा, मैंने बारह वर्षों में सी ++ नहीं किया है।) मुझे पता है कि सी # के साथ यह संभव है, लेकिन अगर मैं जावा के बाहर जा रहा हूं, तो मुझे एक स्टैंडअलोन निष्पादन योग्य होने का समाधान चाहिए और .NET इंस्टॉल नहीं है प्रासंगिक मशीनें
संपादित करें, 2009/04/22: प्रति नीचे मार्क का जवाब, मैं WinUser.h से बाहर APPCOMMAND_MEDIA_ खोदा * स्थिरांक और निम्नलिखित कोड है, जो NativeCall API का उपयोग करता कोशिश की:
final int APPCOMMAND_MEDIA_PLAY = 46;
final int APPCOMMAND_MEDIA_PAUSE = 47;
NativeCall.init();
IntCall findWindow = new IntCall("user32", "FindWindowA");
int wmpHandle = findWindow.executeCall(new Object[] { null, "Windows Media Player" });
System.out.println("wmpHandle: " + wmpHandle);
System.out.println("Find Window Error? " + findWindow.getLastError());
IntCall sendMessage = new IntCall("user32", "SendMessageA");
int playResult = sendMessage.executeCall(new Object[] { wmpHandle, APPCOMMAND_MEDIA_PLAY, 0, 0 });
System.out.println("Play Result: " + playResult);
System.out.println("Play Error? " + sendMessage.getLastError());
try { Thread.sleep(5000); } catch (Exception e) {}
int pauseResult = sendMessage.executeCall(new Object[] { wmpHandle, APPCOMMAND_MEDIA_PAUSE, 0, 0 });
System.out.println("Pause Result: " + pauseResult);
System.out.println("PauseError? " + sendMessage.getLastError());
यह मैं का एक परिणाम देता है:
wmpHandle: 1640048 Find Window Error? null Play Result: -1 Play Error? null Pause Result: -1 PauseError? null
... लेकिन वास्तव में मीडिया प्लेयर को प्रभावित नहीं करता।
मैंने इसे APPCOMMAND_MEDIA_PLAY_PAUSE (14) के साथ भी आजमाया है, जो अलग-अलग रिटर्न मान देता है (20) लेकिन कुछ भी नहीं करता है।
एफडब्ल्यूआईडब्ल्यू, मुझे वास्तव में एक व्यवहार्य विकल्प होने के लिए व्यक्तिगत प्ले/PAUSE आदेशों को काम करने की आवश्यकता है; बस राज्य को अंधाधुंध करने से मेरी मदद नहीं होती है क्योंकि मुझे नहीं पता कि जब खिलाड़ी शुरू होता है तो खिलाड़ी किस स्थिति में होता है।
क्या किसी के पास कोई भी सलाह है कि मैं क्या गलत कर रहा हूं या मैं और क्या कोशिश कर सकता हूं?
खैर मेरे पास वास्तव में आपकी समस्या का कहना कुछ भी नहीं है बस आप का समर्थन करना चाहते हैं। – User
मुझे बहुत खेद है, आप वास्तव में निराश लगते हैं और मैं समझ सकता हूं क्यों। तो इच्छा है कि मैं मदद कर सकता हूं, लेकिन मुझे इसमें कोई अनुभव नहीं है। बस मुझे लगा कि मुझे थोड़ा नैतिक समर्थन देने की ज़रूरत है, भले ही इसमें मेरा इनपुट लगभग बेकार है। आशा है कि आप इसे पिछले कर लेंगे! –
मैं आप दोनों के लिए धन्यवाद; आपके समर्थन की सराहना की है। :-) – BlairHippo