- 14
- 0
- 约1.13万字
- 约 16页
- 2017-02-28 发布于湖北
- 举报
程序只运行一次并激活原来的程序?
关键就在于激活原来的程序,一般的做法是在工程开始时,打开互斥量对象,如果打不开表示程序还没有运行,创建一个互斥量对象;如果打得开表示程序已经运行了,查找程序中一个特定的窗口,一般是主窗口,然后发送一个自定义消息,主窗口在这个消息处理中激活自己。我原来就是这么做的,却发现有很多问题。
主窗口在消息处理函数中激活不了自己,众所周知激活一个窗口最有效的方法当然就是SetForegroundWindow,但在主窗口中调用这个函数激活自己的效果却是只在标题栏闪了一闪,如果在其他进程调用该函数则不会有问题;另外,如果程序是最小化的,它连闪都不闪了。
对于这些问题,我想了下面的办法,在知道原程序已经运行后,用FindWindow找原程序主窗口的句柄,找到了,就发送一个自定义消息过去,而在原程序主窗口的消息处理函数中,只是调用Application.Restore方法,这样如果原程序是最小化的就会还原过来。在发送消息之后,紧接着我调用SetForegroundWindow并传入原程序主窗口的句柄,由于上面的处理,原程序肯定不是最小化了,且调用SetForegroundWindow的地方已经不是原程序了(是第二次运行的程序,也可以说是另一个进程),所以原程序可以很好的被激活。
看来一切都很好,当然不是,不然就不会有下面的代码了,我又发现了一些问题,首先当主窗体不是活
您可能关注的文档
- 白盒测试工具 Pc lint.ppt
- 百度地图的API手册.doc
- 百度搜索手机客户端-设计项目分享.doc
- 百度云适配教程.doc
- 百善孝为先——感恩父母主题班会.ppt
- 笔的创新思维.ppt
- 笔记本FN组合键功能.doc
- 笔记本电脑常见功能端口简介.ppt
- 笔记本电脑隔离器使用手册.doc
- 笔记本电脑如何连接平板电视看高清.doc
- DB31_T 1551-2025 企业集团安全生产管控基本规范.docx
- DB31_T 1670-2026 供应链质量管理数字化要求.docx
- 重点单位重要部位安全技术防范系统要求 第26部分:民用机场航站楼__DB31_T 329.26-2025-500积分.docx
- DB31 881-2024 涂料、油墨及其类似产品制造工业大气污染物排放标准.docx
- DB32_T 5363-2026 县级(区域)医疗资源集中化运行规范.docx
- DB23_T 3821—2024 黑龙江省超低能耗建筑用外门窗应用技术规程.docx
- DB31 T 838-2026,草坪主要害虫预测与防治技术规范.docx
- DB23_T 3813—2024 公路智能自助收费系统技术规范.docx
- DB31_T 1496-2024 火力发电企业碳管理要求.docx
- DB31_T 1586-2025 未成年人保护工作站建设和服务规范.docx
原创力文档

文档评论(0)