ホームページ >バックエンド開発 >C++ >メモ帳などのバックグラウンド アプリケーションにキーを確実に送信するにはどうすればよいですか?

メモ帳などのバックグラウンド アプリケーションにキーを確実に送信するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 08:43:41926ブラウズ

How Can I Reliably Send Keys to a Background Application Like Notepad?

バックグラウンド アプリケーションへのキーの送信

提供されたコードは、「k」キーをメモ帳に送信しようとしますが、問題が発生します。これを解決するには、コードのいくつかの側面に対処する必要があります。

正しいプロセス処理:

コードは、メモ帳がすでに実行されていることを前提としています。これを正確に処理するには、

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();

を使用して最初の Notepad プロセスを取得する必要があります。Notepad が現在実行されていない場合は、次を使用して開始できます:

Process p = Process.Start("notepad.exe");

Bring Notepad前景へ:

メモ帳プロセスを作成したら、そのメイン ウィンドウをフォアグラウンド:

IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);

入力の安定を待機中:

キーを送信する前に、アプリケーションが入力ループを安定させるのを待つ必要があります:

p.WaitForInputIdle();

キーを送信:

最後に、必要なキーを送信できます:

SendKeys.SendWait("k");

管理者権限に関する考えられる問題:

メモ帳が管理者として実行されており、アプリケーションが管理者として実行されていない場合は、注意が必要です。この方法は機能しない可能性があります。

修正済みコード:

必要な修正を組み込んだ変更されたコードは次のとおりです:

[DllImport("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
if (p != null)
{
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    SendKeys.SendWait("k");
}
else
{
    p = Process.Start("notepad.exe");
    p.WaitForInputIdle();
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    SendKeys.SendWait("k");
}

以上がメモ帳などのバックグラウンド アプリケーションにキーを確実に送信するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。