2013-04-09 9 views
2

다른 응용 프로그램에서 제어하고자하는 WPF 응용 프로그램이 있습니다. 특정 컨트롤에 포커스를 설정하고 컨트롤 텍스트를 가져 와서 컨트롤에 텍스트/키를 보내는 것과 같은 기본적인 기능을 원합니다.다른 응용 프로그램에서 WPF 응용 프로그램을 제어하십시오.

이것이 가능합니까?

+1

_ 가능합니까? _ 시도해 봤습니까? –

+1

예, 가능합니다. –

+0

혼자서 시험해보고 나서 물어보십시오. – Luv

답변

4

예,이 가능하며 그렇게 사용할 수있는 다양한 방법이 있습니다. 둘 다 동일한 네트워크에 있으면 TCP 연결을 만들 수 있습니다. 둘 다 TCPlistener와 TCP 클라이언트가 필요합니다.

그러나 내가보기에 추천하는 것은 WCF입니다. WCF를 사용하면 여러분이 필요로하는 것을 할 수있을 것이며 (아마도 훨씬 더!), WCF 라이브러리에 충분히 익숙해 지려면 많은 독해가 필요합니다. 사물의 WCF 측면에 대한

  1. Efficient communication between two .Net applications

  2. Communication between two winform application using WCF?

  3. Communication between two WPF applications

, 아웃 라인 :

다음을보고 시작할 수 있습니다 당신의 것의 해야 할 일은 다음과 같습니다.

A. 참조와 동일한 URI를 사용하여 해당 생성자의 각 응용 프로그램에서 ServiceHost을 엽니 다. 두 응용 프로그램간에 통신 할 수있는 NetNamedPipeBinding이 열립니다.

예 :

public static ServiceHost OpenServiceHost<T, U>(T instance, string address) 
{ 
    ServiceHost host = new ServiceHost(instance, new Uri[] { new Uri(address) }); 
    ServiceBehaviorAttribute behaviour = host.Description.Behaviors.Find<ServiceBehaviorAttribute>(); 
    behaviour.InstanceContextMode = InstanceContextMode.Single; 
    host.AddServiceEndpoint(typeof(U), new NetNamedPipeBinding(), serviceEnd); 
    host.Open(); 
    return host; 
} 

B.는 해당 채널에 수신기를 만든다. 이것은 양방향 통신이 가능하도록 응용 프로그램에서 모두 수행 할 수 있습니다.

예 :

/// <summary> 
/// Method to create a listner on the subscribed channel. 
/// </summary> 
/// <typeparam name="T">The type of data to be passed.</typeparam> 
/// <param name="address">The base address to use for the WCF connection. 
/// An example being 'net.pipe://localhost' which will be appended by a service 
/// end keyword 'net.pipe://localhost/ServiceEnd'.</param> 
public static T AddListnerToServiceHost<T>(string address) 
{ 
    ChannelFactory<T> pipeFactory = 
     new ChannelFactory<T>(new NetNamedPipeBinding(), 
            new EndpointAddress(String.Format("{0}/{1}", 
                        address, 
                        serviceEnd))); 
    T pipeProxy = pipeFactory.CreateChannel(); 
    return pipeProxy; 
} 

C. 생성 및 두 응용 프로그램에서 사용하고 해당 클래스에서 상속되는 인터페이스를 제공합니다. 일부 IMyInterface.

일관된 코드 기반을 허용하기 위해 두 응용 프로그램에서 사용할 수있는 라이브러리를 설정할 수 있습니다. 이러한 라이브러리는 [더] 위의 두 가지 방법을 포함 할 것이며 같은 두 응용 프로그램에서 사용되는 : pipeProxyIMyInterface에서 상속 일부 클래스입니다

// Setup the WCF pipeline. 
public static IMyInterface pipeProxy { get; protected set;} 
ServiceHost host = UserCostServiceLibrary.Wcf 
    .OpenServiceHost<UserCostTsqlPipe, IMyInterface>(
     myClassInheritingFromIMyInterface, "net.pipe://localhost/YourAppName"); 
pipeProxy = UserCostServiceLibrary.Wcf.AddListnerToServiceHost<IMyInterface>("net.pipe://localhost/YourOtherAppName"); 

. 이렇게하면 두 응용 프로그램이 전달되는 내용을 알 수 있습니다 (어떤 경우에는 응용 프로그램이 인터페이스를 통해 사전 지정된 작업을 수행 할 수 있도록하기 위해 '프롬프트'가 표시됩니다). 참고로, 내가 이 아니고은 각 애플리케이션에 전화가 걸리는 방식을 보여 주며이를 직접 해결할 수 있습니다 ...

위 입력란에 빈 칸이 있지만 제공 한 모든 항목을 사용하면 필요한 것을 쉽게 처리 할 수 ​​있습니다.

나는이 도움이되기를 바랍니다.

관련 문제