가상 컴퓨터 (XP SP3/.NET3.5/VS 2008)로 프로그래밍 방식으로 RDP (자격 증명이 .rdp 파일에 저장 됨) 및 UI 자동화 테스트를 수행해야합니다. 도메인 보안 때문에 대화 형 로그온에 프로그래밍 방식으로 '확인'해야합니다. 로그인 후에 다른 대화 창 및 SendMessages에 액세스 할 수 있지만이 초기 화면에서 SendMessage를 사용할 수 없습니다. 나는 spy ++를 사용하여 enter 키를 누를 때 실제로 무엇이 보내지는지 파악하고 내 프로그램을 실행할 때 spy ++ 로그의 응답을 볼 때 해당 메시지를 복제 할 수있는 것처럼 보이지만 메시지에서 어떤 변형이 사용 되더라도 아무 일도 일어나지 않습니다 . 프로그래밍 방식으로이를 수행 할 수 있는지 또는 OS가 보안 문제로 인해 이런 종류의 자동화를 방지하는지 알고 싶습니다.프로그래밍 방식의 RDP 로그인 및 SendMessage
WM_KEYDOWN nVirtKey:00FF cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 Up:0
WM_KEYUP nVirtKey:00FF cRepeat:1 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:1 Up:1
나는 아래의 코드를 행사하고 보내는 메시지를 볼 때 :
내가 입력 버튼을 쳤을 때 나는 ++ 스파이에 표시되는 메시지 나는 볼 (즉, 초기 화면에 아무 키나 할 것 같다) IHWindowClass (아래 hwnd6) 나는 그 창에 위 메시지를 생성하는 것을 본다. 어떤 도움을 주시면 감사하겠습니다! 여기
코드의 관련 부분은 다음과 같습니다'UIntPtr ip = new UIntPtr(0x0D); //ENTER
UIntPtr ip2 = new UIntPtr(0xFF); //00FF
UIntPtr kyDwnlParam = new UIntPtr(0x001);
UIntPtr kyUplParam = new UIntPtr(0xc0000001);
// used UISpy to get these class names...
string lpszParentClass = "TscShellContainerClass";
string lpszParentWindow = "test2 - test2 - Remote Desktop Connection";
string lpszClass2 = "TscShellAxHostClass";
string lpszClass3 = "ATL:2D33D580";
string lpszClass4 = "UIMainClass";
string lpszClass5 = "UIContainerClass";
string lpszClass6 = "IHWindowClass";
hWnd2 = FindWindowEx(ParenthWnd, IntPtr.Zero, lpszClass2, IntPtr.Zero);
hWnd3 = FindWindowEx(hWnd2, IntPtr.Zero, lpszClass3, IntPtr.Zero);
hWnd4 = FindWindowEx(hWnd3, IntPtr.Zero, lpszClass4, IntPtr.Zero);
hWnd5 = FindWindowEx(hWnd4, IntPtr.Zero, lpszClass5, IntPtr.Zero);
hWnd6 = FindWindowEx(hWnd5, IntPtr.Zero, lpszClass6, IntPtr.Zero);
string hexValue = hWnd6.ToString("X"); //Convert to hex to use find in spy++
SetForegroundWindow(hWnd6); // for good measure....
// tried this....
SendMessage(hWnd6, (uint)WindowsUtilities.WindowsMessages.WM_KEYDOWN, ip2, kyDwnlParam);
SendMessage(hWnd6, (uint)WindowsUtilities.WindowsMessages.WM_KEYUP, ip2, kyUplParam);
// tried this....
SendMessage(hWnd6, (uint)WindowsUtilities.WindowsMessages.WM_KEYDOWN, ip, kyDwnlParam);
SendMessage(hWnd6, (uint)WindowsUtilities.WindowsMessages.WM_KEYUP, ip, kyUplParam);
// tried this...
SendMessage(hWnd6, (uint)WindowsUtilities.WindowsMessages.WM_CHAR, ip, UIntPtr.Zero);
SendMessage(hWnd6, (uint)WindowsUtilities.WindowsMessages.WM_CHAR, ip, UIntPtr.Zero);'