Delphi两个程序不能同时执行,只能执行一个 在Delphi两个程序A/B,如果先打开A,在打开B时,仍旧弹出A,B没有显示;如果先执行B,在打开A时,仍旧弹出B,A没有显示。不知道什么原因。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加互斥量就可以,供你参考:const CSMutexName = 'Global\*******_*******_******';var OneInstanceMutex: THandle; SecMem: SECURITY_ATTRIBUTES; aSD: SECURITY_DESCRIPTOR; s: string;begin InitializeSecurityDescriptor(@aSD, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@aSD, True, nil, False); SecMem.nLength := SizeOf(SECURITY_ATTRIBUTES); SecMem.lpSecurityDescriptor := @aSD; SecMem.bInheritHandle := False; OneInstanceMutex := CreateMutex(@SecMem, False, CSMutexName); if (GetLastError = ERROR_ALREADY_EXISTS)then begin //处理你的逻辑,是弹出B程序还是直接退出 CloseHandle(OneInstanceMutex); Exit; end; 两个程序都是前人写,用Dug时,两个不会互斥。 正如1楼所言A和B是同一人写的,加了互斥条件了,调试看不到结果,最后执行exe才有效果 参考1#代码,搜索CreateMutex看看,看出现在那里,把那些代码删掉 两个程序中都没有出现CreateMutex呀。 用CreateMutex可以让同一个程序不能同时打开两次,目前我拿到的这两个程序中没有它。 CreateMutex一般放在projcet里面的。很少有放在form里的。再找找 找遍了所有的程序也没有发现CreateMutex。 判断重复运行的方式有很多的 不只是CheckMutex互斥还有信号判断 CreateSemaphore映射判断 CreateFileMapping原子判断 GlobalFindAtom 等等~~ CreateMutexCreateEventCreateSemaphore在工程文件里面找一下这几个函数。 只有自己调试了, 打开A ,然后用od载入b, 下段消息断点,因就你描述,a会发窗口激活消息给b才会弹出b.因此消息传递的前一两个函数就是判断。 谁会写这种高难度的循环??? Delphi中有"把鼠标移上去变成手指状"的热点控键吗 美国borland软件公司华东区正版化机构是个什木单位? [求助]关于RadioGroup [小弟没分了,抱歉!] TreeList怎么用编程选中节点 在dbgrid第一列显示1~n的数值如何操作? 请大家帮帮我。 dbgrid的添加一个后缀字符的问题?? 捕获在WIN2000任务管理器中当关闭一个应用程序时的消息? 欢迎参与 delphi怎样读取word中指定行的内容?或者读取指定第n个回车键至第n+1个回车键之间的内容? 100分求读SD卡序列号代码
CSMutexName = 'Global\*******_*******_******';
var
OneInstanceMutex: THandle;
SecMem: SECURITY_ATTRIBUTES;
aSD: SECURITY_DESCRIPTOR;
s: string;
begin
InitializeSecurityDescriptor(@aSD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@aSD, True, nil, False);
SecMem.nLength := SizeOf(SECURITY_ATTRIBUTES);
SecMem.lpSecurityDescriptor := @aSD;
SecMem.bInheritHandle := False;
OneInstanceMutex := CreateMutex(@SecMem, False, CSMutexName);
if (GetLastError = ERROR_ALREADY_EXISTS)then
begin
//处理你的逻辑,是弹出B程序还是直接退出
CloseHandle(OneInstanceMutex);
Exit;
end;
A和B是同一人写的,加了互斥条件了,调试看不到结果,最后执行exe才有效果
参考1#代码,搜索CreateMutex看看,看出现在那里,把那些代码删掉
还有信号判断 CreateSemaphore
映射判断 CreateFileMapping
原子判断 GlobalFindAtom 等等~~
CreateEvent
CreateSemaphore
在工程文件里面找一下这几个函数。
因此消息传递的前一两个函数就是判断。