我正在开发一个检测弹出对话框的应用程序,然后 自动关闭它。我将其编写为 C++/Win32 应用程序。这 对话框是由 IE 7 生成的,我可以检测到窗口,但是 使 OK 按钮“单击”的几种方法都失败了。
搜索其他人的解决方案,将这些消息发送给 按钮 handle 似乎在很多情况下都有效:
PostMessage( handle, WM_LBUTTONDOWN, 0, 0 );
PostMessage( handle, WM_LBUTTONUP, 0, 0 );
PostMessage( handle, BM_SETSTATE, 1, 0 );
虽然在我的测试中它对按钮状态没有影响。
我可以将制表符发送到主窗口并看到 OK 按钮获得焦点,但随后发送返回字符没有任何作用。
为了了解更多信息,我使用 Spy++ 获取有关 窗口层次结构以及我手动发送的消息 单击“确定”按钮。
查看消息日志并阅读有关 WM_MOUSEACTIVATE 的内容 提供解决方案。日志信息显示 0002166C 是按钮 window 。所以在我的代码中我尝试了这个:
GetClassNameA( handle, str, str_size );
if( strcmp( str, "Internet Explorer_Server" ) != 0 )
return TRUE; // Not the window we're interested in.
// Send a message to activate the button window and have it process a mouse click.
PostMessage( handle, WM_MOUSEACTIVATE, (WPARAM) dialog_handle, MAKELPARAM( HTCLIENT, WM_LBUTTONDOWN );
基于窗口层次结构和消息日志,我认为窗口 类名“Internet Explorer_Server”是按钮。也许我是 错了,因为它看起来确实像是一个奇怪的按钮类名...
下面是窗口层次结构图像的链接,消息日志,当我 手动单击确定按钮。最后是在 1 上执行的代码 第二个定时器票,寻找窗口。
感谢任何见解和帮助!
窗口层次结构的图像、源代码、窗口消息和测试对话框源代码可在此处获得:
https://sites.google.com/site/matthewmillersmiscellanea/Home/
最佳答案
理想情况下,您应该创建一个导出全局 CBT 的 DLL窗钩。这将允许您在将要创建对话框时得到早期通知。这将避免通过不断轮询耗尽资源的需要。
一旦您检测到将要创建一个对话框,您有两个选择:
1) 阻止创建对话框。
我不推荐这样做,它会导致代码出现各种问题,这些代码完全期望 CreateDialog() 返回有效的 HWND;
2) 异步控制对话框。
我们通过使用带有注册用户消息的 PostMessage 并通过 Hook WNDPROC 来获取它来实现这一点。当您收到此消息时,您必须决定如何终止您所在的对话。
退出对话框有多种方式:
a) 使用 WM_COMMAND(BN_CLICKED) 模拟按下 OK、Cancel、Abort、No 按钮(如 Chris 评论)。您可以使用 GetDlgItem(),查找 WindowText 并做出选择。但是,这不适用于非美国英语。不过,在此处利用辅助功能 API 可能还有一些距离。
b) 使用 PostMessage(WM_CLOSE, m_hWnd) 模拟关闭对话框。这并不总是按预期工作 - 一些对话框没有 [X] 关闭按钮,它们的客户端代码期望按下特定按钮。
c) 使用 SendInput() API 模拟用户输入.这解决了其中包含反弹出窗口 killer 代码的对话框 :)
我们的最终解决方案是一种基于规则+启发式的方法,它有一个配置文件,我们可以在应用程序/IE 对话框更改其 ID、类名或父类名时对其进行调整。
关于c++ - 以编程方式关闭对话框 - win32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676542/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,