2014-10-01 3 views
0

다른 실행중인 응용 프로그램의 텍스트 상자에서 텍스트를 복사하는 응용 프로그램을 사용하고 있습니다. coredll.dll을 사용하여이 작업을 수행합니다. 하지만 문제는 복사해야하는 텍스트를 반환하기 위해 실행중인 응용 프로그램의 mainMenu를 클릭해야한다는 것입니다. 어떻게 coredll.dll을 사용하여 특정 메인 메뉴에서 핸들을 얻을 수 있습니까? 나는 원격 스파이 ++를 사용하여 핸들러를 보았지만 어느 것이 그 것인지 구분할 수 없다. 핸들러에는 텍스트 상자 및 레이블과 같은 컨트롤에 대한 핸들러가 포함되어 있으며 메인 메인에는 사용할 수 없습니다. 나는 창문 CE C#에서 초보자입니다.coredll.dll을 사용하여 특정 메인 메뉴를 처리하는 방법

고마워요 :)

답변

1

나는이 P/원용을 많이 필요로하는 것처럼, 어떤 C# 코드를 준비하지 않지만, 당신은 윈도우 CE에 외국 응용 프로그램을 '자동'하는 방법에 대한 아이디어를 제공하기 위해/Mobile은 https://code.google.com/p/rdp-auto-login/source/browse/trunk/rdp-auto-login/tscDialog.cpp?r=20에있는 tscDialog.cpp를 살펴보십시오.

tscDialog.cpp는 Windows Mobile에서 Remote Desktop Mobile (RDM) 대화 상자를 확인하고 변경하는 코드입니다. 그러나 메뉴가 외부 창의 윈도우 계층 구조의 일부가 아니고 데스크탑의 일부이기 때문에 Windows Mobile에서 외부 윈도우의 메뉴를 처리하지 못할 수도 있습니다 (Windows CE에서 작동 할 수도 있음).

tscdialog.cpp를 보면 scanTscWindow 함수를 찾을 수 있습니다. 이 도구는 RDM의 모든 창 요소를 열거하여 나중에 자동화 된 로그인 (디버그 및 개발 중에 사용됨)을위한 요소를 파악합니다.

RDM 대화 상자를 채우고 변경 한 후 연결 메뉴 항목에서 클릭을 수행해야합니다. 이것은 마우스 클릭을 시뮬레이션하여() 함수 starTSC로 수행됩니다

    //Solution two with mouse_event, click at 13,306. The 13 comes from the assumption that hight of 
        //menu bar is 26 pixel and I want to click in the mid 
        //this solution does work as keyb_event does work 
        //  normalized coordinates: 
        //  (0,0) = upper left corner 
        //  (0xFFFF,0xFFFF) = lower right corner 
        DWORD dX = (0xFFFF/iScreenWidth) * (80); // changed from 13 to width=240, 1/3=80 
        DWORD dY = (0xFFFF/iScreenHeight) * (iScreenHeight - 13); 
        DEBUGMSG(1, (L"mouse click at: %u, %u\n", dX * 0xFFFFFFFF/240, dY * 0xFFFFFFFF/320)); 
        //SetForegroundWindow(hTscDialog); //dont mess with windows z-order 

        //this will make a cursor visible 
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, dX, dY, 0, 0); 
        Sleep(5); 
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, dX, dY, 0, 0); 
        Sleep(30); 
        /* 
        //this is what happens, if you tap the screen 
        mouse_event(MOUSEEVENTF_TOUCH | MOUSEEVENTF_LEFTDOWN, dX, dY, 0, 0); 
        mouse_event(MOUSEEVENTF_TOUCH | MOUSEEVENTF_LEFTUP, dX, dY, 0, 0); 
        //Sleep(3000); 
        */ 

은 오른쪽 창 핸들 et Wi ndow Te xt는를 사용할 필요가 윈도우 (또는 입력 필드)의 텍스트를 얻으려면.

그래서 메뉴를 실행하는 가장 간단한 방법은 메뉴에서 마우스 클릭을 시뮬레이션하는 것입니다.

내가 사용하십시오 windos 가전/모바일 장치 zDump라는 http://www.codeproject.com/Articles/9549/Capturing-Window-Controls-and-Modifying-their-prop의 수정 된 버전 (작은 화면)에 창에 면밀한 관찰을 얻으려면 : http://www.hjgode.de/wp/2009/06/11/zdump-take-a-look-inside-windows-ce/

당신은 그것을 메뉴 핸들을 얻을 불가능하다고 볼 수 있습니다 외국 창문. AFAIK에는 외부 프로세스를위한 방법이 없습니다. 가능하면 DLL을 삽입하고 외부 프로세스 내에서 실행되는 코드로 창 핸들을 가져올 수 있습니다.

관련 문제