- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi程序只能打开一个的方法
工作上,避免我的Upload在一个电脑上被打开多个。
1、新建一个unit名字是 保存为 once.pas ,内容如下:
unit once;interface
usesWindows ,Messages, SysUtils, Classes, Forms;
implementation
constSTR_UNIQUE = {2BE6D96E-827F-4BF9-B33E-8740412CDE96};MI_ACTIVEAPP =1; {激活应用程序}MI_GETHANDLE =2; {取得句柄}
variMessageID : Integer;OldWProc : TFNWndProc;MutHandle : THandle;BSMRecipients : DWORD;
function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam:Longint):Longint; stdcall;beginResult := 0;if Msg = iMessageID thenbegincase wParam ofMI_ACTIVEAPP: {激活应用程序}if lParam0 thenbegin{收到消息的激活前一个实例}{为什么要在另一个程序中激活?}{因为在同一个进程中SetForegroundWindow并不能把窗体提到最前}if IsIconic(lParam) thenOpenIcon(lParam)elseSetForegroundWindow(lParam);Application.Terminate; {终止本实例}end;MI_GETHANDLE: {取得程序句柄}beginPostMessage(HWND(lParam), iMessageID, MI_ACTIVEAPP,Application.Handle);end;end;endelseResult :=CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);end;procedure InitInstance;begin{取代应用程序的消息处理}OldWProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,Longint(@NewWndProc)));
{打开互斥对象}MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False,STR_UNIQUE);if MutHandle = 0 thenbegin{建立互斥对象}MutHandle := CreateMutex(nil,False, STR_UNIQUE);endelse beginApplication.ShowMainForm := False;{已经有程序实例,广播消息取得实例句柄}BSMRecipients :=BSM_APPLICATIONS;BroadCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,@BSMRecipients, iMessageID, MI_GETHANDLE,Application.Handle);end;end;
initialization{注册消息}iMessageID :=RegisterWindowMessage(STR_UNIQUE);InitInstance;
finalization{还原消息处理过程}if OldWProc Nil thenSetWindowLong(Application.Handle, GWL_WNDPROC,LongInt(OldWProc));
{关闭互斥对象}if MutHandle 0then CloseHandle(MutHandle);
end.
2、把这个once.pas考到 upload(我的工作程序里),然后打开UpLoad程序(??可以是你自己的程序),点击Project----
Add to Project 然后选中 once.pas 点确定,编译执行你的程序就可以了。
3、这样你的程序,就在一个电脑上只能打开一个,防止重复打开。
您可能关注的文档
- AA充电电池专题帖.doc
- 9的乘法口诀练习题.doc
- A8湖北省市政基础设施工程竣工验收报告.doc
- AAAA正月十五猜灯谜(附灯谜大全及答案).doc
- ABB程序2310故障解决方案.doc
- ABC教育集团如何更好为企业客户提供英语培训服务-br-.doc
- AB型血型性格分析.doc
- 9小学主题班会课件小学生交通安全教育.ppt
- ABB变频器的常见故障及维修.doc
- 景观的生态过程.ppt
- 2025至2030年中国入仓机市场现状分析及前景预测报告.docx
- 2025年综合类-电力机车司机考试-高级电力机车司机历年真题摘选带答案(5卷单选题100道).docx
- 2025年综合类-果树工考试-果树中级工历年真题摘选带答案(5卷单选题百道集合).docx
- 2026年中考英语复习讲义:动词时态.pdf
- 面向未来的农业产业发展战略规划.doc
- 社区老年日间照料服务智能化建设与养老服务标准制定.docx
- 5G商用深化下边缘计算在智能工厂市场的应用前景研究报告.docx
- 宠物殡葬行业品牌影响力提升策略研究报告.docx
- 2025年医药企业市场准入风险防控与合规政策实施报告.docx
- 宠物殡葬行业品牌战略布局研究.docx
文档评论(0)