只运行一个实例且试图运行第二个实例时自动激活第一个实例
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 窗体中:
注意,启动窗体情选择sub main() 代码中的注释已相当的详细, 我想稍微懂VB的人应该都不难看懂了吧。 稍微提一下,用DDE的方式也可以实现上述程序的功能 ,网上有这方面的文章,大家有兴趣可以自己去看看。 All Rights Reserved ! |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |