2014-10-01 89 views
0

我正在使用從另一個正在運行的應用程序的文本框中複製文本的應用程序。我通過使用coredll.dll來做到這一點。 但問題是運行的應用程序的mainMenu應該點擊以返回一個我需要複製的文本。我怎樣才能得到使用coredll.dll的特定mainmenu的句柄?我用遠程Spy ++查看處理程序,但我不能區分哪一個。處理程序只包含用於控件的處理程序,如文本框和標籤,而不包含mainmenus。 我是一個在工作Windows CE c#的新手。c#如何使用coredll.dll來處理特定主菜單

感謝很多:)

回答

1

我沒有任何的C#代碼準備好了,因爲這將需要大量的P /所調用的,而是讓你如何「自動」在Windows 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上的遠程桌面移動(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); 
        */ 

爲了得到一個窗口(或輸入字段)的文本,你必須使用GetWindowText時用正確的窗口句柄。

所以執行菜單最簡單的方法是模擬鼠標點擊菜單。

要獲得在Windows中的WINDOS CE /移動設備我使用的http://www.codeproject.com/Articles/9549/Capturing-Window-Controls-and-Modifying-their-prop修改後的版本(較小的屏幕)呼籲zDump上仔細一看:http://www.hjgode.de/wp/2009/06/11/zdump-take-a-look-inside-windows-ce/

你會看到,這是不可能拿到的菜單句柄的外國窗口。 AFAIK無法進行外部處理。可能可以注入一個DLL並通過在外部進程中運行的代碼來獲取窗口句柄。