2012-07-16 7 views
15

FindWindow()SetForegroundWindow()を使用して、別のアプリケーションに切り替える旧バージョンのUser32.dllの代替品を探しています。FindWindowとSetForegroundWindowの代替?

私はProcess.GetProcessesByName()の使い方で最初のものを見つけましたが、そのアプリケーションに切り替える(アクティブ/フォアグラウンドを設定する)対応する方法はありません。

で古いの方法を使用せずにこれを行う方法はありますか?

ありがとうございました。それは私が探していた答えではありませんが、

EDIT

私は@Sorceriの答えを受け入れました。

+2

? Windows OSは、Win32サブシステム内のフォアグラウンドウィンドウを追跡します。だから、あなたは '/ user32.dll'を呼び出すだけです。 –

+0

@MichaelGraczyk:または、少なくとも、私たちは安全に... :) –

+1

Windowsデスクトップでは、Windows CE上で 'user32.dll'を使用する必要があります。私は' coredll.dll'を使用する必要があります。したがって、 'DLLImport'を使用すると常に間違っている静的依存関係を追加することが示されます。 – fdomig

答えて

27

回答:いいえ

しかし、ここであなたがしなければならないものだのC#からそれをウィンドウを見つけるために探して、次wondererを支援し、活性化する:フロントにメモ帳を持って

[DllImport("user32.dll")] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

void ActivateApp(string processName) 
{ 
    Process[] p = Process.GetProcessesByName(processName); 

    // Activate the first application we find with this name 
    if (p.Count() > 0) 
     SetForegroundWindow(p[0].MainWindowHandle); 
} 

、たとえば、あなたが呼び出します:サイドノートとして

ActivateApp("notepad"); 

を - のwiを持参しようとしているあなたの人々のためにアプリケーション内のをフォアグラウンドにすると、Activate() methodが呼び出されます。

+0

SendKeys.SendWait(「{ENTER}」);私のアプリケーションが実際にキーストロークに反応するならば、無言ではありませんか? – HanH1113

+0

SendWaitのドキュメントには、動作しているかどうかがわかります。 – noelicus

+0

私はマシンのために本当に奇妙見つけた、私はそれを試してみたし、奇妙なことは、それが時々動作することです。問題はいつもコンピュータが私たちに伝えていることです。必ずしも私たちが望むものではありません。私はブランドに新しい質問をしなければならないかもしれません。 – HanH1113

1

System.Diagnostics.Process Objectは、FindWindowに相当するものとして使用できます。現在、SetForegroundWindowに相当するものはありません。あなたはSetForgroundWindowでPinvokeを使いたいでしょう。

[DllImport("user32.dll")] 
static extern bool SetForegroundWindow(IntPtr hWnd); 
+1

私はまだ後のすべてのuser32.dllのに対処しなければならないことを意味はどれですか?それは何の選択肢が存在しないことを何らかの形で奇妙に聞こえるん...私は、所望のプロセスを起動するには、このメソッドを使用して、私が使用して実行可能にできるよう後 – fdomig

3

あなたはSetForeGroundWindowの代替としてSetActiveWindowを使用することができます。私はあなたがすべてのWindows Manipulation Api Functionsを通過して、あなたが欠けているものがあるかどうかを見てみましょう。

また、System.Diagnostics.ProcessオブジェクトのハンドルはProcess.Handleプロパティで取得できることに注意してください。

2

SetForeGroundWindowに代わるものではVisualBasicの者:AppActivateの

である、それはVisualBasicや名前空間にあるという理由だけで、この

Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle") 

のようにそれを呼び出すことは、あなたがC#でそれを使用することはできませんという意味ではありません。

フル・ドキュメンテーション `SetForegroundWindow`を使用してと間違って何here