2011-08-05 5 views
1

.net에서 실행중인 응용 프로그램에 대한 참조를 얻는데 성공했으며 그 참조를 클릭 할 수있었습니다. 버튼.버튼을 클릭 할 수 있도록 다른 프로그램의 대화 상자에 대한 참조를 얻으려면 어떻게해야합니까?

이것은 참조를 가져 와서 사용하는 코드입니다.

string name = WindowsIdentity.GetCurrent().Name.Split('\\')[1]; 
testAssembly = Assembly.LoadFrom(FindFile("BuildWellnessFile.exe", "C:\\Users\\" + name + "\\AppData\\Local\\Apps\\2.0\\")); 
Type t = testAssembly.GetType("BuildWellnessFile.Form1"); 
testForm = (Form)testAssembly.CreateInstance(t.FullName); 
ThreadPool.QueueUserWorkItem(new WaitCallback(RunApp), testForm); 

object[] p = { this, new EventArgs() }; 
InvokeMethod(testForm, "CountButton_Click", p); 

이 코드에게 InvokeMethod 다른 응용 프로그램에서 버튼을 클릭하는 데 사용되는이 후

Assembly testAssembly = null; 
Form testForm = null; 

static void RunApp(object state) 
{ 
Application.Run((Form)state); 
} 

private void InvokeMethod(Form form, string methodName, params object[] parms) 
{ 
EventHandler eh = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler),form,methodName); 
    if (eh != null) 
    { 
    form.Invoke(eh, parms); 
    } 
} 

을 지원하고, 대화 상자가 나타납니다. 나는 OK를 누를 수 있도록 그 대화 상자에 대한 참조를 얻고 싶다.

다른 응용 프로그램을 자동화하는 것에 대한 모범 사례는 언급하지 말고 그냥 완료 해달라고 요청합니다.

UPDATE : 여기 은 다른 응용 프로그램에서 당신은 아마 대화 상자에서 해당 버튼에 BM_CLICK 메시지를 보내 P/호출을 사용해야합니다 대화 상자

Interaction.MsgBox(" active cards in list created at: ", MsgBoxStyle.OkOnly, Nothing) 
+0

입니다. 스페이스 바를 눌러 이벤트를 에뮬레이트 할 수 있습니다. – agibalov

+0

실행중인 컴퓨터가 대화 상자의 포커스를 보장하지 않습니다. 대화 상자에 대한 참조를 얻는 방법을 알아야합니다. – Paul

+1

그래서 다른 응용 프로그램과 프로그래밍 방식으로 상호 작용하는 일반적인 방법 인 Window UI Automation을 사용하는 데 관심이 없습니다 (주로 내게 필요한 옵션 지원에 사용됨). –

답변

관련 문제