十万火急!!!救命!!!在C++ Builder中,怎样保证只运行一个程序实例?——不用FindWindow函数,也别引用Application->Title!

saucerman 2000-03-05 04:58:00
十万火急!!!在C++ Builder中,怎样保证只运行一个程序实例?
不再运行第二次!
是MDI多窗程序。
有自动生成窗,也有运行生成窗。
——不用FindWindow函数,也别引用Application->Title!
因为我的BCB 4一打入Application->Title就无法执行,详见另一贴。
到www.inprise.com下载patches1又太慢,没办法!!!
在Delphi 5中怎么弄怎么顺,但……,而我已经无法再回过去D5了。
各位大侠,问题虽然简单,但就是摆不平——救命!!!
...全文
326 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucerman 2000-03-05
  • 打赏
  • 举报
回复
谢谢!您是阿豪兄吧!
我——菜鸟!没名。
我知道网上有几个阿豪,都很显名。
如果您是开C++ Builder网站的,我可能早已拜访过您了!
我的saucerman是0了,我可没本事——0的突破!
好在我有备在先,这50分给radish吧——
我以trybird(菜鸟)的户头进去——
再送您50分——请一定笑纳!
——分数不是第一重要,素质教育是关键!
对不?ahao老师。
谢谢您和radish等大虾为提高全民族菜鸟的水平所作的贡献!
注意:我要马上送分的!
ahao 2000-03-05
  • 打赏
  • 举报
回复
wuwuwu,被radish抢先了,我替他回答你吧.
互斥(Mutex),Mutex本来是多线程同步用的,防止
多个线程访问同一资源而引发冲突。用CreateMutex可以
创建Mutex对象,实质上是一个kernel对象。 命名的Mutex是系统全局的
所有进程都能访问.
至于AlRun,你在Source file里加上extern bool AlRun,在main.cpp里加上bool AlRun,就可以在main.cpp里访问source file里付的值了.
分数你还是给radish吧.
saucerman 2000-03-05
  • 打赏
  • 举报
回复
快呀!快告诉我吧!
上面我定义的布尔变量AlRun,在窗体构造函数中是不能用的。
要能用,请问是用什么关键字呢?给分呀!
radish是肯定有分了,再告诉我上面的答案,我可以马上打分离线了!
要不然还得下一次 <8-<

saucerman 2000-03-05
  • 打赏
  • 举报
回复
注意!两个and是两竖——C的逻辑OR运算符!
发现好几次这个样子了,zdg在吧?怎么一上传就这样呢?
请他看看吧。
saucerman 2000-03-05
  • 打赏
  • 举报
回复
谢谢!radish又不在了吗?
搞定!!但怪字符串"mytraysadfjdasfjsadlfkAppTitle"的原理呢?


//Project1.cpp如下:

//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
bool AlRun;
//------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
void* Mutex;
Mutex=CreateMutex(NULL,false,"mytraysadfjdasfjsadlfkAppTitle");

if(GetLastError()!=ERROR_ALREADY_EXISTS and and Mutex==0)
{
AlRun=false;
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
else
{
AlRun=true;
ShowMessage("There is already the program running!");
ShowWindow(Application->Handle,SW_HIDE);
Application->ShowMainForm=false;
}
return 0;
}
//------------------------------------------------------------------------

//Unit1.cpp如下:

//------------------------------------------------------------------------
#include <vcl.h>
#include "Unit1.h"
#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
if(AlRun)
{
ShowWindow(Application->Handle,SW_HIDE);
Application->ShowMainForm=false;
}
}
//------------------------------------------------------------------------

另外,我这里又糊涂了,注意————
上面我定义的布尔变量AlRun,在窗体构造函数中是不能用的。
要能用,请问是用什么关键字呢?给分呀!
radish 2000-03-05
  • 打赏
  • 举报
回复
就是把你取APPLICATIO->TITLE的那段去掉,把Mutex=CreateMutex(NULL,false,ApplcationTitle);
换成Mutex=CreateMutex(NULL,false,"mytraysadfjdasfjsadlfkAppTitle");
saucerman 2000-03-05
  • 打赏
  • 举报
回复
本人太笨!用法再具体点!
radish 2000-03-05
  • 打赏
  • 举报
回复
你先用一个怪字符串吧:如
Mutex=CreateMutex(NULL,false,"mytraysadfjdasfjsadlfkAppTitle");
saucerman 2000-03-05
  • 打赏
  • 举报
回复
另外,是Tray程序,TaskBar上没有任何Icon,只在通知区有Icon。
Win入口源程序在另一贴!请参照诊断!!!
saucerman 2000-03-05
  • 打赏
  • 举报
回复
补充:
C++ Builder 4 Enterprise企业版(翻装版)。
需要最简洁的代码——试过的!
多谢!!!

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧