所以,让我们说我希望我的应用程序重新调整来自谷歌的图片,例如:
Valid XHTML http://mygimptutorial.com/images/button-with-reflection/11.jpg
如果图片在过程iexplorer.exe中可见,如何让它弹出一个消息框?
我不知道有任何可行的方法,有人可以帮助我吗?
答案 0 :(得分:0)
它并不容易,但我要知道的最好的事情是尝试搜索当前的屏幕缓冲区以查看该图像是否在其上的任何位置。我首先会根据固定的图像大小进行编程,然后尝试查看我可以从调整大小的图像中获得多少性能。在开始尝试进行更完整的搜索之前,您还可以从图像中选择“唯一”颜色值,以查看它们是否在屏幕上的任何位置匹配。
如果您不知道如何从C#访问屏幕缓冲区,以下资源应该有所帮助:
我唯一想到的是检查文件句柄以查看哪些文件是打开的以及哪些进程正在使用它们。这种方法的一个大问题是,IE不一定要缓存每个文件,而且您将很难确定哪些文件与您要查找的文件匹配。因此我不认为这是一个好方法。我希望这会有所帮助!
答案 1 :(得分:0)
我会采用这种方法,伪代码:
Find the list of running processes
Select only the processes on which you are interested
Find the windows of those processes
For each window
Get the current graphic context of that handle ^1
Create a compatible graphic context and bitmap
Copy the image to your bitmap ^2
Search the bitmap on that graphic context (I suggest Boyer–Moore algorithm ^3)
If there is a match
Show message
Repeat and rinse
^ 1:如果您想支持DirectX或OpenGl,这可能会有问题,特别是在旧系统中。
^ 2:信不信由你,整个副本然后扫描更快。
^ 3:搜索它,但是它在哪里说“string”你读“image”,在哪里它说“character”你读“pixel”。您将用于扫描图像的各行。
您将需要:
答案 2 :(得分:0)
我认为你需要GetForegroundWindow
,从那里你可以确定前景窗口是否确实是IE的。 GetClassName
将返回有关窗口的信息,该窗口为所述窗口提供句柄(HWND)作为参数。
如果是这样,那么您需要抓取它的屏幕截图,如here中建议的那样。
您还可以每X秒抓取整个显示屏的屏幕截图,这样可以更简单。
AForge可用于图像分析/操作。
我不知道是否有办法通过事件驱动来执行此操作,但我认为您需要使用Timer
并按预设间隔进行整个过程。