打开第二次VB程序时通知第一次运行的程序并自己关闭的方法
开场白:很多程序,如WINDOWS MEDIA PLAYER,在程序第二次打开,第一次的程序并未关闭时,会自动激活第一次运行的程序,而且会自动把选取的音乐添加到第一次的那个程序的播放列表里,这是如何作到的呢? 思路:利用APP对象的PrevInstance属性,该属性在该实例运行第二次以上时返回TRUE,并且利用注册表为中介,记录第一次运行的程序的窗体的hWnd值,向其发送一条特定的消息,并在该消息被第一个程序捕获时分析,读去作为中介的注册表里的信息即可!OK!开工! If App.PrevInstance = True Then '如果已经有一个实例在运行 SendMessage CLng(GetSetting(App.EXEName,"Dynamic Data","hWnd")),ZIDINGYIXIAOXI,ByVal 0& '发送自定义消息 Unload Me '卸载窗体 Exit Sub '跳出程序 End If prevWndProc = GetWindowLong(Me.hwnd,GWL_WNDPROC) '* '记录以前的窗口回调函数 SetWindowLong Me.hwnd,GWL_WNDPROC,AddressOf WndProc '* '挂上自己的窗口回调函数 SaveSetting App.EXEName,"hWnd",CStr(Me.hwnd) '在注册表里写下本窗体的句柄 在窗体的UnLoad事件里写下如下代码: SetWindowLong Me.hwnd,prevWndProc '把窗口回调函数换成以前的,否则会死机 然后,在模块里写这样一个函数(就是回调函数): Public Function WndProc(ByVal hwnd As Long,ByVal Msg As Long,ByVal wParam As Long,ByVal lParam As Long) As Long If Msg = ZIDINGYIXIAOXO Then '判断是否为第二个实例发来的自定义消息 Form1.Show '显示窗体 Form1.WindowState = 2 '最大化 End If WndProc = CallWindowProc(prevWndProc,hwnd,Msg,wParam,lParam) '让Windows处理余下的消息 End Function好了,基本思路大概就是这样了,大家还可以完善,比如把第二个程序被运行时的参数写到注册表里并加以处理.但这只是个框架,那些程序大概就是这么实现的. 这个方法最大的缺点就是以比较不安全的注册表作为记录hWnd的地方,希望哪位有更好的方法来解决这个问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |