wincc中怎么判断用户有没有登陆? 点击:6610 | 回复:3



PLC酷客

    
  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-11-23 08:37:18
楼主

wincc中怎么判断用户有没有登陆?


<BR>  #pragma code("useadmin.dll")<BR> #include "PWRT_API.H" <BR> #pragma code() </P><P> if(GetTagChar("@CurrentUser")=="") //Return-Type: char* <BR> {<BR> PWRTLogin('1');  <BR> }<BR> else<BR> {</P><P> OpenPicture("main.Pdl"); <BR> }<BR> 我是想如果用户为空,我就显示登陆对话框,如果不为空,就说明有用户登录了,就直接进入系统,但是实际运行之后,发现根本就不会出现登陆框,直接就进去了,请问是怎么回事啊<BR>






楼主最近还看过



PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-11-23 08:37:48
1楼

最佳答案


字符串比较用strcmp指令
if (strcmp(GetTagChar("@CurrentUser"),"")==0)


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-11-23 08:38:41
2楼

其他答案


我觉得可以直接在画面中新建一个文本框或者io域,把@CurrentUser变量连接上去,不就由显示当前用户了吗



可以增加一个登录退出画面,在上面增加登录和退出按钮,用户名和密码I/O域,设置为启动画面,启动后进入此画面,只有输入正确的用户名和密码后,按登录键才能登录操作画面,同样,按退出按钮连接此画面,只有用户名和密码正确后,按退出按钮才能退出运行程序。代码如下
登录按钮C动作代码:
#pragma code("useadmin.dll")

#include "PWRT_API.H"

#pragma code()
char * x1;
char * x2;
char * x3;
x1=GetTagChar("loginname"); //Return-Type: char*
; //Return-Type: char*
x2=GetTagChar("loginpass"); //Return-Type: char*


if (PWRTSilentLogin(x1, x2))
{
OpenPicture("NewPdl01.Pdl");
//登录成功后的处理
}
SetTagChar("loginname","0"); //Return-Type: BOOL
SetTagChar("loginpass","0"); //Return-Type: BOOL
退出按钮C动作代码:
#pragma code("useadmin.dll")

#include "PWRT_API.H"

#pragma code()
char * x1;
char * x2;
char * x3;
x1=GetTagChar("loginname"); //Return-Type: char*
; //Return-Type: char*
x2=GetTagChar("loginpass"); //Return-Type: char*


if (PWRTSilentLogin(x1, x2))
{
ExitWinCC();
//退出WINCC
}
SetTagChar("loginname","0"); //Return-Type: BOOL
SetTagChar("loginpass","0"); //Return-Type: BOOL




PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-11-23 08:38:54
3楼

参考一下这个:
如何实现用户登陆日志(wincc中用c脚本实现?)( 柳树成林原创)
用户登陆日志:(包括用户的登陆退出信息,以便查询在什么时间段是哪个用户在使用这个监控软件)

#i nclude "apdefap.h"

int gscAction( void )
{
#pragma code("kernel32.dll")
VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);
#pragma code()

char*  username;
char buf[128];
static char preuser[128];
unsigned a,b,c,d,e,f;
FILE* fp;
SYSTEMTIME sysTime;

//读取系统时间,并且复制给变量a,b,c,d,e,f
GetLocalTime(&sysTime);

a=sysTime.wHour;
b=sysTime.wMinute;
c=sysTime.wSecond;
f=sysTime.wYear;
e=sysTime.wMonth;
d=sysTime.wDay;

//得到当前用户名称
username = GetTagChar("@CurrentUser");
fp= fopen("c:\\wincclog.txt", "a+");
if(strcmp(username, preuser)!=0)    //如果当前用户名称和前一个用户名不同
{
      if((strcmp(username, "")  != 0)&&(strcmp(preuser, "") == 0))     //如果当前用户名称不空同时前一个用户名为空
 
      {
               sprintf(buf, "用户:%s\t登陆时间是:\t %d-%d-%d,%d-%d-%d\n", username,a,b,c,d,e,f);
               fputs(buf, fp);
       }
      else
      {
              if((strcmp(username, "") == 0)&&(strcmp(preuser, "")  != 0))     //如果当前用户名称为空同时前一个用户名不空
 
             {
                        sprintf(buf, "用户:%s\t退出时间是:\t %d-%d-%d,%d-%d-%d\n", preuser,a,b,c,d,e,f);
                        fputs(buf, fp);
              }

              else
             {
                        sprintf(buf, "用户:%s\t退出时间是:\t %d-%d-%d,%d-%d-%d\n", preuser,a,b,c,d,e,f);
                        fputs(buf, fp);
                        sprintf(buf, "用户:%s\t登陆时间是:\t %d-%d-%d,%d-%d-%d\n", username,a,b,c,d,e,f);
                        fputs(buf, fp);
              }
       }
}

strcpy(preuser, username);
fclose(fp);

return 0;
}



热门招聘
相关主题

官方公众号

智造工程师