Управление окном программы КОМПАС.

Автор p3452, 08.09.19, 09:45:29

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

p3452

Вопрос к знатокам.
КОМПАС не сохраняет размеры своего окна (формы), при закрытии программы :(
Как средствами API получить размеры текущие размеры окна КОМПАС?

Через хендл окна пробовал, но нет доступа к этим свойствам...

Slaviation

ЦитироватьЧерез хендл окна пробовал, но нет доступа к этим свойствам


Добрый день.
GetWindowRect  принимает  хендл окна и возвращает размеры окна. Ниже тест (Python):


import pythoncom
from win32com.client import Dispatch, gencache
from win32gui import GetWindowRect
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
handle = kompas_object.ksGetHWindow()
rect = GetWindowRect(handle)
print(rect)

p3452

Спасибо, Slaviation!
Я, примерно, так и пробовал..., получать то получал, а вот изменить не удавалось.
Методом проб, задачу решил  не через Windows.API а через System.Diagnostics.Process так:

using System;
using System.Linq;
using System.Threading;
using System.Diagnostics;
using System.Windows.Automation;
...
AutomationElement window = null;
var kompasProcess = Process.GetProcessesByName("KOMPAS").FirstOrDefault();
if (kompasProcess != null)
{   
   window = AutomationElement.FromHandle(kompasProcess.MainWindowHandle);
   var transformPattern = (TransformPattern)window.GetCurrentPattern(TransformPattern.Pattern);
   transformPattern.Move(0,0);
   transformPattern.Resize(1400, 1050);
}