これには多くの p/invokes が必要になるため、C# コードの準備はできていませんが、Windows CE/Mobile で外部アプリを「自動化」する方法については、 https:/の tscDialog.cpp を参照してください。 /code.google.com/p/rdp-auto-login/source/browse/trunk/rdp-auto-login/tscDialog.cpp?r=20 .
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 ce/モバイル デバイスのウィンドウを詳しく見るために、http://www.codeproject.com/Articles/9549/Capturing-Window-Controls-and-Modifying-theirの修正版 (小さい画面) を使用します。 -zDumpと呼ばれるプロップ: http://www.hjgode.de/wp/2009/06/11/zdump-take-a-look-inside-windows-ce/
外部ウィンドウのメニュー ハンドルを取得することは不可能であることがわかります。私の知る限り、外部プロセスの方法はありません。外部プロセス内で実行されるコードによって、DLL を挿入してウィンドウ ハンドルを取得できる可能性があります。