Я пытаюсь изменить размер открытого окна, и, поскольку в Wonderware Application Server, кажется, нет способа сделать это, я подумал, что, возможно, функция .Net может работать. Я использовал приведенный ниже сценарий System.Windows.Forms.MessageBox.Show в сервере приложений Wonderware со сценарием активации кнопки. Есть ли аналогичная функция для простого изменения высоты и ширины текущего активного окна?
Окно сообщения является лишь примером того, что приложение Wonderware Application Server может получить доступ к некоторым функциям System.Windows.Forms в своих сценариях QuickScript.NET. Библиотека Windows Forms (system.windows.forms.dll) была импортирована в приложение Wonderware Application Server. Сценарий будет работать в открытом окне, и я хотел бы изменить его размер, но я не могу заставить функцию размера .Net работать в QuickScript.NET.
Нашел этот пример DLL системной платформы http://www.plctalk.net/qanda/showthread.php?t=114301, но Visual Studio имеет около 20 различных шаблонов библиотеки классов. Если я попробую библиотеку классов (.Net Framework) - шаблон С#, я получу dll и смогу импортировать ее в системную платформу, затем я смогу найти функцию в браузере функций, но во время выполнения ничего не происходит, когда скрипт запускается, и я получаю это ошибка в журнале SMC: исключение выполнения скрипта. Сообщение: нестатический метод требует цели..
Демонстрация — Visual Studio 2019 и библиотека классов (.Net Framework) — код шаблона C#:
namespace ClassLibraryDemo
{
public class DemoClass
{
public int GetAdd(int a, int b)
{
return a + b;
}
}
}
Демонстрация — сценарий кнопки системной платформы — для этого демонстрационного кода теперь он работает с добавленной строкой cls = new.
dim cls as ClassLibraryDemo.DemoClass;
cls = new ClassLibraryDemo.DemoClass();
Me.°Test = cls.GetAdd(Me.°Test,3);
К сожалению, код изменения размера, который мне нужен, по-прежнему имеет нестатическую ошибку, и в нем уже есть объект, равный новой строке.
ResizableForm — Visual Studio 2019 и библиотека классов (.Net Framework) — код шаблона C#:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace ClassLibraryROB4
{
public class ResizableForm
{
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
public Form GetCurrentWindow()
{
IntPtr activeWindowHandle = GetForegroundWindow();
Form f = Control.FromHandle(activeWindowHandle) as Form;
return f;
}
}
}
ResizableForm — скрипт кнопки системной платформы. Теперь с Try-Catch
Try
Dim myLib As ClassLibraryROB4.ResizableForm;
Dim myGfc As System.Windows.Forms.Form;
myLib = new ClassLibraryROB4.ResizableForm();
myGfc = myLib.GetCurrentWindow();
myGfc.Width = 10;
myGfc.Height = 10;
catch LogError(error); endtry;
Ошибка SMC — попробуйте поймать
A900.Faceplate1_Control.BUTTON2: System.Reflection.TargetException: Non-static method requires a target.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at ArchestrA.QuickScript.EvaluateFunction.Evaluate(IReferenceManagerRuntime rmr)
at ArchestrA.QuickScript.RunExpressionStatement.Run(RuntimeContext context)
at ArchestrA.QuickScript.RunStatements.Run(RuntimeContext context)
at ArchestrA.QuickScript.RunTryCatch.Run(RuntimeContext context)