知识大全 delphi中,让程序只运行一次的方法[3]

Posted 函数

篇首语:一个不想蹚过小河的人,自然不想远涉重洋。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 delphi中,让程序只运行一次的方法[3]相关的知识,希望对你有一定的参考价值。

  函数形式   BOOL EnumWindows(WNDENUMPROC lpEnumFunc //callback function                   LPARAM lParam); //application defined value  其中 WNDENUMPROC 是回调函数 回调函数中写自己想做的操作 当调用EnumWindows的时候 每次遇到一个窗口 系统就调用一次你的WNDENUMPROC 然后把窗口句柄传给你   EnumWindows    函数成功则返回非 值    函数失败则返回 值    EnumWindowsProc 返回 值 同样导致函数EnumWindows 返回 值

  另外 该函数不列举子窗口 除了几种拥有WS_CHILD 风格的系统所属窗口   MSDN   The EnumWindows function does not enumerate child windows with the exception of a few top level windows owned by the system that have the WS_CHILD style 使用举例

  先声明一个EnumWindowsProc 比如   BOOL CALLBACK EnumWindowsProc_ (HWND hwnd LPARAM lparam) ;

  然后实现此函数 写入自己想做的事情 比如   BOOL CALLBACK EnumWindowsProc_ (HWND hwnd LPARAM lparam)   char lpWinTitle[ ];      ::GetWindowText(hwnd lpWinTitle );      CString m_strTitle;     m_strTitle Format( %s lpWinTitle);     if(m_strTitle Find( Internet Explorer )!= )        AfxMessageBox( 这是一个IE窗口! ) ;        return TRUE ;  

  然后就可以在其他地方调用EnumWindows的时候使用回调函数 比如   ::EnumWindows(EnumWindowsProc_ ) ;  这样每当遇到IE窗口时 就会进行 提示 这是一个IE窗口! 的操作

  方法二

  不用互斥对象

  我们可以利用向系统添加全局原子的方法 来防止多个程序实例的运行 全局原子由Windows 系统负责维持 它能保证其中的每个原子都是唯一的 管理其引用计数 并且当该全局原子的引用计数为 时 从内存中清除 我们用GlobalAddAtom 函数向全局原子添加一个 个字节以内的字符串 用GlobalFindAtom来检查是否已经存在该全局原子 最后在程序结束时用GlobalDeleteAtom函数删除添加的全局原子 示例如下   Uses Windows   const iAtom= SingleApp ;   begin    if GlobalFindAtom(iAtom)= then    begin    GlobalAddAtom(iAtom);    Application Initialize;    Application CreateForm(TForm Form );    Application Run;    GlobalDeleteAtom(GlobalFindAtom(iAtom));    end    else    MessageBox( You can not run a second copy of this App mb_OK);   end   利用全局原子的引用计数规则 我们还可以判断当前共运行了该程序的多少个实例   var i:Integer;   begin    I:= ;   while GlobalFindAtom(iAtom)<> do    begin    GlobalDeleteAtom(GlobalFindAtom(iAtom));    i:=i+ ;    end;    ShowMessage(IntToStr(I));   end;

cha138/Article/program/Delphi/201311/24834

相关参考

知识大全 delphi中,让程序只运行一次的方法[1]

  公司开发的软件需要对串口进行操作每次打开软件后程序自动去打开串口寻找连接到串口上的设备但是如果用户不知道打开了两次那么第二次打开的程序是不能正常使用的因为对串口的操作时独占的第一个程序独占了串口的

知识大全 使用PB限制应用程序只运行一次

使用PB限制应用程序只运行一次  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  位操作系统中可以用

知识大全 让Java程序只运行一个实例

让Java程序只运行一个实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一个程序可以在内存里

知识大全 C#中让程序只运行一个实例的操作方法

C#中让程序只运行一个实例的操作方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  让程序只运行

知识大全 Delphi应用程序的应用(一)[3]

DELPHI基础教程:Delphi应用程序的应用(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi应用程序的应用(二)[3]

DELPHI基础教程:Delphi应用程序的应用(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Delphi开发数据库应用程序概述(一)[3]

DELPHI基础教程:Delphi开发数据库应用程序概述(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 Delphi开发数据库应用程序概述(二)[3]

DELPHI基础教程:Delphi开发数据库应用程序概述(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 Delphi开发WEB应用程序打印组件[3]

Delphi开发WEB应用程序打印组件[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()

知识大全 在Delphi数据库应用程序中常见错误

在Delphi数据库应用程序中常见错误  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Delph