2012-01-27 2 views
0

현재 다른 별도의 응용 프로그램 테스트에 도움이되는 응용 프로그램을 만들고 있습니다. 둘 다 VB.NET에서 작성되었습니다. 내 테스터 앱이 다른 애플리케이션의 양식에 정보를 입력 할 수있게하려고합니다. 필자는 두 응용 프로그램에 익숙하므로 필자는 테스트 응용 프로그램에서 수행하고자하는 양식에 대한 이름과 모든 것을 알고 있습니다. 내 문제는, 테스터 애플리케이션에 대한 코드에서이 형식을 실제로 참조 할 수있는 핸들 또는 무언가를 얻으려면 testee 양식의이 정보를 사용하는 방법이 필요하다는 것입니다.특정 양식을 찾고 참조하는 방법은 무엇입니까? (VB.NET)

어떻게하면이 양식을 얻을 수 있습니까? 나는 그것을 통해 반복해야하기 때문에 정말 행복하지 않다조차 그러나

Dim iTunesID as intptr 
    for each process as process in process.getprocesses 
if proc.mainwindowtitle = "iTunes" then iTunesID = proc.MainwindowHandle 
next 

: 비슷한는 프로세스의 메인 윈도우의 핸들을 얻고 있지만, 한 내 경험은이 작업을 수행하여 조금 더 쉬웠다 모든 프로세스. 심지어이 경우에는 내 특정 창을 참조하는 방법을 알지 못합니다.이 경우에는 주 창이 아니기 때문입니다. 이 작업을 수행하는 방법을 찾으려고 시도했지만 내 검색이 너무 모호합니다.이 작업을 수행하는 데 어떤 방법을 사용할 수 있는지 알지 못하기 때문에 생각합니다.

내 첫 번째 생각은 위와 비슷하지만 "forms.form의 각 양식에 대해"forms.formsrunning ' "과 같은 형식을 사용하지만 실행중인 양식을 얻는 명령을 모르는 경우도 있습니다. 아마 하나를 찾을 수있을 것 같아서 모든 프로세스/양식을 반복하는 것보다 나은 해결책을 찾고 있습니다.

미리 도움 주셔서 감사합니다. :)

+0

을 당신은 별도의 프로세스에서 테스터를 유지하여이 천 배는 더 복잡하고 있습니다.그냥 하지마. –

+0

응용 프로그램 외부의 양식에 대한 참조를 얻기가 어렵습니까? 테스트 응용 프로그램을 변경하지 않기를 원하기 때문에 동일한 응용 프로그램에서 사용하고 싶지 않습니다. (다른 질문에 대한 답을 얻었으므로 테스트하려는 프로그램이 다소 민감하다는 것을 알고있을 수 있습니다. ..) – user1167662

+0

@HansPassant^이것을 잊어 버렸습니다. – user1167662

답변

0

시간이 있다면 Hawkeye 소스 (http://hawkeye.codeplex.com/)를 살펴보십시오 이것은 실행중인 .Net 응용 프로그램에 연결하여 변경하는 opensource 유틸리티입니다 속성 값, 호출 방법 등 ...

Hawkeye는 실제로 실행중인 응용 프로그램에 포인트 앤 클릭 동작을 연결합니다.

기존 프로세스의 루프를 사용하여 실행중인 응용 프로그램을 찾은 다음 Hawkeye 소스 코드의 노하우를 사용하여이 응용 프로그램에 연결하고 값 변경, 메서드 호출 등을 시작할 수 있습니다.

내가 제대로 귀하의 질문에 다음과 같은거야 경우
1

, 다음 VB.NET 코드 조각이 도움이 될 수 있습니다

Dim procNameSought As String = "Notepad2" 

' 
' Use LINQ to get the Process ID for the Application whose window should 
' be brought into focus if you don't already have the Process ID... 
' 
Dim processID As Integer = (From proc As Process In Process.GetProcesses 
          Where proc.ProcessName.Trim() = procNameSought 
          Select proc.Id).FirstOrDefault() 

' 
' Use AppActivate to bring the Main Window for the Process into Focus.... 
' 
Microsoft.VisualBasic.AppActivate(processID) 

응용 프로그램의 메인 윈도우는 예를 들어, 작업 표시 줄, (최소화되어 있지 않은 경우, 메인 윈도우가 다른 응용 프로그램에 의해 숨겨 짐), foreg에 이 나타납니다. 라운드하고 초점을했습니다. 그러나 프로세스의 주 창 이 작업 표시 줄에 최소화 된 경우에는 PInvoke를 사용하여 Windows API 함수 SetActiveWindow (http://msdn.microsoft.com/en-us/library/ms939986.aspx)을 호출해야 할 수도 있습니다. 당신이 할 수있는, 당신이 포커스를 설정하려는 윈도우 핸들의 인스턴스를 지정해야합니다) (SetActiveWindow을 사용하기 위해 Correct way (in .NET) to switch the focus to another application

:

caeasy의 설명은 여기에서이 작업을 수행하는 방법에 대한 하나의 접근 방식을 커버 다음 호출을 통해 얻은 :

나는이 도움과 관심이었다 희망
' 
' 32-Bit Window Handle : You may need to change this over to Int64 if 
' you're running on a 64-Bit OS... 
' 
Dim windowHandle As Int32 = (From proc As Process In Process.GetProcesses 
          Where proc.ProcessName.Trim() = procNameSought 
          Select proc.MainWindowHandle).FirstOrDefault() 

Dim winHandlePtr As New IntPtr(windowHandle) 

...

관련 문제