2009-07-16 18 views
5

EXEがWPFアプリケーションかWinFormsアプリケーションかどうかを調べようとしています。どのように私はこれについて行くことができるかに関する任意の提案?EXEがWPFかどうかを確認する方法

反射鏡ツールを使用できると聞いたことがありますが、もしそうなら、どうすればいいですか?

ありがとうございました。

+0

私もこのことを知りたいのですが... – kevchadders

答えて

6

一般に、アプリケーションは「どちらか一方のWPFまたはWinFormsアプリケーション」として分類できますが、WinFormsアプリケーションはWPFコントロールを「ホスト」することができ、その逆も可能です。あなたのアプリケーションは両方のアセンブリのセットを参照するように聞こえるので、の両方を使用することができます。知っているだけのこと。

とにかく、私はちょうどリフレクターの私のWPFプロジェクトの一つを開いたし、それがWPFアプリケーションのいくつかの明白な兆候がある:あるStartupUriを持ってAppクラスがあり

1) (このような)Xamlファイル

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

2)EXE

XamlGeneratedNamespaceがあります

3)のリソース 'フォルダ'には、.baml個のファイル(おそらく<Application1>.g.resourcesの範囲内)があります。

4)ウィンドウクラス(あなたはリフレクターツリーに簡単にそれらを見つけることができるかどうか)を実装:あなたが本当に詳細にリフレクターを通じてトロールしたい場合は

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

は、WinFormsのウィンドウがSystem.Windows.Forms.Formそうすることができますから継承しますあなたがを持っていれば簡単に見つけることができます。 WinFormsとWPFがそこにあります。

2

リフレクタで開き、PresentationFramework DLLの1つ(WPFの可能性が高い)またはSystem.Windows.Forms.dllのいずれかを参照するかどうかを確認します。アプリケーションは両方を参照する可能性があることに注意してください。その場合、実際には理解できません。

アプリケーションを見るだけで簡単かもしれません。 WPFアプリケーションは、標準コントロールでもスムーズにレンダリングされます。

+0

はい参照PresentationFramework両方の場合System.Windows.Forms 私はこの問題を尋ねたのは、私の仕事が、私たちがすでに使用しているアプリに基づいてクライアントに何ができるのかを示すモックアップアプリケーションを作成するように依頼したからですWPFとする)。このアプリは、リボンコントロールとロールアップメニューコントロールを持っているようです。非常に滑らかです。 – JamesM

+0

ちょっと別のアイデアがありましたが、元の質問には本当に答えはありません。あなたは、Windows UIオートメーション(Windows SDKに付属のUISpy)を使ってアプリケーションを起動し、それを調べて、典型的なWPF機能を探すことができます。しかし、とにかく、現在CraigDは、ユーザーがアプリを偽装するために何かを作っていない限り(またはSWFからWPFに移植されている従来のアプリケーション)、ほとんどの状況でうまくいく可能性のある優れたソリューションを提供しています。 – OregonGhost

1

一般的には、WPFアプリケーションでは、ボタンやリストボックスなどのフォーカスされたアイテムに異なるフォーカス矩形が表示される傾向があります。標準のWindowsフォーカス矩形は1ピクセル幅で、WPFアプリケーションでは見た目が異なるようです。

また、WPFアプリケーションは、ある種のアニメーションを実行する必要があるときはいつも、ほとんどの要素をメモリビットマップにレンダリングします。その結果、特定のアニメーションが実行され画面上に表示されるたびにアニメーション表示されます。このエフェクトは、メニューのハイライト、スクロール、またはクリックした後の一般的なボタンテキストなどに気付きます。

3

コードで.exeを確認することができます。反射板は必要ありません。

PresentationFramework DLLからのSystem.Windows.Applicationクラスを継承する.exeアセンブリの型を見つけるだけです(リフレクションで行うことができます)。

理論的に誰かがwpf Applicationクラスから継承したクラスを作成してから、アプリケーションを起動できないため、これは100%確実な方法ではありません。明確な方法は、そのクラスのRun()メソッドが呼び出された場合、Reflectorをチェックインすることです。

そして、あなたのコードが実行されている現在のアプリケーションは、WPFアプリであるかどうかを確認するためのプログラムの方法は、このようなものです:

public static bool IsWpfApplication 
{ 
    get { return System.Windows.Application.Current != null; } 
} 
関連する問題