02 Ago 2019

c# findwindow 예제

책을 쓸 때에는, 보통 스크린샷이 가능한 최대 사이즈가 있습니다. 예제 프로그램을 해당 크기로 쉽게 설정할 수 있도록 이 프로그램을 작성했습니다. 최근에 데스크톱 응용 프로그램에서 몇 가지 낮은 수준의 UI 자동화를 수행하기 위해 C # P / 호출 메커니즘으로 작업했습니다. 지정된 컨트롤 창의 경우 모든 자식 컨트롤 창의 핸들을 가져오는 도우미 기능이 필요했습니다. 예를 들어 아래 이미지에서 더미 WinForm 응용 프로그램이 있습니다. 양식에는 4개의 자식 창이 있습니다(패널 컨트롤이 색칠되어 볼 수 있음). Spy++ 도구는 WinForm의 핸들이 611150이고 네 자식의 핸들이 111142, 121112, 1210CA 및 1C104C임을 보여줍니다. 콘솔 앱은 프로그래밍 방식으로 자식을 얻는 결과를 보여줍니다. 이 메서드는 부모 요소에서 모든 자식 요소를 가져옵니다.: 예를 들어 창(부모)에서 텍스트 상자(자식)의 핸들을 얻을 수 있습니다. 예를 들어(SetWindowText() 함수는 창 제목을 사용자 지정 텍스트로 변경합니다. 다음은 GetProcessesByName: 다음 프로그램은 SetWindowPos를 사용하여 대상의 크기와 위치를 설정하는 방법의 작은 예입니다.

창의 크기 모드가 크기와 일치하지 않으면 이상한 부작용이 있을 수 있습니다. 예를 들어 창이 최대화되고 크기를 화면보다 작은 크기로 설정하면 제목 표시줄이 가장자리 주위에 약간 엉망으로 보입니다. 이 튜토리얼에서 나는 메모장에 몇 가지 텍스트를 보내드립니다 - 그것은 단지 예이지만,이 방법은 모든 프로그램에 대해 작동합니다. 기본적으로 프로세스에서 창의 핸들을 얻은 다음 FindWindowEx를 사용하여 자녀의 핸들 (텍스트 상자)을 가져옵니다. 마지막으로 해당 자식에게 텍스트를 보냅니다. 특히 FindWindoEx에서 자식 핸들을 찾기 시작할 위치를 알려주는 두 번째 매개 변수입니다. 호출 코드는 다음과 같습니다 : 시스템의 모든 프로세스를 반복하고 각 프로세스를 연구하여 원하는 프로세스를 알아낼 수 있습니다. 불행히도 Windows는 다른 응용 프로그램에 대한 많은 정보 나 제어를 제공하지 않으므로 현실적으로 할 수있는 것이 제한됩니다.

WinAPI는 개체 지향 라이브러리가 아닙니다. 따라서 "개체"(예: 창 및 기타)에 숫자 식별자를 사용합니다. 모든 창에는 시스템에서 실수로 생성되는 고유한 숫자 식별자(핸들)가 있습니다. 이 식별자는 hWnd(창 핸들)이며 특정 긴 값(또는 .NET에서 해당하는 값, IntPtr 값)을 나타냅니다. 이 식별자는 닫히고 새 창이 만들어지때까지 창의 모든 수명 동안 변경되지 않습니다. 이 프로그램은 플래그를 설정하지 않지만 필요한 경우에 대비하여 여기에 플래그를 포함시켰습니다. 원하지 않는 경우 SetWindowPos의 마지막 매개 변수를 형식 uint로 정의한 다음 값 0을 전달할 수 있습니다. .

Dim ntPtr Dim ceroIntPtr 로 새로운 IntPtr (0) Dim Wnd_name as string Wnd_name= "일부 앱 이름" nWnd = FindWindow (없음, Wnd_name) `정보를 표시하면 nWnd.Equals(ceroIntPtr) 다음 MsgBox("앱 실행되지 않음") Else MsgBox("실행 중인 경우" 3단계) 원하는 창에 파인더 도구. 도구를 드래그하면 창 세부 정보가 대화 상자에 표시됩니다. (핸들, 캡션(창 이름), 클래스 이름) 안전하지 않은네이티브 메서드.GetWindowText(hwnd, 문자열 빌더, 문자열 빌더.용량); 밖으로 입력은 autoitx를 사용하여 클래스에 의해 제목을 잡아 다음 그 후 원하는 경우 는 새로운 제목을 제공합니다. 이 프로그램은 FindWindow를 사용하여 대상 응용 프로그램의 핸들을 찾습니다. 대상 응용 프로그램의 창 제목을 정확히 입력하는 경우에만 작동합니다. 공개 공유 읽기만 속성 hwnd_DesktopIcons IntPtr 반환 findWindowEx (IntPtr.Zero, IntPtr.Zero, "Progman", vbNullString) 끝 속성 공용 읽기만 속성 hwnd_StartBar 로 끝 속성 읽기[Shell_traywnd], vbNullString) 끝 끝 속성 공용 공유 readOnly 속성 hwnd_StartBarOrb IntPtr 반환 findWindow ("단추", vbNullString) 끝 끝 속성 클래스 Getit 공개 공유 함수 by_ClassName (문자열로 ByVal 값) try ClassName = 값 Return FindWindow (ClassName, vbNull) catch ex 로 예외 반환 vbNull 끝 시도 공용 공유 함수 by_windowName (문자열로 ByVal 값) try WindowName = 값 반환 FindWindow (vbNull, WindowName) catch ex 예외 반환 vbNull 끝 시도 End Function public shared function by_windowNameAndClassName (byVal v_ClassName 문자열, byVal v_Window Name 문자열) try ClassName = v_ClassName Window = v_WindowName 반환 findWindow (ClassName, WindowName) catch ex 예외 반환 vbNull End try end Function byChildHandle(ByVal v_childHandle as intPtr) try childHandle = v_ChildHandle 반환 findWindowEx(IntPtr.Zero, childHandle, vbNullString, vbNullString) catch ex 예외 반환 vbNull 끝 시도 끝 함수 공공 공유 기능 byPa