密码框弹出问题?

clwk 2008-06-02 10:42:31
怎么让密码框只弹出一次,以后运行这个程序,只要知道已经运行了,就不弹了,直接运行第二个。

不想用注册表,感觉不安全,因为只是一个EXE,不附带其他文件,所以也不能用另存标注。

...全文
118 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
clwk 2008-06-02
  • 打赏
  • 举报
回复
CreateMutex我试过了,要是只是判断程序是否运行,很好办,但是对于对话框的弹出,有点麻烦了。
pister 2008-06-02
  • 打赏
  • 举报
回复
使用CreateMutex来判断是否已经打开第二个程序的实例

以下栽自msdn

HANDLE hMutex; 
DWORD dwErr;

hMutex = CreateMutex(
NULL, // no security descriptor
FALSE, // mutex not owned
"NameOfMutexObject"); // object name

if (hMutex == NULL)
printf("CreateMutex error: %d\n", GetLastError() );
else
if ( GetLastError() == ERROR_ALREADY_EXISTS )
printf("CreateMutex opened existing mutex\n");
else
printf("CreateMutex created new mutex\n");


你可以在mutex对象已经存在的时候 退出程序
clwk 2008-06-02
  • 打赏
  • 举报
回复
我说的是第一次运行的时候,输入一次,当同时运行第二个相同的程序时,就不用再输入了。
wolflarge 2008-06-02
  • 打赏
  • 举报
回复
你的意思是不是第一次运行输入正确密码后,当第二次运行的话就不需要再输入密码。还是就一次运行的过程中判断。
如果是第一种情况的话建议还是用注册表,可以设成两个值,第一个判断是否输入过,第二个用来保存加密过硬盘系列号(建议用AES),因为每一台机器的系列号基本上都不一样,所以可以用用担心。
第二种情况的话就直接用个全局变量吧,如二楼所说的。
clwk 2008-06-02
  • 打赏
  • 举报
回复
怎么写道exe中
指导一下吧。
Chivalry 2008-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ghz 的回复:]
写到自己的exe中
[/Quote]

恩,好办法
wglacier 2008-06-02
  • 打赏
  • 举报
回复
写到自己的exe中
Chivalry 2008-06-02
  • 打赏
  • 举报
回复
只弹出一次,就需要保存一个标志位把
内存是断电丢失的
不写注册的话,就只能写文件了
clwk 2008-06-02
  • 打赏
  • 举报
回复
上面的办法都不可行或者不合适,我需要别的方法。
paozi124 2008-06-02
  • 打赏
  • 举报
回复
当输入正确密码后,可以直接把正确的密码写入到一个生成文件中,程序运行时先从文件中读,如果不存在这个文件,或者这个文件为空或里面的密码不对,就再弹出密码框
sking2008 2008-06-02
  • 打赏
  • 举报
回复
那就定一个全局变量把,BOOL型的,已经弹出一次了设置TRUE,否则为FALSE
clwk2000 2008-06-02
  • 打赏
  • 举报
回复
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Password Dlg");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AlreadyRun = TRUE;
}
else
{
Rmutex = CloseHandle(m_hMutex);
if(!Rmutex)
{
DWORD gle;
gle = GetLastError();

}
}

if( !AlreadyRun)
{
if(Passworddlg.DoModal() == IDOK )
{
//sprintf(PwordcharIn ,"%s", Passworddlg.PasswordChar);
if(PwordString == Passworddlg.PasswordChar)
{
m_hMutex = CreateMutex(NULL, FALSE, "Password Dlg");
}
else return FALSE;

}
else
{
return FALSE;
}
}
clwk 2008-06-02
  • 打赏
  • 举报
回复
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Password Dlg");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AlreadyRun = TRUE;
}
else
{
Rmutex = CloseHandle(m_hMutex);
if(!Rmutex)
{
DWORD gle;
gle = GetLastError();

}
}

if( !AlreadyRun)
{
if(Passworddlg.DoModal() == IDOK )
{
//sprintf(PwordcharIn ,"%s", Passworddlg.PasswordChar);
if(PwordString == Passworddlg.PasswordChar)
{
m_hMutex = CreateMutex(NULL, FALSE, "Password Dlg");
}
else return FALSE;

}
else
{
return FALSE;
}
}
clwk 2008-06-02
  • 打赏
  • 举报
回复
不知道通过对resouse文件操作的方法是否合适,有人能否给个建议,我不太了解这方面。
孤客天涯 2008-06-02
  • 打赏
  • 举报
回复
最好修改配置文件的方法,写EXE文件不保险,万一失败可能直接损坏EXE导致不必要的损害.
clwk 2008-06-02
  • 打赏
  • 举报
回复
3.程序(EXE)自己.
怎么保存
龙凤呈祥焱 2008-06-02
  • 打赏
  • 举报
回复
总得有地方保存这个已经运行的标记
1.配置文件.
2.注册表.
3.程序(EXE)自己.
4.磁盘特殊位置(MBR空闲部分或者磁盘最尾部)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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