Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何使用coredll.dll处理特定的主菜单_C#_Dll_Compact Framework_Windows Ce_Spy++ - Fatal编程技术网

c#如何使用coredll.dll处理特定的主菜单

c#如何使用coredll.dll处理特定的主菜单,c#,dll,compact-framework,windows-ce,spy++,C#,Dll,Compact Framework,Windows Ce,Spy++,我使用的应用程序从另一个正在运行的应用程序的文本框中复制文本。我通过使用coredll.dll来实现这一点。 但问题是,应该单击正在运行的应用程序的主菜单,以便返回我需要复制的文本。如何使用coredll.dll获取特定主菜单上的句柄?我使用remote Spy++查看处理程序,但我无法区分是哪个处理程序。处理程序只包含文本框和标签等控件的处理程序,而不包含主菜单的处理程序。 我是windows CE c的新手 非常感谢:)我没有准备好任何c#代码,因为这将需要大量的p/调用,但为了让您了解如何

我使用的应用程序从另一个正在运行的应用程序的文本框中复制文本。我通过使用coredll.dll来实现这一点。 但问题是,应该单击正在运行的应用程序的主菜单,以便返回我需要复制的文本。如何使用coredll.dll获取特定主菜单上的句柄?我使用remote Spy++查看处理程序,但我无法区分是哪个处理程序。处理程序只包含文本框和标签等控件的处理程序,而不包含主菜单的处理程序。 我是windows CE c的新手

非常感谢:)

我没有准备好任何c#代码,因为这将需要大量的p/调用,但为了让您了解如何在windows CE/Mobile上“自动化”外国应用,请查看tscDialog.cpp

tscDialog.cpp是在windows Mobile上识别和更改远程桌面移动设备(RDM)对话框的代码。但首先我必须说,您可能无法在Windows Mobile中处理外部窗口的菜单(可能在Windows CE上工作),因为菜单不是外部窗口的窗口层次结构的一部分,而是桌面的一部分

如果查看tscdialog.cpp,您会发现函数ScantsWindow。这一个枚举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

因此,执行菜单的最简单方法是模拟鼠标单击菜单

为了更仔细地查看windos ce/移动设备上的窗口,我使用了一个名为zDump的修改版本(较小的屏幕):

您将看到,不可能获得外部窗口的菜单句柄。哎呀,没有办法进行外部处理。可以通过在外部进程内运行的代码注入DLL并获取窗口句柄