打开第二次VB程序时通知第一次运行的程序并自己关闭的方法
来源:互联网 发布:php curl json 编辑:程序博客网 时间:2024/05/19 10:36
开场白:很多程序,如WINDOWS MEDIA PLAYER,在程序第二次打开,第一次的程序并未关闭时,会自动激活第一次运行的程序,而且会自动把选取的音乐添加到第一次的那个程序的播放列表里,这是如何作到的呢?
思路:利用APP对象的PrevInstance属性,该属性在该实例运行第二次以上时返回TRUE,并且利用注册表为中介,记录第一次运行的程序的窗体的hWnd值,向其发送一条特定的消息,并在该消息被第一个程序捕获时分析,读去作为中介的注册表里的信息即可!OK!开工!
首先,新打开一个工程,添加一个窗体和一个模块。向模块里添加如下几个API及常数:
SendMessage
SetWindowLong
GetWindowLong
CallWindowProc
GWL_WNDPROC
ZIDINGYIXIAOXI = 101010 '这个常数是自己定的,但一定不要与WINDOWS的消息重复
定义全局LONG类型变量:prevWndProc.作用:保存窗体以前的窗口回调函数,以便在退出时恢复,否则……
在FORM的LOAD事件里写下如下代码:
If App.PrevInstance = True Then '如果已经有一个实例在运行 SendMessage CLng(GetSetting(App.EXEName, "Dynamic Data", "hWnd")), ZIDINGYIXIAOXI, 0, ByVal 0& '发送自定义消息 Unload Me '卸载窗体 Exit Sub '跳出程序End IfprevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC) '* '记录以前的窗口回调函数SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc '* '挂上自己的窗口回调函数SaveSetting App.EXEName, "Dynamic Data", "hWnd", CStr(Me.hwnd) '在注册表里写下本窗体的句柄
在窗体的UnLoad事件里写下如下代码:
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc '把窗口回调函数换成以前的,否则会死机
然后,在模块里写这样一个函数(就是回调函数):
Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongIf Msg = ZIDINGYIXIAOXO Then '判断是否为第二个实例发来的自定义消息 Form1.Show '显示窗体 Form1.WindowState = 2 '最大化End IfWndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) '让Windows处理余下的消息End Function
好了,基本思路大概就是这样了,大家还可以完善,比如把第二个程序被运行时的参数写到注册表里并加以处理.但这只是个框架,那些程序大概就是这么实现的.
这个方法最大的缺点就是以比较不安全的注册表作为记录hWnd的地方,希望哪位有更好的方法来解决这个问题
- 打开第二次VB程序时通知第一次运行的程序并自己关闭的方法
- 启动程序(第二次开启程序,显示第一次打开的程序)
- 如何在自己的系统中打开并关闭外部程序
- VB中关闭shell打开的外部EXE程序
- VB中关闭shell打开的外部EXE程序
- QT 应用程序关闭某个窗口时,关闭打开的所有其他窗口并退出程序
- windows中定时关闭并延时打开某个运行程序
- [VB.NET]怎样才能用VB.NET的代码来关闭一个在运行的程序?????
- 在自己的java代码中编译并运行程序
- 发布自己的iphone程序,并在真机上运行
- 编写自己的hadoop程序并打包运行
- Vb.Net防止同一程序重复运行的方法
- VB制作的程序 有时第一次运行提示安装 office 的原因及解决办法
- Linux关闭终端后继续运行程序的方法
- openwrt 关闭ssh后,程序继续运行的方法(备忘)
- vb.net 打开EXCEL ,关闭程序后,EXCEL进程仍然存在的问题
- vb 浏览器打开关闭通知
- 第一次自己编出来的程序
- JavaScript正则表达式(一)简介
- VS2008 自带SQL2005登陆问题
- 数据结构常见问题(3)串
- 最常见的20种VC++编译错误信息集合
- shell编程技术和实例--《linux0.01内核分析与操作系统设计》
- 打开第二次VB程序时通知第一次运行的程序并自己关闭的方法
- TCP定时器详解
- MAC 安装tomcat
- Trie—单词查找树
- SQL2000 由于登录失败而无法启动服务 1069错误解决方法
- 关于Google Chrome出现乱码的情况
- Spring初步整合hibernate(参照bjsxt视频)
- ParallaxOcclusionMapping( POM ) DX9
- fdisk简介、使用方法、实例解说 linux