2011-02-03 2 views
3

서비스 응용 프로그램을 vcl 응용 프로그램과 통신해야합니다. 내 오래된 응용 프로그램은 콘솔이었고 콘솔은 vcl 응용 프로그램과 아무런 문제없이 통신합니다. 이제 콘솔 앱을 srv 앱으로 마이그레이션합니다. 이전 통신에서는 FindWindow 및 SendMessage를 사용했습니다.서비스 응용 프로그램에서 FindWindow()를 사용하는 방법?

내가 소켓 또는 명명 된 파이프를 사용하여 통신을 수행 할 수 있다는 것을 알고 있지만, 구조를 변경하고 싶지는 않습니다. 마이그레이션이 지연 될 것이기 때문입니다.

어떻게하면 "수정"할 수 있는지 아는 사람이 있습니까?

TKS

답변

8
를 FindWindow는 Vista 또는 Win7에의 서비스에서 작동하지 않습니다

, 서비스는 사용자 응용 프로그램과는 다른 데스크톱에서 실행되기 때문에; 윈도우 핸들을 얻을 수 없으므로 SendMessage도 마찬가지입니다. 즉, 이러한 OS 버전을 지원할 경우 다른 통신 수단을 사용해야합니다.

+0

+1 실제로, 당신은 창 핸들을 얻을 수 있습니다, 당신은 다른 세션에서 그것으로 무엇이든 할 수 있습니다 !! 그러나 그것은 단지 pedantry 다! –

+0

동의. 그것은 단지 pedantry입니다.

+0

좋아요, 인터넷에서이 내용을 읽었지만 동의합니다. 동작을 변경해야합니다. –

1

ControlService가 SendMessage 대신 작동합니까? 나는 당신이 당신의 기존 구조를 그것을 통과시킬 수 있어야한다고 생각합니다.

http://www.delphigroups.info/3/10/156645.html

+0

'ControlService()'는 서비스에 매개 변수를 보낼 수 없으므로 데이터를 전달해야하는 경우 적절하지 않습니다. –

1

당신은 그것을 해결할 수 없습니다. 이제 서비스가 사용자의 데스크톱에 액세스하지 않고 다른 세션에서 실행됩니다. 솔루션은 명명 된 파이프입니다.

관련 문제