问题详情
- 想在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, "系统登录" );
}
- 登录窗口的文字不知道在哪修改,知道的大神麻烦留言告知。