2010-09-16 26 views
5

क्या प्रिंटर संलग्न है या सी ++ में एलपीटी 1 से संचार करने के लिए विंडोज़ (जो विंडोज सीई में काम करता है) में कोई तरीका है?जांच कर रहा है कि कोई प्रिंटर संलग्न है


[संपादित करें] और जानकारी:

वर्तमान में हम एक सामान्य Windows CE प्रिंटर ड्राइवर के साथ काम कर रहे हैं - pcl.dll - यह CreateDC में पास करके, प्रिंटर के लिए डीसी को पाने के लिए।

हम PrintDlg() कॉल कर सकते हैं नहीं प्रिंट संवाद को दिखाने के लिए है क्योंकि यह है "बहुत जटिल की तलाश में," लेकिन हम भी PD_RETURNDEFAULT से कॉल करने की नहीं कर सकते क्योंकि हम डिफ़ॉल्ट प्रिंटर का उपयोग नहीं करना चाहते हैं। इसलिए, हम CreateDC में पास करने के लिए मैन्युअल रूप से DEVMODE संरचना सेट अप कर रहे हैं।

के बाद हम डीसी है, हम GetDeviceCaps() फोन (जैसे पेज-चौड़ाई, आदि) प्रिंटर के लिए जानकारी प्राप्त करने के लिए, तो StartPage()/EndPage()/ExtTextOut() मुद्रित करने के लिए।

हालांकि, अगर कोई प्रिंटर संलग्न नहीं है, तो प्रोग्राम "निरस्त/पुनः प्रयास/विफल" देने से पहले लगभग एक मिनट तक जमा हो जाता है? संवाद (मुझे नहीं पता कि इस प्रक्रिया में यह किस बिंदु पर ठंडा है)। अन्य सॉफ्टवेयर फ्रीज नहीं है जब आप प्रिंट करने का प्रयास है, इसलिए वहां इसे रोकने का एक तरीका होना चाहिए ...

+0

"संलग्न" परिभाषित करें। – mkb

+0

@Matt: यदि मैं, यह 60 सेकंड के लिए कार्यक्रम स्थिर नहीं होता तो दे (एक PrintDlg दिखाए बिना) कुछ मुद्रित करने के लिए प्रयास करने के लिए थे "LPT1 संलग्न नहीं; बीच में बंद करें, पुन: प्रयास करें, असफल?" –

+0

"एलपीटी 1" क्या है? एक सच्चा समांतर बंदरगाह, या एक यूएसबी पोर्ट (सीई में एक यूएसबी प्रिंटर "एलपीटी 1:" के रूप में घुड़सवार होगा)? – ctacke

उत्तर

2

पर काम करता है, मैं उपकरणों को समेकित करने की भी सिफारिश करता हूं, लेकिन आप यह देखने के लिए निम्न फ़ंक्शंस को आजमा सकते हैं कि यह जल्दी और गर्व से लटका हुआ है (मेरे पास वर्तमान में इसका परीक्षण करने का कोई तरीका नहीं है ...):

CreateFile("LPT1:", 0, 0, NULL, OPEN_EXISTING, ...); 
DeviceIOControl(HANDLE, IOCTL_PARALLEL_STATUS, ...); 

यह संभव है कि यह डीसी के साथ प्रिंट करने की कोशिश करने से बेहतर विफलता देता है। यदि यह काम करता है, तो प्रिंटिंग के लिए अपना डीसी खोलने से पहले हैंडल पर CloseHandle() को कॉल करने के लिए मत भूलना।

+0

'IOCTL_PARALLEL_STATUS' कहां परिभाषित किया गया है? मुझे यह प्रतीत नहीं होता है (यह विंडोज सीई में मौजूद नहीं हो सकता है ...) –

+1

क्या आप अन्य IOCTL_PARALLEL को परिभाषित करने में सक्षम थे? यह लंबे समय से रहा है क्योंकि मैंने विंडोज सीई के साथ काम किया है। इस MSDN लेख (http://msdn.microsoft.com/en-us/library/aa463071.aspx) सूचित करते हैं कि CreateFile समारोह तो विफल रहता है चालक प्रिंटर से संचार नहीं कर सकते लगता है, तो आप की जरूरत नहीं हो सकती है एक डिवाइस IOControl कॉल आज़माएं। –

+0

अच्छा, बहुत आसान और चाल है - आपके बक्षीस पर बधाई! –

2

यदि यह एक USB प्रिंटर आप USB प्रिंटर वर्ग चालक रजिस्ट्री प्रविष्टि पर दिखाई दे सकता है यह देखने के लिए है आगे बढ़ने से पहले प्लग इन।

3

जब आप विंडोज़ में प्रिंटर के साथ काम करते हैं तो आपको वास्तव में सीधे बंदरगाह के साथ काम नहीं करना चाहिए, लेकिन प्रिंटर ड्राइवर इंटरफ़ेस के माध्यम से। यह ब्रांड और बंदरगाह के बावजूद, सभी प्रिंटर के लिए एक टूलबॉक्स जो संवाद करने के बारे में जानकारी देता है और आपको एक टूलबॉक्स देता है।

विंडोज एपीआई आपको ड्राइवर से अतिरिक्त जानकारी निकालने के लिए कई संभावनाएं देता है। मेरे 14 साल के प्रिंटर विकास के दौरान, माइक्रोसॉफ्ट ने कभी भी समृद्ध प्रिंटर स्थिति के लिए समर्थन नहीं जोड़ा है (हालांकि मुझे नहीं पता कि उन्होंने विंडोज 7 में इसे बदल दिया है या नहीं)। हम, कई अन्य प्रिंटर डेवलपर्स को एप्लिकेशन को अधिक जानकारी प्रस्तुत करने के लिए प्रिंटर ड्राइवर का विस्तार करना पड़ा।

यदि आपके पास विंडोज सीई ड्राइवर है तो आपको अपने प्रिंटर डेवलपर से पूछना चाहिए। मुझे यकीन नहीं है कि समानांतर प्रिंटर में प्लग/इन करते समय DEVICE_CHANGE संदेश उत्पन्न होता है या नहीं। यह यूएसबी प्रिंटर के लिए करता है (रजिस्ट्री में गड़बड़ करने की कोई ज़रूरत नहीं है)।

आप मुद्रण सबसिस्टम के बारे में अधिक पढ़ सकते हैं here

+0

प्रश्न संपादित देखें। –

0

मैं अगर आप उपयोग कर रहे हैं नेट कोड में कामयाब रहे या नहीं पता नहीं है, लेकिन यहाँ (कैसे VB.NET का उपयोग कर एलपीटी बंदरगाहों का उपयोग करने पर एक लिंक है जो C++ .NET प्रबंधित में परिवर्तित किया जा सकता है): http://support.microsoft.com/default.aspx?scid=kb;en-us;823179

आशा है कि इससे मदद मिलती है!

+0

वैसे यह इस अर्थ में मदद करता है कि यह गलत समस्या का समाधान है, गलत भाषा में और गलत ऑपरेटिंग सिस्टम के लिए। –

2

क्या आपने विंडोज सीई पोर्ट मॉनीटर फ़ंक्शंस का उपयोग करने का प्रयास किया था? http://msdn.microsoft.com/en-us/library/ms893529.aspx

+0

वह दस्तावेज है, ओह, अविश्वसनीय रूप से कमी है। क्या आपके पास कोई उदाहरण कोड है? (* सहित जहां * इन कार्यों परिभाषित कर रहे हैं - सबसे नया प्रलेखन कहते हैं 'Prnport.h', लेकिन उस फ़ाइल मौजूद नहीं है) –

+0

क्षमा करें, मैं केवल आप की तरह देखते हैं कि http://msdn.microsoft.com पर नवीनतम प्रलेखन /en-US/library/ee486971.aspx भी Prnport.h को संदर्भित करता है। – Danra

2

एक संभावना enumerate devices है और जांचें कि क्या आपके डिवाइस की गणना की जा रही है।यकीन नहीं है कि यह WinCE

संबंधित मुद्दे