避免程式重複執行的方法[delphi]
2013-09-24 22:46
387 查看
出處 : http://jck11.pixnet.net/blog/post/8541840-%E9%81%BF%E5%85%8D%E7%A8%8B%E5%BC%8F%E9%87%8D%E8%A4%87%E5%9F%B7%E8%A1%8C%E7%9A%84%E6%96%B9%E6%B3%95%5Bdelphi%5D
用CreateMutex函數
用FindWindow函數
用EnumWindows函數
用CreateMutex函數
var Mutexhandle: THandle; begin Mutexhandle := CreateMutex(nil, true, 'jck11'); //建立Mutex if Mutexhandle <> 0 then //如果Mutex建立失敗 begin if GetLastError = ERROR_ALREADY_EXISTS then //程式已在執行 begin MessageBox(0, '程式執行中', '警告', mb_iconhand); CloseHandle(Mutexhandle); Halt; //結束程式 end; end; end;
用FindWindow函數
var hWnd: THandle; begin hWnd:= FindWindow(nil, 'jck11'); //尋找程式的caption為jck11的視窗 if(hWnd <> 0)then begin //找到了該視窗 if IsIconic(hWnd)then begin //最小化的話就將它恢復 ShowWindow(hWnd, SW_RESTORE); end else begin SetForegroundWindow(hWnd); //將視窗帶到最上層 end; Halt; //結束程式 end; end;
用EnumWindows函數
function EnumApps(Wnd: HWnd; lParam: LPARAM): boolean; stdcall; var WndCaption: array[0..254] of char; begin Result:= true; GetWindowText(Wnd, @WndCaption, 254); //取得視窗的caption if(Pos('jck11', WndCaption) >= 1)then begin //比對caption if(IsIconic(Wnd)then begin //最小化的話就將它恢復 ShowWindow(Wnd, SW_RESTORE); end else begin SetForegroundWindow(Wnd); //將視窗帶到最上層 end; Result:= false; Halt; //結束程式 end; end;
EnumWindows(@EnumApps, 0); //列舉所有的視窗
相关文章推荐
- 在delphi中用函数将空值转换成空字符
- delphi xe5 android sample 中的 SimpleList 是怎样绑定的
- Delphi 调试BPL包中引用另外的BPL的方法。
- Delphi Dcp 和BPL的解释
- 用Delphi直接获取bmp图片的像素
- Delphi default属性
- Delphi7 动态链接库编程学习点滴
- delphi 消息(自己理解)
- delphi向SQL Server2005中存取图片
- delphi向SQL Server2005中存取图片
- 扩展 delphi 线程 使之传递参数.
- delphi中类的属性不能作为可变参数传递给方法
- Delphi数据库数据用文件流方式快速写入Excel文件
- Delphi之word报表
- delphi从dll中调用图片资源
- delphi从dll中调用图片资源
- delphi xe5 android 关于文件大小的几个问答O(∩_∩)O~
- delphi2010中的Pchar
- delphi点击外部程序的按钮
- delphi点击外部程序的按钮