0

Visual C# フォームには、特定のボタンが押されたときに空白の新しい Microsoft ドキュメントを作成する機能が含まれています。ユーザーがこのボタンをクリックすると、新しい Microsoft ドキュメントが既に作成されているかどうかを確認し、新しい単語を作成する前にアクティブ化する必要があります。したがって、一度に 1 つのドキュメントが開かれます。

以下のコードを使用してこれを達成しようとしています:-

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool  IsWindow(IntPtr hWnd);

これは bool を返します。出力を確認する方法がわかりません。確認するパラメータと対応する構文は何ですか?発生する可能性がある問題は、ユーザーがメモ帳を開くことができ、これがアクティブ化ウィンドウになることです。通常、新しいドキュメントが作成されるときのデフォルト名は Document1 ですが、ユーザーは名前を保存して変更するオプションがあります。

4

2 に答える 2

1

IsWindowあなたが望むものにはあまり役に立ちません(hWndウィンドウのハンドルはありません)。FindWindowの方がはるかに役立ちます。しかし問題は、それ (および他の同等の WinAPI 呼び出し) が指定されたウィンドウの名前を引数として取り、MS Word の場合、これがドキュメントの名前であることです (あなたが知らないと思います)。

シンプルで信頼性の高いアプローチは、実行中のプロセスを調べることです。

System.Diagnostics.Process[] Procs = System.Diagnostics.Process.GetProcessesByName("winword");
if (Procs.Length >= 1)
{
    //There is an opened Word document
} 
于 2013-11-05T19:07:03.930 に答える
0

プロセスチェック実行中のプロセスを確認し、ハンドルIDを取得できます。

System.Diagnostics.Process

Process[] allProcesses = Process.GetProcesses();
processName = <Todo: check process_name in the array for word document>
Regex r = WildcardToRegex(processName);

matching = allProcesses.Where((p) =>
            {
                try
                {
                    return r.IsMatch(p.MainModule.FileName);
                }
                catch
                {
                    return false;
                }
            }).Select((p) => p.Id);

process_name と Process ID を見つけたら、新しいプロセス (この場合は WordDocument) が実行されているかどうかを確認できます。

于 2013-11-05T19:03:25.487 に答える