2009-07-16 16 views
5

है तो यह पता लगाने की कोशिश कर रहा हूं कि कोई EXE एक WPF ऐप या WinForms ऐप है या नहीं। इस बारे में कोई सुझाव है कि मैं इसके बारे में कैसे जा सकता हूं?यदि कोई EXE WPF

मैंने सुना है कि मैं परावर्तक उपकरण का उपयोग कर सकता हूं, यदि ऐसा है तो यह कैसे किया जाएगा?

धन्यवाद।

+0

मैं यह भी जानना चाहते हैं ... – kevchadders

उत्तर

6

हालांकि आम तौर पर एक एप्लिकेशन को 'या तो' एक WPF या WinForms एप्लिकेशन के रूप में वर्गीकृत किया जा सकता है, अंतःक्रियाशीलता संभव है कि WinForms ऐप WPF नियंत्रणों को होस्ट कर सकता है और इसके विपरीत। चूंकि आपका एप्लिकेशन लगता है जैसे यह असेंबली के दोनों सेटों का संदर्भ देता है, यह दोनों का उपयोग कर सकता है। बस ऐसा कुछ जिसके बारे में अवगत होना चाहिए।

वैसे भी, मैं सिर्फ अपनी WPF परियोजनाओं में से एक परावर्तक में खोल दिया है और कुछ स्पष्ट संकेत है कि यह एक WPF अनुप्रयोग है कर रहे हैं:

1) एक App वर्ग एक StartupUri जो एक है कि नहीं है Xaml फ़ाइल (इस तरह)

public class App : System.Windows.Application 
{ 
    // Methods 
    [DebuggerNonUserCode] 
    public void InitializeComponent() 
    { 
     base.StartupUri = new Uri("Window1.xaml", UriKind.Relative); 
    } 

2) एक XamlGeneratedNamespace EXE में है

+०१२३५१६४१०६१

3) संसाधन 'फ़ोल्डर' में .baml फ़ाइलें हैं (शायद <Application1>.g.resources के भीतर)।

4) खिड़की वर्गों (यदि आप उन्हें आसानी से परावर्तक पेड़ में पा सकते हैं) को लागू:

public class Window1 : System.Windows.Window 
, System.Windows.Markup.IComponentConnector { 

तुम सच में विस्तार से परावर्तक के माध्यम से ट्राउल चाहते हैं, WinForms खिड़कियों System.Windows.Forms.Form तो आप कर सकते हैं से प्राप्त कर लेंगे आसानी से स्पॉट करें यदि आपके पास WinForms और WPF दोनों हैं।

2

इसे परावर्तक के साथ खोलें और देखें कि क्या यह प्रस्तुति फ़्रेमवर्क डीएलएल (फिर यह संभवतः WPF) या System.Windows.Forms.dll का संदर्भ देता है। ध्यान दें कि एप्लिकेशन दोनों संदर्भ दे सकते हैं - उस स्थिति में, आप वास्तव में नहीं बता सकते हैं।

शायद एप्लिकेशन को देखने से यह आसान है। मानक नियंत्रण के साथ भी WPF अनुप्रयोगों को चिकनी प्रदान की जाती है।

+0

हाँ अगर दोनों रूप में उल्लेख PresentationFramework और System.Windows.Forms कारण मैंने इस प्रश्न से पूछा है क्योंकि मेरे काम ने मुझे यह दिखाने के लिए एक मॉकअप ऐप बनाने के लिए कहा है कि हम अपने ऐप के आधार पर क्या कर सकते हैं (कोई कार्यक्षमता नहीं) जो हम पहले से उपयोग करते हैं (जो लगता है WPF होने के लिए)। इस ऐप में रिबन नियंत्रण और रोलअप मेनू नियंत्रण भी लगता है। यह बहुत चिकनी है। – JamesM

+0

बस एक और विचार था, जो वास्तव में मूल प्रश्न का उत्तर नहीं है। आप ऐप शुरू कर सकते हैं और विंडोज यूआई ऑटोमेशन (विंडोज एसडीके के साथ आपूर्ति की गई यूआईएसपीआई) के साथ इसकी जांच कर सकते हैं और सामान्य WPF सुविधाओं की तलाश कर सकते हैं। लेकिन, वैसे भी, अब क्रेग ने आपको एक अच्छा समाधान दिया है जो संभवतः अधिकांश परिस्थितियों में काम करेगा, जब तक उपयोगकर्ता ने ऐप को छिपाने के लिए कुछ नहीं बनाया (या यह एक विरासत ऐप है जिसे एसडब्ल्यूएफ से डब्ल्यूपीएफ में पोर्ट किया जा रहा है)। – OregonGhost

1

आम तौर पर एक मृत दे दिया जाता है कि डब्ल्यूपीएफ अनुप्रयोगों में बटन या सूची बॉक्स जैसे केंद्रित वस्तुओं पर एक अलग दिखने वाला फोकस आयताकार होता है। मानक विंडोज फोकस आयत 1px चौड़ा है और डब्ल्यूपीएफ ऐप्स पर ऐसा लगता है कि यह अलग दिखता है ... अलग।

इसके अलावा, WPF ऐप्स मेमोरी बिटमैप्स में अधिकांश तत्व प्रस्तुत करते हैं जब भी उन्हें किसी प्रकार की एनीमेशन करने की आवश्यकता होती है और इसके परिणामस्वरूप "फ़ज़ी" होता है, जब भी विशेष एनीमेशन होता है और स्क्रीन पर प्रदर्शित होता है तो लगभग एनालिटिज्ड लुक होता है। यह प्रभाव क्लिक करने के बाद मेनू हाइलाइट्स, स्क्रॉलिंग या सामान्य बटन टेक्स्ट जैसी चीजों में देखा जाता है।

3

आप कोड के साथ .exe देख सकते हैं, आपको परावर्तक की आवश्यकता नहीं है।

बस .exe असेंबली में एक प्रकार का पता लगाएं जो System.Windows.Aplication क्लास से प्राप्त होता है जो प्रेजेंटेशनफ्रेमवर्क डीएल से है (आप इसे प्रतिबिंब के साथ कर सकते हैं)।

अब, यह 100% निश्चित विधि नहीं है, क्योंकि सैद्धांतिक रूप से कोई भी कक्षा बना सकता है जो wpf एप्लिकेशन क्लास से विरासत में आता है, और तब ऐप शुरू नहीं करता है। निश्चित रूप से प्रतिबिंबक में जांचना है यदि उस वर्ग 'रन() विधि को बुलाया जाता है।

और कार्यक्रम संबंधी तरीका अगर वर्तमान आवेदन में जो अपने कोड चल रहा है एक WPF अनुप्रयोग है की जाँच करने के इस तरह है:

public static bool IsWpfApplication 
{ 
    get { return System.Windows.Application.Current != null; } 
} 
संबंधित मुद्दे