私のアプリケーションにはメインフォームがありません。初期化はProgram.Main()で行われ、Application.Run()が呼び出されます。ダイアログを表示して閉じると、Win32 GetForegroundWindow()はそのウィンドウを返します。
ユーザーは、彼らが自分のアプリケーションで次のようにトリガーキーボードショートカットを押して別のアプリケーションである:
- は私のフォームをインスタンス化します。
- フォームを表示します。
- win32 API GetForegroundWindow()を呼び出して、どのウィンドウがアクティブであるかを調べます。
- いくつかのことをしてください。
- コールform.Close()
- 設定フォーム= nullを
私は数回の上に実行することができ、すべてが順調です。しかし、私のアプリケーションがいつでもMessageBox()を呼び出すと、その後のすべてのGetForegroundWindow()の呼び出しは、現在のフォーカスが別のアプリケーションにある場合でも閉じられたフォームを返します。これは、CredUIPromptForCredentials()がユーザーにログインとパスワードの入力を求めた場合にも発生します。 ProcessInfo.GetActiveProcess()の呼び出しは、フォーカスを持つ他のアプリではなく、自分のプロセスを返します。
私は間違っていると思いますか?私のアプリからフォーカスを削除するために呼び出すことができるものがありますか? SetForeGroundWindowの逆の種類ですか?
EDIT 1
それは実際に非モーダルフォーム、ないダイアログです。私はフォームを表示する引数なしでShow()を使用しています。 Close()の後にDispose()を呼び出してみましたが、動作は同じです。私は自分のフォームにShow()を呼び出さないと、このアプリケーションが正しく動作することを確認しました。フォームには、タイトルを変更する以外はVS2010で作成したときのデフォルト値がすべてあります。フォームにはラベルが1つしかありません。 Form.Closeからドキュメント当たり
これは何が起こっているのですか? – user957902
Windows 7 64ビット –