• Wincc点击按钮弹出输入账号密码窗口,密码正确直接跳转到某个画面的实现方案


    问题详情 

    •   想在Wincc中实现以下功能:点击按钮弹出登录对话框,如果账户密码正确就直接跳转到某个页面。

    实现过程

    •    新建一个Wincc项目,创建一个用户user1,设定好密码。新建两个页面NewPdl0和NewPdl1。在Newpdl0上新建一个按钮,按钮的鼠标点击事件添加以下C脚本。
    #include "apdefap.h"
    void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    #pragma option(mbcs)
    #pragma code("Kernel32.dll")
    void Sleep(int Milliseconds);
    #pragma code("UseAdmin")
    #include "pwrt_api.h"
    
    #define PIC_0 "NewPdl1.pdl" //改成要跳转的页面
    char *username=GetTagChar("@CurrentUser");
    DWORD hProcId;
    HWND gWnd;
    PWRTLogin(1);
    Sleep(500);
    gWnd =FindWindowA(NULL, "系统登录" );
    while(gWnd)
       gWnd =FindWindowA(NULL, "系统登录" );
    if (strcmp(username,"user1")==0)//user1改成自己的用户名
      OpenPicture(PIC_0);
    }

       这个脚本中PWRTLogin(1)作用是弹出登录对话框,这是一个非模态对话框,也就是说这个对话框弹出来后,不管用户操不操作怎么操作,后面语句都会接着执行。

         后面紧跟了一个Sleep语句,这是一个暂停的语句,如果没有这一句gWnd =FindWindowA(NULL, "系统登录" )得到的gWnd就是假了,因为执行非常快,在登录对话框出来之前,语句就过去了。这点卡住了我一段时间。后面的while循环纯粹是为了等到用户输入完毕关闭对话框。最后通过strcmp函数比较两个字符串来判断是不是登录成功了,如果成功就直接跳转。

    待优化问题

    • 如果当前已经是user1账户了,就不需要登陆直接跳转到NewPdl1,现在可以实现直接跳转但是还是会出现登录框。(已解决)
    #include "apdefap.h"
    void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    #pragma option(mbcs)
    #pragma code("Kernel32.dll")
    void Sleep(int Milliseconds);
    #pragma code("UseAdmin")
    #include "pwrt_api.h"
    
    #define PIC_0 "NewPdl1.pdl" //改成要跳转的页面
    char *username=GetTagChar("@CurrentUser");
    DWORD hProcId;
    HWND gWnd;
    if (strcmp(username,"user1")==0)//user1改成自己的用户名
      OpenPicture(PIC_0);
    else
    PWRTLogin(1);
    Sleep(500);
    gWnd =FindWindowA(NULL, "系统登录" );
    while(gWnd)
       gWnd =FindWindowA(NULL, "系统登录" );
    }
    • 登录窗口的文字不知道在哪修改,知道的大神麻烦留言告知。
  • 相关阅读:
    A % B Problem
    封锁阳光大学
    数楼梯
    海滩防御
    修复公路
    四子连棋
    口袋的天空
    兔子数
    逆序对&求逆序对
    【模板】单源最短路径*
  • 原文地址:https://www.cnblogs.com/amosi/p/13756081.html
Copyright © 2020-2023  润新知