Con Perl, es bastante fácil usar la biblioteca Win32::OLE
para cargar objetos COM/OLE y controlarlos. El problema al que me estoy enfrentando es saber exactamente qué métodos y propiedades están disponibles en el objeto al que estoy accediendo. Algunos kits de herramientas OLE en otros idiomas pueden generar una interfaz estática para usted al leer todas las propiedades y métodos que están disponibles en el objeto. ¿Existe una instalación de este tipo con la biblioteca Win32::OLE
de Perl?¿Cómo puedo descubrir programáticamente las propiedades y métodos de un objeto Win32 :: OLE en Perl?
¿Cómo puedo descubrir programáticamente las propiedades y métodos de un objeto Win32 :: OLE en Perl?
Respuesta
Debe acceder directamente a las propiedades desde las claves del objeto Win32::OLE
. Usemos Excel como ejemplo. El código es de Win32 :: OLE examples - properties.pl Mostrará todas las propiedades de un objeto Win32::OLE
.
my $Excel = Win32::OLE->new('Excel.Application', 'Quit');
# Add a workbook to get some more property values defined
$Excel->Workbooks->Add;
print "OLE object's properties:\n";
foreach my $Key (sort keys %$Excel) {
my $Value;
eval {$Value = $Excel->{$Key} };
$Value = "***Exception***" if [email protected];
$Value = "<undef>" unless defined $Value;
$Value = '['.Win32::OLE->QueryObjectType($Value).']'
if UNIVERSAL::isa($Value,'Win32::OLE');
$Value = '('.join(',',@$Value).')' if ref $Value eq 'ARRAY';
printf "%s %s %s\n", $Key, '.' x (40-length($Key)), $Value;
}
en una línea, para obtener todas las propiedades de un Win32 :: objeto OLE:
keys %$OleObject;
Todos los métodos OLE pueden ser recuperados a través de Win32::OLE::TypeInfo
. este bloque de código imprimirá todos los nombres de método de $ OleObject:
my $typeinfo = $OleObject->GetTypeInfo();
my $attr = $typeinfo->_GetTypeAttr();
for (my $i = 0; $i< $attr->{cFuncs}; $i++) {
my $desc = $typeinfo->_GetFuncDesc($i);
# the call conversion of method was detailed in %$desc
my $funcname = @{$typeinfo->_GetNames($desc->{memid}, 1)}[0];
say $funcname;
}
No. pero parece que el código de descubrimiento de tipo necesario es already in Win32::OLE's implementation. Puede usarlo como referencia para escribir su propia extensión Perl que expone la función y los tipos de métodos y nombres.
Una cosa es segura, si usted hace esto:
print Data::Dumper->Dump([ $my_ole_object ])
que es probable que sólo obtendrá un bucle sin fin. Pero puede modificarlo así:
local $Data::Dumper::Maxdepth = 2;
print Data::Dumper->Dump([ $my_ole_object ])
Y entonces al menos puede ver los nombres de las propiedades. Para ver su próximo nivel de valores, necesitará Maxdepth=3
. No estoy seguro de cómo mirar todos los métodos que no sean la documentación.
Si está utilizando ActiveState, hay un navegador OLE incluido (disponible en el menú Inicio). Requiere que habilite "Inicializar y guiar controles ActiveX no marcados como seguros" configuración de seguridad de la "Intranet local" zona, pero generalmente funciona bien y le proporciona una lista de todas las propiedades y métodos junto con sus tipos.
Otra buena fuente es la documentación en aplicaciones individuales: las aplicaciones de MS generalmente vienen con documentos de VBA. Tenga en cuenta que el modelo de objeto descrito en esas aplicaciones es el mismo enlace OLE a.
- 1. ¿Cómo encontrar las propiedades de un objeto?
- 2. Cómo descubrir las propiedades de la tabla del objeto mapeado SQLAlchemy
- 3. ¿Cómo puedo deshacer un objeto en Perl?
- 4. ¿Cómo accedo y llamo a las propiedades y métodos del objeto Javascript desde C++ usando V8?
- 5. silverlight: cómo establecer las propiedades adjuntas Programáticamente
- 6. ¿Cómo puedo enumerar todas las propiedades del objeto Math?
- 7. Métodos de JQuery y propiedades DOM
- 8. ¿Cuál es la mejor manera de descubrir todas las subrutinas que tiene un módulo Perl?
- 9. ¿Cómo puedo ordenar campos, propiedades y métodos en Visual Studio?
- 10. Necesito abrir programáticamente Bluetooth y descubrir dispositivos en Android
- 11. ¿Descubrir a los miembros del objeto Ruby?
- 12. Retorno todas las propiedades de un objeto en Objective-C
- 13. ¿Cómo puedo probar los métodos en un objeto de método?
- 14. cómo averiguar todas las propiedades de un objeto en lua?
- 15. ¿Cómo serializar todas las propiedades de un objeto mapeado-NHibernate?
- 16. ¿Cómo se enumeran las propiedades de un objeto en Python?
- 17. ¿Cómo recorro las propiedades profundamente anidadas de un objeto JavaScript?
- 18. ¿Cómo enumerar todas las propiedades de un objeto Powershell?
- 19. Obtiene recursivamente propiedades y propiedades secundarias de un objeto
- 20. Cómo enumerar las propiedades de un objeto JavaScript
- 21. ¿Cómo puedo iterar sobre las propiedades de un objeto anónimo en C#?
- 22. Extraiga Objeto OLE (pdf) de Access DB
- 23. ¿Cómo puedo redefinir los métodos de clase Perl?
- 24. ¿Cómo enumero las propiedades de un objeto JavaScript?
- 25. Cómo modificar las propiedades de un objeto Matlab
- 26. Iterar a través de las propiedades de un objeto y modificar el objeto original
- 27. ¿Cómo puedo documentar los métodos concisamente en el código Perl?
- 28. ¿Cómo configuro programáticamente las propiedades de tabla predeterminadas para CKEditor?
- 29. ¿Cómo puedo abrir un documento de Word de solo lectura desde Perl?
- 30. ¿Por qué Win32 :: OLE no puede hablar con Excel2003 en Win2003?
Impresionante, me tienes en el camino correcto. ¡Gracias! –