> 백엔드 개발 > C++ > 메모장과 같은 백그라운드 애플리케이션에 키를 안정적으로 보낼 수 있는 방법은 무엇입니까?

메모장과 같은 백그라운드 애플리케이션에 키를 안정적으로 보낼 수 있는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-05 08:43:41
원래의
951명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿