0

こんばんは。質問が奇妙に思えるかもしれないので、私の問題を少し説明しましょう。複数の子フォームを開くことができるWindows Fromアプリケーションを構築しています。各子フォームには、FlashアニメーションをロードするWebBrowserコンポーネントが含まれています。

次に、開いたフォームのクリックを、他のフォームの上に表示されることなくシミュレートする必要があります。クリックをシミュレートするために、 https ://stackoverflow.com/a/11161632/533599と非常によく似たコードを使用しています:2つの変更を実装する必要がありました

  1. ハンドルチェーンに「MacromediaFlashPlayerActiveX」がないため、「InternetExplorer_Server」に停止する必要があります。
  2. クリックして起動するには、「ダブルにする」必要があります。つまり、マウスを下、上、下、上にします。

コードは非常にうまく機能し、クリックが発生しますが、クリックが発生するたびに、ターゲットのフォームがフォーカスを取得し、すべての兄弟の上にポップアップ表示されます(ただし、私が開いた他のすべてのウィンドウの後ろに留まります)。この動作を防ぐ方法はありますか?

4

1 に答える 1

0

現時点では、私は私が必要としているものと同様のことを何とかすることができました

[DllImportAttribute("user32.dll", EntryPoint = "SetForegroundWindow")]
[return: MarshalAsAttribute(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow([InAttribute()] IntPtr hWnd);

[DllImportAttribute("user32.dll", EntryPoint = "GetForegroundWindow")]
public static extern IntPtr GetForegroundWindow();

[DllImportAttribute("user32.dll", EntryPoint = "BringWindowToTop")]
[return: MarshalAsAttribute(UnmanagedType.Bool)]
public static extern bool BringWindowToTop([InAttribute()] IntPtr hWnd);

IntPtr old = GetForegroundWindow();
LeftClick(hw, x, y);
SetForegroundWindow(old);
BringWindowToTop(old);

欠点は、「クリックされた」フォームが1秒間ポップアップし、スタイル効果が悪くなることです。フォームをバックグラウンドで維持するのに役立つその他のヒントは大歓迎です:)

于 2012-11-12T19:22:19.927 に答える