Как программно задать настройки в "Сервис-Система-Файлы"

Автор Pavvert, 31.03.12, 17:04:33

« назад - далее »

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

Pavvert

Здравствуйте, подскажите пожалуйста как программно поменять настройки в
"Сервис-Система-Файлы"

конкретно интересует изменение значений
"Установка прав доступа"
"Резервное копирование" (пути к каталогам)

Использую версию API 5 + Delphi 7 и КОМПАС 3D-v6.

Судя по руководству администратора настройки хранятся в файле "%KOMPAS DIR% / Bin /KOMPAS.Cfg"
но он бинарный, и как с ним работать не понятно.

Думал это делается через ksGetSysOptions и ksSetSysOptions, но нужного типа настройки не нашел, всё что было в LDefin2D.pas - это


// oпределения для функций GetSysOptions и SetSysOptions
  DIMENTION_OPTIONS          = 1; // Настройки размера
  SNAP_OPTIONS               = 1; // Настройки привязок
  ARROWFILLING_OPTIONS       = 2; // Зачернять стрелки ?
  SHEET_OPTIONS              = 3; // Параметры листа документов
  SHEET_OPTIONS_EX           = 4; // Параметры листа документа
  LENGTHUNITS_OPTIONS        = 5; // Настройки единиц измерений
  SNAP_OPTIONS_EX            = 6; // Настройки привязок активного документа
  VIEWCOLOR_OPTIONS          = 7; // Настройки цвета фона рабочего поля (2d - документов)
  TEXTEDIT_VIEWCOLOR_OPTIONS = 8; // Настройки цвета фона редактирования текста
  MODEL_VIEWCOLOR_OPTIONS    = 9; // Настройки цвета фона для моделей



Спасибо.


PS


Pavvert

Спасибо за ответ.
Жаль.

А без API?
Те же файлы KOMPAS.Cfg разобрать как-то можно и прочитать настройки оттуда? Или это как-то так закрытый формат?

PS

При желании разобрать формат можно, только в следующей версии он может измениться и Ваша программа работать не будет.
Не понятно зачем это Вам нужно? Настройте эти параметры в самом Компасе.
Потом, какой смысл писать что либо под Компас 3Dv6, эта версия уже давно ни кого не интересует.


Pavvert

Это единственная лицензионная версия которая есть.
Последующие покупать никто не хочет.
А параметры имеют склонность довольно часто вылетать и становиться по умолчанию по непонятным причинам...

Спасибо. Значит придется разбирать формат.

PS

ЦитироватьА параметры имеют склонность довольно часто вылетать и становиться по умолчанию по непонятным причинам...
Причины могут быть следующие:
1. Кто то их меняет в настройках Компаса.
2. Запускается второй экземпляр Компаса или Компас другой версии (если их установленно несколько) и он переписывает файл конфигурации.
3. Кто то очистил папку с файлом конфигурации.
Обычно файл конфигурации портится именно по второй причине.

Pavvert

Спасибо, вероятно в моем случае второй вариант (второй экземпляр КОМПАСа) - будет проще показать пользователям как самостоятельно менять эти настройки.

Здесь я читаю параметры, а Вам нужно получить их при помощи GetDocOptions, изменить и записать используя SetDocOptions.

DimOptions:PDimensionsOptions;

New(DimOptions);
if DimOptions<>nil then
begin
   GetDocOptions(DIMENTION_OPTIONS,Addr(DimOptions^),SizeOf(DimOptions^));
   SysDimOptions.decimalsCount:=DimOptions^.decimalsCount; // количество знаков после запятой
   SysDimOptions.arrowLength:=DimOptions^.arrowLength; // длина стрелки размера
   SysDimOptions.textDistanceFromDimLine:=DimOptions^.textDistanceFromDimLine; // расстояние от размерной линии до текста
   SysDimOptions.textDistanceFromProLine:=DimOptions^.textDistanceFromProLine; // расстояние от выносных линий до текста
   SysDimOptions.style:=DimOptions^.style; // стиль текста
   Dispose(DimOptions);
end;

snegok74

А можно ли получить значение автора для новых документов, вот из этих настроек.


Альянс

Конечно можно. Вот, например, код на C++Builder.
Файл ПСЛ_2_1.cpp:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ПСЛ_2_1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
DWORD dwProcessId, dwThreadId;
HWND hGridSetup[2], hMDIClient;
LPDISPATCH ActiveDocument2D = NULL, pdispKompasObject = NULL;
LPUNKNOWN punkKompasObject = NULL;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  DispUnkKompasObjectNULL();
  CoUninitialize();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  CoInitialize(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  if (!GetKompasObject())
return;
  DispUnkKompasObjectNULL();
}
//---------------------------------------------------------------------------
void __stdcall DispUnkKompasObjectNULL()
{
  if (ActiveDocument2D)
ActiveDocument2D->Release();
  if (pdispKompasObject)
pdispKompasObject->Release();
  if (punkKompasObject)
punkKompasObject->Release();
  ActiveDocument2D = NULL; pdispKompasObject = NULL; punkKompasObject = NULL;
}
//---------------------------------------------------------------------------
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam)
{
  bool result = true;
  char lpClassName[128] = {0};
  DWORD dwProcessId, dwThreadId;
  int nMaxCount;
  LPTSTR lpString[2] = {NULL};
  if (lParam == 0) {
lpString[1] = "Настройка сетки";
  } else if (lParam == 2) {
lpString[1] = "Фрагмент БЕЗ ИМЕНИ";
  }
  nMaxCount = GetWindowTextLength(hwnd);
  if (nMaxCount > 0) {
lpString[0] = (LPTSTR)GlobalAlloc(GPTR, nMaxCount + 2);
GetWindowText(hwnd, lpString[0], nMaxCount + 1);
  }
  if (lParam == 0 && lpString[0]) {
if (strstr(lpString[0], lpString[1])) {
  RealGetWindowClass(hwnd, lpClassName, 127);
  if (strstr(lpClassName, "#32770")) {
hGridSetup[1] = hwnd;
result = false;
  }
}
  } else if (lParam == 1) {
RealGetWindowClass(hwnd, lpClassName, 127);
if (strstr(lpClassName, "MDIClient")) {
  hMDIClient = hwnd;
  result = false;
}
  } else if (lParam == 2 && lpString[0]) {
if (strstr(lpString[0], lpString[1])) {
  ShowWindow(hwnd, SW_MAXIMIZE);
  result = false;
}
  }
  if (nMaxCount > 0)
GlobalFree(lpString[0]);
  return result;
}
//---------------------------------------------------------------------------
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
  bool result = true;
  DWORD dwProcessId, dwThreadId;
  int nMaxCount;
  LPTSTR lpString[2];
  if (lParam == 0) {
lpString[1] = "КОМПАС-3D";
  } else if (lParam == 1) {
lpString[1] = "Параметры";
  }
  nMaxCount = GetWindowTextLength(hwnd);
  if (nMaxCount > 0) {
lpString[0] = (LPTSTR)GlobalAlloc(GPTR, nMaxCount + 2);
GetWindowText(hwnd, lpString[0], nMaxCount + 1);
if (strstr(lpString[0], lpString[1])) {
  if (lParam == 0) {
dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
if (dwProcessId == ::dwProcessId && dwThreadId != ::dwThreadId) {
  SendMessage(hwnd, WM_CLOSE, 0, 0);
  result = false;
}
  } else if (lParam == 1) {
hGridSetup[1] = NULL;
EnumChildWindows(hwnd, &EnumChildWindowsProc, 0);
if (hGridSetup[1]) {
          hGridSetup[0] = hwnd;
  result = false;
}
  }
}
GlobalFree(lpString[0]);
  }
  return result;
}
//---------------------------------------------------------------------------
bool __stdcall GetKompasObject()
{
  CLSID clsid = IID_NULL;
  HWND hChildWnd;
  LPCTSTR _05 = "0.5";
  unsigned char flag = 0x00;
  VARIANT ActiveDocument2D, Application7, hMainWnd, ksDocument2D, ksDocumentParam,
ksSnapOptions, propValDest, propValSrc[2];
  DispUnkKompasObjectNULL();
  if (SUCCEEDED(CLSIDFromProgID(L"KOMPASLT.Application.5", &clsid)))
if (SUCCEEDED(GetActiveObject(clsid, NULL, &punkKompasObject)))
  flag = 0x01;
else if (SUCCEEDED(CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&punkKompasObject)))
  flag = 0x02;
  if (!flag)
return false;
  if (FAILED(punkKompasObject->QueryInterface(IID_IDispatch, (void**)&pdispKompasObject))) {
DispUnkKompasObjectNULL();
return false;
  }
  propValSrc[0].vt = VT_BOOL;
  propValSrc[0].boolVal = true;
  SetProperty(pdispKompasObject, L"Visible", propValSrc[0]);
  GetProperty(pdispKompasObject, L"ActiveDocument2D", &propValDest, NULL, 0);
  if (flag == 0x02 || !propValDest.pdispVal) {
GetProperty(pdispKompasObject, L"ksGetHWindow", &hMainWnd, NULL, 0);
dwThreadId = GetWindowThreadProcessId((HWND)hMainWnd.lVal, &dwProcessId);
EnumWindows(&EnumWindowsProc, 0);
// Настроить параметры документа и создать его
propValSrc[0].vt = VT_I2;
propValSrc[0].iVal = ko_DocumentParam;
InvokeHelper(pdispKompasObject, L"GetParamStruct", &ksDocumentParam, propValSrc, 1);
InvokeHelper(ksDocumentParam.pdispVal, L"Init", &propValDest, NULL, 0);
propValSrc[0].vt = VT_UINT;
propValSrc[0].uintVal = lt_DocFragment;
InvokeHelper(ksDocumentParam.pdispVal, L"type", &propValDest, propValSrc, 1);
InvokeHelper(pdispKompasObject, L"Document2D", &ksDocument2D, NULL, 0);
InvokeHelper(ksDocument2D.pdispVal, L"ksCreateDocument", &propValDest, &ksDocumentParam, 1);
ksDocument2D.pdispVal->Release();
ksDocumentParam.pdispVal->Release();
EnumChildWindows((HWND)hMainWnd.lVal, &EnumChildWindowsProc, 1);
EnumChildWindows(hMDIClient, &EnumChildWindowsProc, 2);
GetProperty(pdispKompasObject, L"ksGetApplication7", &Application7, NULL, 0);
// Включить/выключить отображение сетки
propValSrc[1].vt = VT_UINT;
propValSrc[1].uintVal = ksCMGridOnOf;
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = false;
InvokeHelper(Application7.pdispVal, L"ExecuteKompasCommand", &propValDest, propValSrc, 2);
// Настроить параметры сетки <-> SendMessage((HWND)hMainWnd.lVal, WM_COMMAND, MAKELONG(6090, 0), 0);
propValSrc[1].vt = VT_UINT;
propValSrc[1].uintVal = ksCMGridSetup;
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = false;
InvokeHelper(Application7.pdispVal, L"ExecuteKompasCommand", &propValDest, propValSrc, 2);
EnumWindows(&EnumWindowsProc, 1);
SendDlgItemMessage(hGridSetup[1], 0x265, BM_CLICK, 0, 0);
SendDlgItemMessage(hGridSetup[1], 0x26F, CB_INSERTSTRING, 0, (long)_05);
SendDlgItemMessage(hGridSetup[1], 0x26F, CB_SETCURSEL, 0, 0);
SendDlgItemMessage(hGridSetup[1], 0x270, CB_INSERTSTRING, 0, (long)_05);
SendDlgItemMessage(hGridSetup[1], 0x270, CB_SETCURSEL, 0, 0);
SendDlgItemMessage(hGridSetup[0], 1, BM_CLICK, 0, 0);
// Включить/выключить действие глобальных привязок
propValSrc[1].vt = VT_UINT;
propValSrc[1].uintVal = ksCMSnapSuspend;
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = false;
InvokeHelper(Application7.pdispVal, L"ExecuteKompasCommand", &propValDest, propValSrc, 2);
Application7.pdispVal->Release();
// Настройка и установка глобальных привязок текущего документа
propValSrc[0].vt = VT_I2;
propValSrc[0].iVal = ko_SnapOptions;
InvokeHelper(pdispKompasObject, L"GetParamStruct", &ksSnapOptions, propValSrc, 1);
InvokeHelper(ksSnapOptions.pdispVal, L"Init", &propValDest, NULL, 0);
propValSrc[0].vt = VT_I4;
propValSrc[0].lVal = SN_DYNAMICALLY | SN_ASSISTANT;
SetProperty(ksSnapOptions.pdispVal, L"commonOpt", propValSrc[0]);
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = true;
SetProperty(ksSnapOptions.pdispVal, L"grid", propValSrc[0]);
propValSrc[0].vt = VT_I2;
propValSrc[0].iVal = SN_GRID;
SetProperty(ksSnapOptions.pdispVal, L"localSnap", propValSrc[0]);
propValSrc[1].vt = VT_I4;
propValSrc[1].lVal = SNAP_OPTIONS;
propValSrc[0].vt = VT_DISPATCH;
propValSrc[0].pdispVal = ksSnapOptions.pdispVal;
InvokeHelper(pdispKompasObject, L"ksSetSysOptions", &propValDest, propValSrc, 2);
ksSnapOptions.pdispVal->Release();
  }
  GetProperty(pdispKompasObject, L"ActiveDocument2D", &ActiveDocument2D, NULL, 0);
  ::ActiveDocument2D = ActiveDocument2D.pdispVal;
  return true;
}
//---------------------------------------------------------------------------
bool __stdcall GetProperty(LPDISPATCH pDisp, wchar_t *szName, VARIANT *propValDest, VARIANT propValSrc[], unsigned int cpropValSrc)
{
  bool result = false;
  long rgDispId[1];
  wchar_t *rgszNames[1] = {szName};
  if (SUCCEEDED(pDisp->GetIDsOfNames(IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId))) {
DISPPARAMS DispParams = {0};
DispParams.rgvarg = propValSrc;
DispParams.cArgs = cpropValSrc;
if (SUCCEEDED(pDisp->Invoke(rgDispId[0], IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &DispParams, propValDest, NULL, NULL)))
  result = true;
  }
  return result;
}
//---------------------------------------------------------------------------
bool __stdcall InvokeHelper(LPDISPATCH pDisp, wchar_t *szName, VARIANT *propValDest, VARIANT propValSrc[], unsigned int cpropValSrc)
{
  bool result = false;
  long rgDispId[1];
  wchar_t *rgszNames[1] = {szName};
  if (SUCCEEDED(pDisp->GetIDsOfNames(IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId))) {
DISPPARAMS DispParams = {0};
DispParams.rgvarg = propValSrc;
DispParams.cArgs = cpropValSrc;
if (SUCCEEDED(pDisp->Invoke(rgDispId[0], IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &DispParams, propValDest, NULL, NULL)))
  result = true;
  }
  return result;
}
//---------------------------------------------------------------------------
bool __stdcall SetProperty(LPDISPATCH pDisp, wchar_t *szName, VARIANT propValSrc)
{
  bool result = false;
  long rgDispId[1];
  wchar_t *rgszNames[1] = {szName};
  if (SUCCEEDED(pDisp->GetIDsOfNames(IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId))) {
DISPPARAMS DispParams = {0};
VARIANT rgvarg[1] = {0};
rgvarg[0] = propValSrc;
DispParams.rgvarg = rgvarg;
DispParams.cArgs = 1;
if (SUCCEEDED(pDisp->Invoke(rgDispId[0], IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &DispParams, NULL, NULL, NULL)))
      result = true;
  }
  return result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
  wchar_t curDir[MAX_PATH / 2 + 2] = {0};
  GetCurrentDirectoryW(MAX_PATH / 2 + 2, curDir);
  wcscat(curDir, L"\\tmp.frw");
  ShowMessage(UnicodeString(curDir));
}
//---------------------------------------------------------------------------

Файл ПСЛ_2_1.h:

//---------------------------------------------------------------------------
#ifndef ПСЛ_2_1H
#define ПСЛ_2_1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Buttons.hpp>
#include <ComObj.hpp>
#include <ldefin2d.h>
#include <ksConstants.h>
#include <math.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPageControl *PageControl1;
TTabSheet *TabSheet1;
TSpeedButton *SpeedButton1;
TSpeedButton *SpeedButton2;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall SpeedButton2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
void __stdcall DispUnkKompasObjectNULL();
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam);
BOOL CALLBACK EnumWindowsProc(HWND, LPARAM);
bool __stdcall GetKompasObject();
bool __stdcall GetProperty(LPDISPATCH, wchar_t *, VARIANT *, VARIANT[], unsigned int);
bool __stdcall InvokeHelper(LPDISPATCH , wchar_t *, VARIANT *, VARIANT[], unsigned int);
bool __stdcall SetProperty(LPDISPATCH, wchar_t *, VARIANT);
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Альянс

Я столкнулся с проблемой как при создании нового документа настроить мне нужные параметры сетки. В SDK.hlp я ничего не нашел. Зато наткнулся на интересную команду IApplication::ExecuteKompasCommand и один из параметров к ней ksCMGridSetup=36090 - Настроить параметры сетки. При ее выполнении вылетает диалоговое окно, такое же как на картинке у snegok74, только с вкладкой Текущее окно.
Обратим внимание на функции:
  BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam);
  BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
  bool __stdcall GetKompasObject();
Описание работы функции bool __stdcall GetKompasObject():
1) Фрагмент кода:

  CLSID clsid = IID_NULL;
  HWND hChildWnd;
  LPCTSTR _05 = "0.5";
  unsigned char flag = 0x00;
  VARIANT ActiveDocument2D, Application7, hMainWnd, ksDocument2D, ksDocumentParam,
ksSnapOptions, propValDest, propValSrc[2];
  DispUnkKompasObjectNULL();
  if (SUCCEEDED(CLSIDFromProgID(L"KOMPASLT.Application.5", &clsid)))
if (SUCCEEDED(GetActiveObject(clsid, NULL, &punkKompasObject)))
  flag = 0x01;
else if (SUCCEEDED(CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&punkKompasObject)))
  flag = 0x02;
  if (!flag)
return false;
  if (FAILED(punkKompasObject->QueryInterface(IID_IDispatch, (void**)&pdispKompasObject))) {
DispUnkKompasObjectNULL();
return false;
  }
  propValSrc[0].vt = VT_BOOL;
  propValSrc[0].boolVal = true;
  SetProperty(pdispKompasObject, L"Visible", propValSrc[0]);
  GetProperty(pdispKompasObject, L"ActiveDocument2D", &propValDest, NULL, 0);

Описание:
  - инициализация переменных;
  - подключение к Компасу, если он не загружен в память, то загружаем его туда и делаем его видимым;
  - получаем интерфейсы Компаса и активного документа в нем.
2) Фрагмент кода:

  if (flag == 0x02 || !propValDest.pdispVal) {
GetProperty(pdispKompasObject, L"ksGetHWindow", &hMainWnd, NULL, 0);
dwThreadId = GetWindowThreadProcessId((HWND)hMainWnd.lVal, &dwProcessId);
EnumWindows(&EnumWindowsProc, 0);
// Настроить параметры документа и создать его
propValSrc[0].vt = VT_I2;
propValSrc[0].iVal = ko_DocumentParam;
InvokeHelper(pdispKompasObject, L"GetParamStruct", &ksDocumentParam, propValSrc, 1);
InvokeHelper(ksDocumentParam.pdispVal, L"Init", &propValDest, NULL, 0);
propValSrc[0].vt = VT_UINT;
propValSrc[0].uintVal = lt_DocFragment;
InvokeHelper(ksDocumentParam.pdispVal, L"type", &propValDest, propValSrc, 1);
InvokeHelper(pdispKompasObject, L"Document2D", &ksDocument2D, NULL, 0);
InvokeHelper(ksDocument2D.pdispVal, L"ksCreateDocument", &propValDest, &ksDocumentParam, 1);
ksDocument2D.pdispVal->Release();
ksDocumentParam.pdispVal->Release();
EnumChildWindows((HWND)hMainWnd.lVal, &EnumChildWindowsProc, 1);
EnumChildWindows(hMDIClient, &EnumChildWindowsProc, 2);
GetProperty(pdispKompasObject, L"ksGetApplication7", &Application7, NULL, 0);
// Включить/выключить отображение сетки
propValSrc[1].vt = VT_UINT;
propValSrc[1].uintVal = ksCMGridOnOf;
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = false;
InvokeHelper(Application7.pdispVal, L"ExecuteKompasCommand", &propValDest, propValSrc, 2);
// Настроить параметры сетки <-> SendMessage((HWND)hMainWnd.lVal, WM_COMMAND, MAKELONG(6090, 0), 0);
propValSrc[1].vt = VT_UINT;
propValSrc[1].uintVal = ksCMGridSetup;
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = false;
InvokeHelper(Application7.pdispVal, L"ExecuteKompasCommand", &propValDest, propValSrc, 2);
EnumWindows(&EnumWindowsProc, 1);
SendDlgItemMessage(hGridSetup[1], 0x265, BM_CLICK, 0, 0);
SendDlgItemMessage(hGridSetup[1], 0x26F, CB_INSERTSTRING, 0, (long)_05);
SendDlgItemMessage(hGridSetup[1], 0x26F, CB_SETCURSEL, 0, 0);
SendDlgItemMessage(hGridSetup[1], 0x270, CB_INSERTSTRING, 0, (long)_05);
SendDlgItemMessage(hGridSetup[1], 0x270, CB_SETCURSEL, 0, 0);
SendDlgItemMessage(hGridSetup[0], 1, BM_CLICK, 0, 0);
// Включить/выключить действие глобальных привязок
propValSrc[1].vt = VT_UINT;
propValSrc[1].uintVal = ksCMSnapSuspend;
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = false;
InvokeHelper(Application7.pdispVal, L"ExecuteKompasCommand", &propValDest, propValSrc, 2);
Application7.pdispVal->Release();
// Настройка и установка глобальных привязок текущего документа
propValSrc[0].vt = VT_I2;
propValSrc[0].iVal = ko_SnapOptions;
InvokeHelper(pdispKompasObject, L"GetParamStruct", &ksSnapOptions, propValSrc, 1);
InvokeHelper(ksSnapOptions.pdispVal, L"Init", &propValDest, NULL, 0);
propValSrc[0].vt = VT_I4;
propValSrc[0].lVal = SN_DYNAMICALLY | SN_ASSISTANT;
SetProperty(ksSnapOptions.pdispVal, L"commonOpt", propValSrc[0]);
propValSrc[0].vt = VT_BOOL;
propValSrc[0].boolVal = true;
SetProperty(ksSnapOptions.pdispVal, L"grid", propValSrc[0]);
propValSrc[0].vt = VT_I2;
propValSrc[0].iVal = SN_GRID;
SetProperty(ksSnapOptions.pdispVal, L"localSnap", propValSrc[0]);
propValSrc[1].vt = VT_I4;
propValSrc[1].lVal = SNAP_OPTIONS;
propValSrc[0].vt = VT_DISPATCH;
propValSrc[0].pdispVal = ksSnapOptions.pdispVal;
InvokeHelper(pdispKompasObject, L"ksSetSysOptions", &propValDest, propValSrc, 2);
ksSnapOptions.pdispVal->Release();
  }
  GetProperty(pdispKompasObject, L"ActiveDocument2D", &ActiveDocument2D, NULL, 0);
  ::ActiveDocument2D = ActiveDocument2D.pdispVal;

Описание: Если интерфейс активного документа не ноль (документ уже создан), то выходим из функции успешно, а иначе создаем фрагмент и настраиваем его и Компас по нужным мне параметрам:
GetProperty(pdispKompasObject, L"ksGetHWindow", &hMainWnd, NULL, 0);
dwThreadId = GetWindowThreadProcessId((HWND)hMainWnd.lVal, &dwProcessId);
EnumWindows(&EnumWindowsProc, 0);

  - Получаем дескриптор главного окна, идентификатор процесса и потока главного окна. Функцией EnumWindows с последним параметром 0 закрываем окно справки, которое вылетает иногда при загрузке Компас.

EnumChildWindows((HWND)hMainWnd.lVal, &EnumChildWindowsProc, 1);
EnumChildWindows(hMDIClient, &EnumChildWindowsProc, 2);

  - Эти две функции, после создания MDI-окна активного документа, делают его развернутым максимально.

EnumWindows(&EnumWindowsProc, 1);
SendDlgItemMessage(hGridSetup[1], 0x265, BM_CLICK, 0, 0);
SendDlgItemMessage(hGridSetup[1], 0x26F, CB_INSERTSTRING, 0, (long)_05);
SendDlgItemMessage(hGridSetup[1], 0x26F, CB_SETCURSEL, 0, 0);
SendDlgItemMessage(hGridSetup[1], 0x270, CB_INSERTSTRING, 0, (long)_05);
SendDlgItemMessage(hGridSetup[1], 0x270, CB_SETCURSEL, 0, 0);
SendDlgItemMessage(hGridSetup[0], 1, BM_CLICK, 0, 0);

  - И, наконец, самое главное по нашей теме. После показа нашего диалогового окна Параметры функция EnumWindows(&EnumWindowsProc, 1); вычисляет его дескриптор hGridSetup[0] и дескриптор его дочернего окна Настрока сетки, находящегося в поле диалога Параметры, hGridSetup[1]. Посылаем сообщения окну Настройка сетки, делая нужные мне настройки в этом окне. Функцией SendDlgItemMessage(hGridSetup[0], 1, BM_CLICK, 0, 0); - нажатие ОК, закрываем диалог Параметры и настройка сетки вступает в силу по нужным мне параметрам.

Функцией IApplication::ExecuteKompasCommand можно запустить много процессов, в SDK они приведены, не все правда, но можно вычислить при помощи IApplication::IsKompasCommandCheck не документированные.
Подробнее можно прочитать в SDK  - константа из перечисления ProcessTypeEnum или ksKompasCommandEnum

Альянс

Мне нужна была Настройка сетки диалога Параметры. В SDK есть какие-то сетки, но не то - это что-то другое связанное с 3D. Просто названия похожи. Недокументированные - как их вычислять, я не знаю.

Легко и просто, диапазон ID процессов можете менять, где их взять, писал выше.
for I:=33000 to 36000 do if KompasApi.IsKompasCommandCheck(I)=1 then Kompas.ksMessage(inttostr(I));