当前位置:文档之家› WINCC的API编程

WINCC的API编程

如何将其它程序的窗口置于最前面?可以通过使用Windows API 函数FindWindow找到一个窗口的句柄。

假设您希望将一个Microsoft Access 窗口置于最前面:HWND Handle= ZERO;Handle= FindWindow("OMAIN",ZERO);if(Handle){ShowWindow(Handle, SW_MINIMIZE); //ShowWindow ( Handle, SW_SHOWNORMAL );SetForegroundWindow(Handle);}elseProgramExecute("C:\\MSOffice.97\\Office\\ACCESS.EXE");如果没有发现该窗口,随后Microsoft Access 将重新启动。

FindWindow 函数的注意事项:第一个参数是窗口的类。

可以使用编译器(比如:用Visual C++ 中的Spy 命令)找到类。

第二个参数是窗口的标题(标题栏)。

可以指定两个参数中的任何一个,或者两个都指定。

在本{ShowWindow ( Handle, SW_SHOWNORMAL );SetForegroundWindow(Handle);}关键词:编程技巧如何在WinCC 运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个PDF文件?显示订货号说明:WinCC 在动态向导里提供了方便的“启动其他应用程序”功能来启动一个外部程序。

这个向导生成一个C 脚本。

为了给这个程序添加参数,可以打开该脚本并添加相关参数。

下面提供了一些例子,这里只显示了脚本中最重要的那一行语句。

例程序号.调用标准程序:1•ProgramExecute("C:\\WINDOWS\\winhlp32.exe");22560470WinHelp (Windows Help) via API显示订货号QUESTION:Can a user-specific Help be called in a WinCC project?ANSWER:Yes, in WinCC you can call use an API call to call a user-specific Help. With "fuCommand" you can branch to a specific topic. For this you create a new project function with the following code:#pragma code("user32.dll")BOOL WinHelpA(hwnd, lpszHelpFile, fuCommand, dwData);#pragma code()#define HELP_CONTENTS 0x0003Lvoid WinHelpApi(){HWND hwnd; /* handle of window requesting help */char HelpFile[255];UINT fuCommand; /* type of help */DWORD dwData; /* additional data */BOOL bRetVal;LPCTSTR lpszHelp;lpszHelp = HelpFile;strcpy(HelpFile, "c:\\Win.95\\Help\\Calc.hlp");hwnd = FindWindow("PDLRTisAliveAndWaitsForYou","WinCC Runtime - ");fuCommand = HELP_CONTENTS;dwData = 0L;bRetVal=WinHelpA((DWORD) hwnd,(DWORD) lpszHelp, fuCommand, dwData);printf("hwnd: %d \r\n",hwnd);printf("HelpFile: %s \r\n",HelpFile);printf("bRetVal: %d \r\n",bRetVal);}In this example the "Help for Windows Pocket Computers" is opened. If you want to open a different Help file, replace the "HelpFile" string with the path of a different file. If the return value "bRetVal" is equal to 0, an error has occurred. You can now call this project function, for example, by clicking a buttonHere, we are talking about calling a Windows function. Detailed descriptions are given for instance in the documentation for Visual C++. This example is solely to demonstrate how toincorporate the call in WinCC.Print out ASCII file via Action显示订货号QUESTION:.How can I print out an ASCII file via Action?ANSWER:If you want to print out an ASCII file via Action (for example for production data acquisition), then you need to make a function call as follows:system("copy c:\\autoexec.bat \\\\nbgm312a\\ps1cs1");•You must enter the path and filename in the first part of the call.• A network printer is in the second part whose address is given under Printer Properties.Creating a new directory via C scripts显示订货号QUESTION:How can I create a new directory in WinCC with script functions?ANSWER:Use the following program code if you want to create a new directory in WinCC:#pragma code("kernel32.dll");BOOL CreateDirectoryA( LPCTSTR ,LPSECURITY_ATTRIBUTES );#pragma code()'CreateDirectoryA("c:\\test",NULL);使用C函数“Sleep”显示订货号问题:如何在WinCC中编程“Sleep”等待功能?解答:为此,可以使用Windows API功能“Sleep()”。

下面的样例程序演示了如何使用“Sleep”功能。

#pragma code("Kernel32.dll")void Sleep(int Milliseconds);#pragma code()Sleep(1000); //time in milliseconds警告:“Sleep”函数对动作处理性能有很大的负面影响。

因此,如果想用此函数的话,请注意以下几点:•使用Sleep()时,C 脚本的处理在特定的一段时间内被中断。

在此期间内,任何对于被中断功能的请求将不被处理。

•而且,使用相同触发器的所有动作将不再被处理。

使用相同的触发器意味着用同一个循环触发器所有动作或变量触发器的所有动作将不再被处理。

如果同步地调用动作,这种调用通过一个变量触发器或事件被周期性地或非周期性地启动,而且所有这些功能使用了Sleep()函数,那么所有的动作会被终止。

最坏情况下是;由于启动这四个动作将终止对所有动作的处理。

•如果说,在一个带10-秒延迟触发器的动作中使用了Sleep()函数。

那么所有被循环调用的动作将被中断。

结果是,如:用1-秒触发器的动作操作中断,除此以外,所有后继的动作也不被执行。

这就是说,不仅当前的动作不被处理,其它还没有启动的动作也不会被处理。

•作业不被处理是因为中断仍储存在队列中。

一旦中断结束,所有在队列中的动作将开始被处理。

但是,中断结束后,在队列中的动作不会在他们原来指定的循环中被处理。

因此,如同前面所述的那样,那么队列中剩下的动作将被一个接一个的处理而不再由触发器启动。

并且这些动作只是尽可能快的被处理掉。

(理论上同步)。

关键字:性能提高,功能调用如何打开一个应用程序并保持其始终在前台显示?显示订货号Handle = FindWindow(NULL, "Adobe Reader");}GetClassName(Handle, winclass, sizeof (winclass)-1);printf ("Window Class Name: %s \r\n", winclass);}在WinCC中如何加载用户自定义DLLs?显示订货号描述:在WinCC中,您希望使用用户自定义动态链接库,在此条目,我们演示了如何在WinCC中加载一个实例DLL。

在带有VBS的WinCC运行模式下,使用VB创建的DLLs不能被加载。

关于DLLs更多的信息可以在WinCC在线帮助系统下“使用WinCC>用于创建函数和动作的ANSI-C>在函数和动作中使用DLL”过程编号.1实例DLL:使用下面的程序代码,利用C编译器创建动态链接库"T1_C.dll"。

相关主题