快速业务通道

只运行一个实例且试图运行第二个实例时自动激活第一个实例

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
L = (FLASHW_CAPTION Or FLASHW_TRAY) '' 标题栏&窗体标题一起闪烁

Private Const FLASHW_TIMER = &H4 ''连续的闪烁, 直到设置了FLASHW_STOP标志

Private Const ERROR_ALREADY_EXISTS = 183&

Private Const SW_RESTORE = 9

Private Type SECURITY_ATTRIBUTES

nLength As Long

lpSecurityDescriptor As Long

bInheritHandle As Long

End Type

Private Type FLASHWINFO

cbSize As Long   ''结构大小

hwnd As Long

dwFlags As Long

uCount As Long    ''闪烁的次数

dwTimeout As Long ''闪烁的时间

End Type

Public Mutex As Long

Private Sub Main()

Dim sa As SECURITY_ATTRIBUTES

Dim hwnd As Long

Dim FlashInfo As FLASHWINFO

sa.bInheritHandle = 1

sa.lpSecurityDescriptor = 0

sa.nLength = Len(sa)

Mutex = CreateMutex(sa, 1, App.Title) ''试着创建一个新的互斥体

If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then ''互斥体已经存在,表明已打开一 个实例

hwnd = GetSetting("AppName", "Section", "Key", 0)  ''找到我们保存的前一个实例的句柄,这样避免了使用FindWindow函数等对变标题程序的无奈

ShowWindow hwnd, SW_RESTORE ''显示窗口

SetForegroundWindow hwnd  ''激活窗体



FlashInfo.cbSize = Len(FlashInfo)

FlashInfo.dwFlags = FLASHW_ALL Or FLASHW_TIMER

FlashInfo.dwTimeout = 0 ''以毫秒为单位指定窗体闪 烁的速率,如果为0,则使用默认的光标闪烁速率.

FlashInfo.hwnd = hwnd

FlashInfo.uCount = 3   ''指定闪烁的次数.

FlashWindowEx FlashInfo ''闪烁效果

Else

FrmMain.Show ''显示主窗体

End If

End Sub

窗体中:

Private Sub Form_Load()

SaveSetting "AppName", "Section", "Key", Me.hwnd    ''临时保存我们的窗体句柄

End Sub

Private Sub Form_Unload (Cancel As Integer)

ReleaseMutex Mutex ''释放互斥体,没有这两句,你在VB环境 下这可以运行一次,再次按F5的时候你会发现自动退出

CloseHandle Mutex

DeleteSetting "AppName", "Section", "Key" ''清除我们在注册表种存放的数据,绿色效果。

End Sub

注意,启动窗体情选择sub main()

代码中的注释已相当的详细, 我想稍微懂VB的人应该都不难看懂了吧。

稍微提一下,用DDE的方式也可以实现上述程序的功能 ,网上有这方面的文章,大家有兴趣可以自己去看看。

All Rights Reserved !

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号