首頁 >後端開發 >C++ >如何可靠地將金鑰傳送到記事本等後台應用程式?

如何可靠地將金鑰傳送到記事本等後台應用程式?

Susan Sarandon
Susan Sarandon原創
2025-01-05 08:43:41925瀏覽

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

將金鑰傳送到後台應用程式

提供的程式碼嘗試將「k」鍵傳送到記事本,但遇到問題。要解決此問題,需要解決程式碼的幾個方面問題。

正確的進程處理:

程式碼假定記事本已在運作。為了準確地處理這個問題,您應該使用以下命令來取得第一個記事本進程:

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

如果記事本目前未運行,您可以使用以下命令啟動它:

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

帶記事本到前台:

一旦你有了記事本進程,你需要將其主視窗帶到前台:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn