wincc6.0运行系统下可以用ProgramExecute打开应用程序,但如何关闭呢?
使用WinCC的动态向导可以为一个按钮组态退出运行系统并关闭计算机的功能,这样做有一个缺点就是在关机时不做任何提示,如果操作人员误操作,将没有反悔的机会。我们给出的项目函数ShutOP就具有和Windows关机一样的特性,即在关机之前弹出一个消息框,给操作员最后一次选择的机会。
sendmessage 关闭窗口使用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 ("user32.dll")
 #pragma code()
// 前面两句可以省略!
 HWND hwnd;
 hwnd = FindWindow(NULL,"WinCC-运行系统 - ");
//这句中的“WinCC-运行系统 - ”为应用程序的标题!(如: “XXXX – 记事本” "WinCC-Runtime - "
 SendMessage(hwnd,WM_CLOSE,0,0);
 }
FindWindowSendMessage还有哪个最小化窗口的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 Files\\Siemens\\WinCC\\tskill calc"); //Return-Type: unsigned long int 
 SetTagBit("rloa",0); //Return-Type: BOOL 
 }
可以在WinCCC脚本中调用WindowsAPI函数SendMessage(等待进程,比较温和)或TerminateProcess(立即中止,比较暴力),需要知道VC++编写的exeWindowsClass(类)和handler(句柄),可以用VC++的工具Spy++确定类名和句柄。
 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。