Как взаимодействовать с настольными приложениями с помощью приложения Python (доступны Java, C++, VB API)?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как взаимодействовать с настольными приложениями с помощью приложения Python (доступны Java, C++, VB API)?

Сообщение Anonymous »

Я заинтересован в дополнении функций двух разных настольных приложений Windows (Polyworks и Creo 5.0) с помощью Python. Я хотел бы использовать свое приложение Python для автоматизации внутренних задач, а также для интерактивного управления пользователями с помощью специального графического интерфейса.
Creo предлагает API Java, который имеет довольно приличный охват различных функций и более слабый интерфейс. ВБ API. Polyworks SDK «использует архитектуру COM Microsoft для большинства функций (дополнительные функции также предлагаются через API только для C++)».
В Creo — я успешно выполнил примеры программ, взаимодействующих с программа, использующая VB, Java, VBA, а также вызов внутренних файлов языка макросов (файлов следа), созданных с помощью Python.
Меня интересуют более общие советы по эффективному взаимодействию с настольными приложениями, подобными этим. два через API, используя Python? Или можно ожидать от этого большой неэффективности?
Каковы важные первые шаги? Создать библиотеку функций, документировать обычное использование и вложенность функций, а затем начать писать сценарии вызова различных модулей, созданных на Python?
Просто чтобы сделать это более реальным:
Пример приложения Creo Java API
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSolid.*;
import com.ptc.pfc.pfcModelItem.*;
import com.ptc.pfc.pfcFeature.*;
import com.ptc.pfc.pfcExceptions.*;

/**
* The pfcInstallTest makes sure that J-Link has been properly
* installed on your machine.
* It test the pfc and cipjava package functionality
* to make sure that those appear correctly in your CLASSPATH
**/

public class pfcInstallTest{

private Session proeSession;
private int numberOfFeatures;
private int numberOfModels;
private Feature proeFeature;
private Model proeModel;
private Models proeModels;
private ModelItems proeModelItems;

public pfcInstallTest(Session inSession){

proeSession=inSession;
String ModelName = "pfcinstalltest";
boolean status;

status = loadModel(ModelName);

//sleep 2 sec
try{
Thread.sleep(2000);
}
catch(InterruptedException e){
e.printStackTrace();
}

if (status)
{
//Print the information about each feature in the model
//Test the functionality of the cip package using stringsequences
// Test exception throwing/handling
// Test action listeners
// Unlooad the model
status = getInfo() && testCIP() && testException() && testActionListeners() && unloadModel() && testSequences();

}
try
{
if (status)
{
proeSession.UIShowMessageDialog("Install Test Sucessful", null);

}
else
{
proeSession.UIShowMessageDialog("Install Test Has Failed", null);
}
}
catch (Throwable e)
{
e.printStackTrace();
}
}

/**
* This function loads the model and displays it in the Pro/E Session
**/

public boolean loadModel(String sampleName){
ModelType mdl_type = ModelType.MDL_PART;

try{
ModelDescriptor proeModelDescriptor=
pfcModel.ModelDescriptor_Create (mdl_type ,sampleName, "");
printMsg("Created model descriptor: "+(sampleName)+ " type: "+mdl_type.getValue());

proeModel = proeSession.RetrieveModel(proeModelDescriptor);
proeModel.Display();
printMsg("Model was retrieved)");
}
catch(jxthrowable x){
printMsg("pfcException: " + x);
x.printStackTrace ();
return false;
}
return true;
}

Пример клиентского приложения Polywork C++
/* *****************************************************************************
* File: MainReadAndFit.cpp
*
* Description :
*
* Defines the entry point for the console application.
* Reads an ASCII file of a point cloud containing points with coordinates and normals.
* The points are sent to PolyWorks|Inspector, and a sphere is then fitted to them.
* Then, the application verifies if the fit was successful after running a script MSCL.
* -----------------------------------------------------------------------------
* InnovMetric Inc. Copyright ( C ) 2002
* All rights reserved
* ************************************************************************** */

// ===========================================================================
// INCLUDED FILES
// ===========================================================================
#include
#include
#include
#include
#include

#include "PolyWorksSDK/COM/IIMInspect.h"
#include "PolyWorksSDK/COM/IIMInspect_i.c"
#include "PolyWorksSDK/COM/IIMPointCloud.h"
#include "PolyWorksSDK/COM/IIMPointCloud_i.c"
#include "PolyWorksSDK/COM/IIMSceneCamera.h"
#include "PolyWorksSDK/COM/IIMSceneCamera_i.c"
#include "PolyWorksSDK/COM/IMInspect_i.c"

#pragma warning(disable : 4996)

// ===========================================================================
// CONSTANTS
// ===========================================================================
#define COEF 1
#define BUFFLEN COEF* 1020

// ===========================================================================
// GLOBAL VARIABLES
// ===========================================================================
int nbImages = 0;

// color table
const int GRP_RGBA_NB = 25;
const double _rgba_table[ GRP_RGBA_NB ][ 3 ] =
{
{ 1.0, 0.7, 0.7 },
{ 0.7, 1.0, 0.7 },
{ 0.7, 0.7, 1.0 },
{ 1.0, 1.0, 0.6 },
{ 1.0, 0.6, 1.0 },
{ 0.6, 1.0, 1.0 },
{ 0.6, 0.8, 1.0 },
{ 1.0, 0.6, 0.8 },
{ 0.8, 1.0, 0.6 },
{ 1.0, 0.8, 0.6 },
{ 0.6, 1.0, 0.8 },
{ 0.8, 0.6, 1.0 },
{ 0.6, 0.6, 0.6 },
{ 1.0, 0.4, 0.4 },
{ 0.4, 1.0, 0.4 },
{ 0.4, 0.4, 1.0 },
{ 1.0, 1.0, 0.2 },
{ 1.0, 0.2, 1.0 },
{ 0.2, 1.0, 1.0 },
{ 0.2, 0.6, 1.0 },
{ 1.0, 0.2, 0.6 },
{ 0.6, 1.0, 0.2 },
{ 1.0, 0.6, 0.2 },
{ 0.2, 1.0, 0.6 },
{ 0.6, 0.2, 1.0 }
};

// ===========================================================================
// FONCTION PROTOTYPES
// ===========================================================================
wchar_t* CharToWChar( const char* pSrc_, wchar_t* pDest_, size_t size_ );

int FillArraysFromFile( char* filename_,
int nbPoints_,
float** aCoords_,
float** aNormals_,
unsigned char** aColors_ );

int FillSafeArray( int nbBlock_,
int sizeBlock_,
float** aCoords_,
float* ppArrayCoord_,
float** aNormals_,
float* ppArrayNormal_,
unsigned char** aColors_,
unsigned char* ppArrayColor_ );

int FillSafeArrayLast( int startIdx_,
int nbRemainPt_,
int nbTPoints_,
float** aCoords_,
float* ppArrayCoord_,
float** aNormals_,
float* ppArrayNormal_,
unsigned char** aColors_,
unsigned char* ppArrayColor_ );

int NbPointsFromFileGet( char* filename_ );

int Prompt( char* buffer );

// ===========================================================================
// FONCTION DEFINITIONS
// ===========================================================================

/* *****************************************************************************
* Name: main
*
* Description :
*
* Main routine
*
* Parameter: argc : nb of arguments
* Parameter: argv[] : array of arguments
* -------------------------------------------------------------------------- */
int main( int argc, char* argv[] )
{
//----------------------------
// Initializes the COM library
CoInitializeEx( nullptr, COINIT_APARTMENTTHREADED );

//----------------------------
//Global access to a PolyWorks|Inspector
HRESULT hr = 0;
IIMInspect* pIMInspect = nullptr;

CLSID progID = CLSID_IMInspect;
// With the line above, your program will attempt to connect exclusively with the version of PolyWorks|Inspector
// you're currently working with. If the user upgrades to a more recent version of PolyWorks|Inspector, your program
// will not attempt to connect to it.
// Instead, to let your program attempt to work with the latest version of PolyWorks|Inspector installed on the
// user's computer, uncomment the following line and make sure hr is not an error code before continuing.
//hr = CLSIDFromProgID( L"InnovMetric.PolyWorks.IMInspect", &progID );

hr = CoCreateInstance(
progID,
nullptr,
CLSCTX_SERVER,
IID_IIMInspect,
( void** ) &pIMInspect );

if ( !SUCCEEDED( hr ) )
{
CoUninitialize();
return 1;
}


Подробнее здесь: https://stackoverflow.com/questions/623 ... ion-java-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»