LocalSystem 서비스 (CreateProcessAsuser를 통해)에서 스폰 된 GUI 앱은 초점이 없습니다.

StackOverflow https://stackoverflow.com/questions/860428

문제

특정 사용자의 데스크탑에 일종의 스플래시 화면을 표시하고 해당 사용자가 로그인 한 경우에만 (Kiosk User) 서비스를 작성했습니다.

일단 유효한 코드를 입력 한 스플래시 화면은 서비스에 서비스에 x 시간 동안 잠을 자고 (코드에 따라) 서비스에 잠들 것입니다.

스플래시 화면은 단순히 끊습니다. 이제 서비스가 깨어날 때 스플래시가 더 이상 존재하지 않아서 시작하십시오.

이 모든 것이 작동합니다. 유일한 문제는 시작된 응용 프로그램에 초점이 없다는 것입니다. 즉, 메모장에서 작업 중이고 시간이 다가 오면 스플래시 화면이 메모장 뒤에 표시됩니다 (전체 화면).

Windows Vista에 대해서만 걱정해야합니다. Win32 확장을 사용하여 Python으로 코딩하고 있지만이 문제는 LocalSystem 계정에서 호출 될 때 CreateProcessaser에 있다고 생각합니다.


업데이트:

'문제'는 실제로 내와 같은 '자극적'응용 프로그램이 초점을 훔치는 것을 막기위한 의도적 인 제한입니다.

win32gui.systemparametersinfo (win32con.spi_setforegroundlocktimeout, 0, 0)를 설정하여 동작을 변경할 수 있습니다. 레지스트리 값을 임시로 설정하는 것과 동등한 ky_current_user 제어 패널 데스크톱 foregroundlocktimeout 사용자 자체로 수행해야합니다. 출시중인 앱에서 시작하려는 앱을위한 헬프 헬퍼를 구축합니다.

그러나 응용 프로그램은 지금 내가 기억하지 못하는 API 호출을 사용하여 초점을 도난당하는 것을 막기를 원할 수 있습니다.

아마도 좋은 솔루션은 현재 해당 사용자의 모든 창 핸들을 찾은 다음 각 핸들을 사용하여 win32gui.showwindow (handle, command)를 사용하여 최소화하는 것입니다.

이 특정 문제에 대해서는 잠금 타임 아웃 설정으로 충분했습니다.

누구든지 내가 서비스에서 데스크탑에 응용 프로그램을 시작하는 방법을 궁금해한다면 다음은 다음과 같습니다. 코드 링크.

도움이 되었습니까?

해결책 2

매우 합법적 인 여러 가지 이유로 Microsoft는 서비스를 앱을 시작하고 초점을 훔치는 것을 보지 못했지만 다음과 같은 작업이 여전히 내가 원하는 것을 달성하기위한 작업을 발견했습니다.

원래 의도는 스플래시 화면과 같은 패스 코드로 응용 프로그램과 같은 키오스크를 방해하는 것입니다. 8 문자 코드를 입력하면 정의 된 패스 코드에서와 같이 스플래시 화면을 기간 동안 닫습니다. 원래 사용할 실제 응용 프로그램은 AutosTart 폴더에서 시작되었습니다.

그러나 이제 서비스에서 시작되었다는 사실을 다시 작성했습니다.이 방법으로 프로그램을 숨기고 스플래시 화면을 시작하는 서비스에서 헬퍼 응용 프로그램을 시작하여 스플래시 화면을 종료하면 프로그램이 다음으로 반환됩니다. 이전 상태.

다른 팁

서비스에서 자신의 프로세스를 시작하여 초점을 맞추는 지 확인해 보셨습니까? 메모장처럼 브라우저에서 초점을 훔친 지 확인하십시오. 그렇다면 아마도 시작될 때 초점을 되 찾을 수있는 프로그램 일 것입니다.

나는 그렇지 않으면 beilive startupinfo struct의 wshowwindow 속성입니다. 또한 nshowwindow를 사용하려면 dwflags에서 startf_useshowwindow가 필요합니다. 값은 내가 생각하는 SW_SHOW이어야하며, 다른 시도를 원한다면 ShowWindow 기능에 나열되어 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top