El type OutlookMailClient, para administrar una cuenta online de Outlook.com (Hotmail) mediante la API de Microsoft Office 365 y Active Directory (ADAL). No es una class muy completa, pero facilita y simplifica tareas cotidianas como autorizarse, obtener acceso a una carpeta, obtener los mensajes de una carpeta, eliminar mensajes y/o moverlos a otra carpeta, con lo que se puede desarrollar un bonito crawler en unos pocos y sencillos pasos, u otras trastadas mayores... (esta class usa métodos asíncronicos así que solo es visible en la versión de ElektroKit que corre bajo los runtimes de .Net Framework 4.5)
La class ImgurUtil y el type ImgurUploader, para hospedar imágenes en Internet mediante la API de Imgur.
La class DwmPreviewManager, para administrar las imágenes que windows usará para generar la previsualización en miniatura d enuestra app, y también la previsualización peek (Aero Peek). Esta funcionalidad es algo curiosa, me gusta inetntar cosas exóticas .
Nuevas propiedades para trucar algunos parámetros de Windows en la class SystemParameters, como por ejemplo mostrar/ocultar los archivos ocultos del sistema y los archivos protegidos, activar/desactivar la selección de elementos del Explorer mediante el checkbox de selección, ejecutar las instancias de Explorer.exe en procesos paralelos, activar/desactivar el diálogo de confirmación de eliminación de archivos, y mucho más!. (los cambios realizados mediante esas propiedades tienen efecto AL INSTANTE, a diferencia de otras implementaciones que se pueden encontrar por Internet que se basan en un uso brusco del registro de Windows lo que implica un reinicio de sesión para aplicar los cambios ;-D)
Métodos para la compresión de imágenes (reducción de tamaño más bien), y la extracción y/o el conteo de iconos de un archivo, en la class ImageUtil.
Métodos para comprobar la versión del sistema perativo actual (incluyendo Windows 10), en la class OS.
Métodos para administrar el esquema de energía actual, en la class Power (véase también el type PowerPlan).
Métodos de carga y descarga de Hives de registro (SAM, NTUSER.DAT, etc.) en la class Registry (métodos: LoadHive y UnloadHive).
Propiedades para establecer el modo de error de la aplicación o el thread actual, en la class AppUtil (Propiedades: ProcessErrorMode y ThreadErrorMode)
Nuevos métodos de descarga asincrónica de archivos, en la class WebUtil.
El método ShowShellAboutDialog en la class Applets, para mostrar un diálogo de shell-about personalizado.
Métodos para asignar un proceso como crítico, y también para asignar o eliminar privilegios expecíficos de procesos, en la class ProcessUtil.
La class VisualBasicProjectFileManager para manipular en tiempo de ejecución las propiedades de un archivo de proyecto de VB.NET (proyecto.vbproj).
La class DelphiUtil con un simple método de conversión de equivalencia de tipos para ayudar sobre la interoperabilidad entre Delphi y .NET Framework.
Los siguientes types para la interoperabilidad entre Win32: SafeWindowHandle, SafeIconHandle, SafeBitmapHandle, SafeCursorHandle, SafeRegionHandle, y ZeroInvalidHandle (base class).
La enumeración HResult para facilitar la programación de código no administrado, la cual contiene los códigos HRESULT más conocidos, incluyendo los códigos HRESULT controlados por las excepciones administradas de .NET Framework.
Una basta cantidad de nuevas funciones Win32 (públicas) en la class NativeMethods, con sus correspondientes types, interfaces y enumeraciones en el namespace Elektro.Interop.Win32.
Se ha extendido considerablemente los types del namespace Elektro.Application.ThirdParty.TagLibSharp, ahora soportan la manipulación de tags APEv2 y Lyrics3.
He modificado el nombre de todos los valores de la enumeración WindowsMessages y EditControlMessages, del patrón "WmAbc" a "WM_Abc"; no es correcto añadir un guión bajo en .NET, pero esto facilitará la experiencia de usabilidad al programar en código no administrado.
He destripado y eliminado todos los miembros innecesarios del proyecto de terceros WindowsAPICodePack, como los controles de usuario, por lo que ahora es una versión reducida y liviana específica para el uso de ElektroKit. Tenerlo en cuenta, por que he eliminado muchas características que venían en la versión completa de Microsoft.
El proyecto ElektroKit.sln ahora es compilado con Visual Studio 2015, lo comento por que no se muy bien si esto afectará a usuarios que intenten compilar en versiones anteriores de Visual Studio.
El tamaño total de las librerías de ElektroKit, tanto en modo DEBUG como RELEASE, se ha reducido bastante, ahora pesan alrededor de 1,20 MB en su totalidad los 9 archivos .dll. Esto se debe al modo en que las compila Visual Studio 2015.
La class Input, que está relacionada con la API Win32 RAW_INPUT (implementada en funcionalidades de keylogging y mouselogging en el namespace Elektro.Core.IO) se ha dividido en dos classes distintas, Input32 y Input64. Esto es experimental y no lo he testeado, en caso de que Input32 no funcionase en equipos de 32-Bit entonces usar siempre la class Input64, debería funcionar.
Correcciones:
El método RedirectUrl en la class WebUtil no redireccionaba correctamente si la url apuntaba hacia ciertos servicios conocidos, como por ejemplo una url de RapidGator.net. El motivo de este fallo es específico de cada servidor y sus headers, pero como solución generalizada y alternativa he añadido un overload para especificar un user-agent personalizado, lo cual funcionará según que servicios (para RapidGator.net, funciona).
No se estaba disminuyendo correctamente a 0 la cantidad de referencias R.C.W. de algunos objetos COM que se usan internamente por algunas classes de ElektroKit, Esto se ha solucionado llamando directamente al método Marshal.FinalReleaseComObject() en lugar de disminuir 1 sola referencia con Marshal.ReleaseComObject().
Se han limpiado y dereferenciado todos los ensamblados y namespaces de .NET Framework innecesarios.
Algunos módulos de extensiones no eran visibles mediante Intellisense al intentar escribir el namespace completo, eso se debe a que el nombre del módulo se llamaba de la misma manera que algún método en su interior, la solución ha sido cambiar el nombre de los módulos conflictivos. Este cambio no afecta en absoluto en caso de que estuviesemos utilizando las extensiones de método de forma regular (type.Extension()) y no escribiendo el namespace completo (Namespace.Extension(type)).
Constantes refactorizaciones/optimizaciones por aquí y por allá, sin mayor importancia en realidad, pero los nombres de algunos miembros de ElektroKit pueden haber cambiado, o su modo de empleo.
Saludos!
« Última modificación: 28 Mayo 2016, 09:12 am por Eleкtro »
En esta versión, los cambios más importantes son estéticos y no afectan al usuario final. Literálmente he tenido que modificar una a una las más de mil classes/archivos que componen a ElektroKit para realizar estos cambios; ha sido una refactorización bastante completa de la jerarquía y herencia de miembros, así que aunque esto no sea una actualización con muchas características nuevas, se puede decir que es una gran actualización como para llamarse v1.7.
Cabe mencionar que como consecuencia de los cambios estéticos, las librerias ocupen menos, y los documentos Xml mucho menos.
También he corregido algunos pequeños bugs, he añadido nuevos métodos y types, y he refactorizado algunas partes del código fuente, pero no hay nada que destacar en todo ello.
Saludos.
« Última modificación: 27 Junio 2016, 17:05 pm por Eleкtro »
Todas las clases de ElektroKit que heredan del tipo EventArgs y Exception se han agrupado en namespaces/directorios aparte, ahora el código fuente y su representación visual está algo más organizada.
Añadida la class HUDForm en el namespace Elektro.Application.ThirdParty.SharpDX.Types para tener la base principal con la que poder desarrollar una ventana HUD para un juego de terceros (es muy básico).
Añadida la class LibVideoUtil para descargar videos de Youtube mediante la librería libvideo (el sucesor no oficial de YoutubeExtractor) Elektro.Application.ThirdParty.LibVideo.Tools.LibVideoUtil.
Añadido varios módulos de extensiones para facilitar el uso de la API oficial de Youtube, en el namespace: Elektro.Application.ThirdParty.Google.Youtube.Extensions.
Añadido métodos adicionales de descagra de datos en la class WebUtil (DownloadData(), DownloadDataAsync(), DownloadImage(), DownloadImageAsync()).
Añadido extensiones adicionales para el reciclaje de archivos y directorios en los módulos de extensiones: Elektro.Core.IO.Extensions.FileInfo y Elektro.Core.IO.Extensions.DirectoryInfo. (FileInfo.Recycle() y DirectoryInfo.Recycle())
Añadido métodos de extensiones para el agrupamiento y la unión de agrupamientos para colecciones IEnumerable , en el namespace: Elektro.Core.Generics.Extensions.IEnumerable (archivos: Group.vb y Join.vb).
PD: Muchas de las características mencionadas de ElektroKit solo están disponibles en los ensamblados compilados bajo .Net Framework 4.5.
Saludos!
« Última modificación: 17 Julio 2016, 18:32 pm por Eleкtro »
ElektroKit ahora también se distribuye bajo .NET Framework 4.6.
La herramienta AutomatedCompilerTask.exe que acompaña al código fuente de ElektroKit, la cual sirve para compilar de forma totalmente automatizada todas las configuraciones y plataformas del proyecto, ha sido actualizada para soportar .NET Framework 4.6.
Añadida la class GoogleSearch para utilizar el servicio de búsqueda de Google (de forma gratuita) mediante el type GoogleSearchOptions, y obtener los resultados de búsqueda representados con el type GoogleSearchResult.
El método genérico Elektro.Core.Diagnostics.Tools.ProfillingUtil.SwapObjects(Of T)(T, T) para invertir el valor de dos objetos.
El método Elektro.Application.UI.Tools.CLI.CLIUtil.SpinCursor() y Elektro.Application.UI.Tools.CLI.CLIUtil.SpinCursorTask() para crear una animación peculiar de "cargando..." para una aplicación de consola.
Se han añadido los siguientes métodos asincrónicos a la class Elektro.Application.UI.Tools.CLI.TypeWritter
WriteTask() As Task
WriteLineTask() As Task
WriteColorTask() As Task
WriteColorLineTask() As Task
La extensión NameValueCollection.ToGETRequestString() para facilitar el formato de un string para realizar una petición GET a un servicio Web.
Más overloads añadidos para el método Elektro.Application.Tools.AppUtil.SleepRandom()
La class Elektro.Interop.Tools.CompilerUtil.SubsystemVersions pasa de ser privada a pública, para el uso que se le pueda dar fuera de ElektroKit.
La class Elektro.Interop.Tools.CompilerUtil.SourceCodeTemplates pasa a llamarse Elektro.Interop.Tools.CompilerUtil.Snippets y el contenido se ha dividido en las siguientes classes: Elektro.Interop.Tools.CompilerUtil.Snippets.VisualBasicNET Elektro.Interop.Tools.CompilerUtil.Snippets.CSharp
Se han añadido las siguientes classes con varios snippets y plantillas de código:
Se han añadido overloads del método Elektro.Interop.Tools.CompilerUtil.CompileProject()para poder utilizar el compilador MsBuild.exe para .NET Framework 4.5, 4.6, y 4.6.1, y también para poder compilar una configuración y plataforma específica del proyecto (ej. Release -> Any CPU)
Una variedad de extensiones para la conversión de types y exportación de formatos para los siguientes types: DataTable, DataGridView, ListView. Lista completa:
DataTable.ExportToCSV() As String
DataTable.ExportToXml() As String
DataTable.ToDataGridView() As DataGridView
DataTable.ToListView() As ListView
DataTable.ToList() As List(Of Dictionary(Of String, Object))
DataGridView.ExportToCSV() As String
DataGridView.ExportToXml() As String
DataGridView.ToDataTable() As DataTable
DataGridView.ToListView() As ListView
ListView.ExportToCSV() As String
ListView.ExportToXml() As String
ListView.ToDataTable() As DataTable
ListView.ToDataGridView() As DataGridView
( todos ellos con ejemplos de uso prácticos y sencillos. )
Correcciones
En el método Elektro.Application.Tools.AppUtil.SleepRandom(), el parámetro del tipo TimeSpan se interpretaba en segundos, no millisegundos.
« Respuesta #35 en: 13 Septiembre 2016, 06:42 am »
¡¡ NUEVA VERSIÓN v2.0 YA DISPONIBLE !!
Aparte de las típicas adiciones de métodos y funciones, la corrección de algunas cosas, o la actualización y refactorización de otras tantas, no solo del código sino también de la documentación, estos son algunos de cambios y novedades importantes de esta nueva versión:
Se ha añadido un nuevo método experimental SafePInvoke en la class Elektro.Interop.Tools.UnmanagedUtil, su propósito es doble, proporcionar mayor control al llamar a funciones Win32 y hacerlo escribiendo menos código del habitual.
Se ha añadido una nueva class Elektro.Core.Xml.Tools.JsonUtil, con utilidades para código JSON, entre ellos convertir un código JSON a varios tipos admiinstrados de Xml, y un método para embellecer y/o minificar un código de JSON (BeautifyJson/MinifyJson).
En el espacio de nombres Elektro.Application.ThirdParty.Office365.Types, la class OutlookMailClient pasa a llamarse OutlookMailClientExperimental, y ahora hay una nueva class OutlookMailClient. La diferencia está en que se utilizan las nuevas builds de la API de Microsoft, he dejado la versión antigua o "experimental" por que en mi caso me resulta muy útil, sobre todo por la facilidad de login en una cuenta de Outlook.com.
Se ha añadido un nuevo type, Elektro.Core.IO.Types.FileSignature, con el que podemos crear y representar una firma de archivo. Y el type Elektro.Core.IO.Types.FileTypeMatch con el que podemos obtener los datos de un análisis de firmas.
Más overloads añadidos a la class Elektro.System.Tools.Registry para la manipulación de entradas del registro de Windows.
(Esto solo afecta al examinar el código fuente) Todas las definiciones de funciones de la API de Windows se han reorganizado de forma alfabetica (por nombre de la dll) de la siguiente manera:
Se han añadido las siguientes extensiones de método en el espacio de nombres Elektro.Core.Generics.Extensions.Nullable para la conversión entre tipos de datos nulables:
Nullable(Of TSource, TTarget).ConvertTo(Func(Of TSource, TTarget)) As Nullable(Of TTarget)
Nullable(Of T)().ConvertToNonNullable(T) As T()
Se han añadido una nueva class Elektro.Core.IO.Tools.FileTypeUtil.vb la cual sirve para determinar el tipo de archivo de un archivo, examinando la cabecera con una lista de firmas (la cual es extendible en tiempo de ejecución), estos son las funciones expuestas en dicha class:
GetFileTypeMatch(FileInfo, FileType) As FileTypeMatch
GetFileTypeMatch(String, FileType) As FileTypeMatch
GetFileTypeMatches(FileInfo) As List(Of FileTypeMatch)
GetFileTypeMatches(FileInfo, FileType()) As List(Of FileTypeMatch)
GetFileTypeMatches(String) As List(Of FileTypeMatch)
GetFileTypeMatches(String, FileType()) As List(Of FileTypeMatch)
Se ha añadido una nueva class Elektro.Multimedia.Gaming.Types.SnesRom para representar y manipular una ROM de super nintendo (para hacer rom hacking), en combinación con el type SnesCountry y las siguientes enumeraciones:
SnesBankTypeEnum
SnesCartridgeTypeEnum
SnesHeaderTypeEnum
SnesLicenseCodeEnum
SnesRegionTypeEnum
SnesRomSizeEnum
SnesSramSizeEnum
Se han añadido más plantillas de código fuente y snippets predefinidos en el espacio de nombres Elektro.Interop.Tools.CompilerUtil.SourceCodeTemplates:
SourceCodeTemplates.PowerShell
SourceCodeTemplates.Regedit
Y se han actualizado y/o también optimizado el resto de plantillas de otros lenguajes que ya estaban definidos.
Se ha añadido una nueva class Elektro.System.Tools.SystemInfo.Steam para obtener información de una instalación del cliente de video juegos Steam, mediante las sigueintes propiedades
AccountRecoveryUrl As String
ClientCulture As CultureInfo
ClientFile As FileInfo
ClientLanguage As String
InstallDir As DirectoryInfo
IsInstalled As Boolean
RegistryInstallPath As String
RegistryUninstallPath As String
Version As Version
Se ha añadido la class Elektro.System.Tools.SystemInfo.Volume para obtener información de los volúmenes (particiones) montados en el sistema. Estas son algunas de las propiedades que podemos encontrar en dicha class:
ExtendedUncPathPrefix As String
IsCompressed(String) As Boolean
IsReadOnly(String) As Boolean
MaxComponentPathLength(String) As Integer
MaxExtendedPathLength As Integer
MaxPathLength As Integer
SerialNumber(String) As String
SupportsEncryption(String) As Boolean
SupportsExtendedFileAttributes(String) As Boolean
SupportsExtendedPath(String) As Boolean
SupportsFileCompression(String) As Boolean
SupportsHardLinks(String) As Boolean
Se han añadido los siguientes tweaks en la class Elektro.System.Tools.Tweaking.SystemParameters para manipular distintos aspectos de la configuración del sistema operativo:
AeroPeekEnabled As Boolean
BingSearchEnabled As Boolean
CombineSystemTrayIcons As Boolean
CombineTaskbarApplications As Boolean
ConsoleBackColor As ConsoleColor
ConsoleBufferAmount As Integer
ConsoleBufferSize As Integer
ConsoleEditEnabled As Boolean
ConsoleForeColor As ConsoleColor
ConsoleTransparency As Single
Consolev2Enabled As Boolean
CortanaEnabled As Boolean
CortanaSearchBoxEnabled As Boolean
CortanaSearchEnabled As Boolean
DesktopAutoColorizationEnabled As Boolean
ExplorerNavigationPanelEnabled As Boolean
ExtendedPathsEnabled As Boolean
FolderMergeConflictDialogEnabled As Boolean
HideDrivesWithNoMedia As Boolean
HotCornerTopLeftEnabled As Boolean
LowDiskFreeSpaceNotificationEnabled As Boolean
MinimumSelectedItemsToInvokeMenu As Integer
MyPCDisplayName As String
NotepadWordwrapEnabled As Boolean
NotificationCenterEnabled As Boolean
SecurityCenterNotificationsEnabled As Boolean
ShowFrequentDirsInQuickAccess As Boolean
ShowFullPathInExplorer As Boolean
ShowOneDriveInFolderBrowser As Boolean
ShowOneDriveInMyPC As Boolean
ShowQuickAccessInFolderBrowser As Boolean
ShowQuickAccessInMyPC As Boolean
ShowRecentItemsInQuickAccess As Boolean
ShowShortcutFileExtension As Boolean
ShowShortcutSuffix As Boolean
ShowUrlFileExtension As Boolean
ShowWindowsStorePinnedInTaskbar As Boolean
SlowSearchNotificationEnabled As Boolean
WindowArrangementEnabled As Boolean
WindowsErrorReportingEnabled As Boolean
« Última modificación: 13 Septiembre 2016, 06:57 am por Eleкtro »
Algunas personas me han preguntado por que ElektroKit ha desaparecido de Github y NuGet (esto está en proceso todavía), pues bien, voy a explicarlo:
Para mi ha sido un placer compartir este gran proyecto de manera gratuita y desinteresada durante más de un año, actualización tras actualización, esfuerzo tras esfuerzo por perfeccionar este framework, pero ha llegado el momento de intentar sacarle un beneficio convirtiéndolo en un producto de pago, sobre todo con la nueva llegada de la versión (privada) 2.1
Así pues, les comunico que a partir de ahora ElektoKit se vuelve un producto de pago.
Si alguien estuviese interesado en adquirir ElektroKit, por favor, que esa persona se comunique conmigo mediante el e-mail que se muestra en mi perfil de usuario de este foro, y le informaré los pasos a seguir.
Espero que vosotros también hayais disfrutado de esta librería y os haya servido tanto como a mi. Ya no tiene sentido que este tema siga abierto... Cierro El Tema.
NOTA: PUEDEN ENCONTRAR ELEKTROKIT Y OTROS DE MIS PRODUCTOS A LA VENTA EN CODECANYON.
¡Un saludo y feliz año!
« Última modificación: 15 Enero 2017, 04:48 am por Eleкtro »