我沒有任何的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並通過在外部進程中運行的代碼來獲取窗口句柄。