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++确定
类名和句柄。


发布评论