2024年3月21日发(作者:)

wincc6.0运行系统下可以用ProgramExecute打开应用程序,但如何关闭呢?

使用WinCC的动态向导可以为一个按钮组态退出运行系统并关闭计算机的功能,这样做有

一个缺点就是在关机时不做任何提示,如果操作人员误操作,将没有反悔的机会。我们给出的项

目函数ShutOP就具有和Windows关机一样的特性,即在关机之前弹出一个消息框,给操作员

最后一次选择的机会。

●使用FindWindow函数获得WinCC运行系统或应用程序的窗口句柄,作为

MessageBox函数的参数是为了把弹出的消息框变成WinCC运行系统的子窗体,操作员如

果不响应此消息框,将无法进行其它的操作。这种对话框被Windows称为模式对话框。

●判断操作员是否点击了是按钮,如果点击了是按钮将执行退出运行系统或应用程序的

窗口并关闭计算机的操作;如果点击了否按钮将关闭消息框返回。

项目函数ShutOP

void ShutOP()

{

HWND hWnd = NULL;

int iRet;

hWnd = FindWindow(NULL,"WinCC-运行系统 - ");

iRet=MessageBox(hWnd,"结束监控并关闭计算机",

"关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL);

if(iRet==IDYES)

{

DMExitWinCCEx (DM_SDMODE_POWEROFF);

}

}

在画面上添加一个关机按钮,在按钮的鼠标单击动作中组态C动作,在C动作中调用项目

函数ShutOP()即可。

1,

用API函数SendMessage:发送消息去关闭打开的应用程序进程。(已验证)

程序如下:以关闭WINCC应用程序为例

#pragma code ("")

#pragma code()

// 前面两句可以省略!

HWND hwnd;

hwnd = FindWindow(NULL,"WinCC-运行系统 - ");

//这句中的“WinCC-运行系统 - ”为应用程序的标题!(如: “XXXX – 记事本”

"WinCC-Runtime - ")

SendMessage(hwnd,WM_CLOSE,0,0);

}

FindWindow和SendMessage还有哪个最小化窗口的API函数等一些比较常用的函数可以

不声明的,wincc直接支持!一些少用的就要声明了!

例程

{

HWND hWnd = NULL;

int iRet;

hWnd = FindWindow(NULL,"码盘色标 - 记事本");

iRet=MessageBox(hWnd,"结束监控并关闭",

"关闭操作窗口",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL);

if(iRet==IDYES )

{

SendMessage(hWnd,WM_CLOSE,0,0);

}

}

2,

这个办法也行。去baidu搜一个 tskill 命令下载。(待验证)

rloa=true关计算器,rloa=false开计算器

if (GetTagBit("rloa")==0)

{

ProgramExecute(""); //Return-Type: unsigned long int

SetTagBit("rloa",1); //Return-Type: BOOL

}

else

{

ProgramExecute("C:Program FilesSiemensWinCCtskill calc"); //Return-Type: unsigned l

ong int

SetTagBit("rloa",0); //Return-Type: BOOL

}

可以在WinCC的C脚本中调用WindowsAPI函数SendMessage(等待进程,比较

温和)或TerminateProcess(立即中止,比较暴力),需要知道VC++编写的exe

的Windows的Class(类)和handler(句柄),可以用VC++的工具Spy++确定

类名和句柄。