Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#611
Cita de: **Aincrad** en 22 Octubre 2018, 16:27 PMPD : @Elektro Pasaste de Mod. Global a Colaborador? como @Shell Root? Colaborador no es un rango menor al q tenias? , que paso? tu eres el que mas ayuda al foro y te bajan de rango.

están bien pendejos.


( Si lo dice Spidey, es cierto. )

Pues así ha sido, tuve que soportar tonterías de chiquillos que se creen reyes del mambo, bueno, de un único chiquillo en particular, no culpo a nadie más. Abuso de autoridad y totalitarismo al estilo Pedro Sanchez (el presidente de España), y esas cosas, el pan de cada día en esta sociedad putrefacta en la que vivimos, la cual afecta a todos los rincones del planeta incluyendo esta querida comunidad de elhacker.net... nada ni nadie se salva de acabar propagando su granito de contaminación y toxicidad a los demás... (de hecho, incluso sin querer hacerlo creo que lo acabo de hacer yo también xD)

Ah, si, lo que yo quería comentar a este tema era...: ¿por qué no usaste SharpDX?, es un wrapper de DirectX, lo mejorcito que hay para .NET. Yo no tuve problema para superponer/dibujar un Form sobre la superficie de un video juego en pantalla completa. Si no recuerdo mal te mostré el código al completo (creo que si, ¿no?), ¿que ocurrió pues?, ¿no lo supiste adaptar para tus propósitos?, ¿no te sirvió?.

Saludos!
#612
Cita de: **Aincrad** en 21 Noviembre 2018, 02:41 AM
puras excepciones que decían que no puedo usar parentesis[/b]

Efectivamente, el problema que describes se debe a que no está permitido especificar un método con argumentos (y por ende, esto implica el uso de paréntesis) en el operador AddressOf.

Una manera simple de solucionarlo sería especificando una expresión lambda de tal manera:
Código (vbnet) [Seleccionar]
AddHandler blocker.Blocked, AddressOf Sub()
                                         Dim frm as Form = form2
                                         ' ...
                                     End Sub


O en su defecto declarar el delegado correspondiente y especificarlo sin usar el operador AddressOf, o también sin declarar explicitamente el delegado...
Código (vbnet) [Seleccionar]
Private Function Mensaje(ByVal frm As Form) As Object
   ' ...
   Return Nothing
End Function

Dim frm As Form = form2
AddHandler blocker.Blocked, Mensaje(frm)


Saludos.
#613
Cita de: GangstaSik en 22 Octubre 2018, 01:17 AM
a la hora de depurar me abre la ventana de consola por un instante, luego se cierra y todo se detiene automaticamente. Cabe mencionar que no configure los Timer ya que quiero que todo se ejecute desde consola. Que estare haciendo mal?

Has descrito el comportamiento normal y esperado, ¿qué otra cosa esperabas?, jeje, tu método Main no contiene ninguna orden de interrupción (ej. Console.Read(); como ya mencionaron), por ende, la ejecución finalizará practicamente al instante despues de ejecutar el programa.  

Aparte, otra cosa muy importante a destacar, es que, cuando vayas a "configurar" los timers, debes tener en cuenta que por el hecho de añadir y activar un timer en una aplicación de consola eso no implica que por arte de magia la ejecución de la aplicación se vaya a poner en modo 'stand by'.
Hay diversas metodologías para solventar esto, como por ejemplo la utilización de un semáforo o similar (ej. clase Semaphore, o EventWaitHandle), o realizar una simple llamada a la función Console.Read() al final del método Main, o en su lugar un bucle "infinito" con llamadas al método Thread.Sleep(), o sencillamente crear un búcle de mensajes para el thread actual simplemente realizando una llamada al método System.Windows.Forms.Application.Run().

Ah, y por último, advertirte de que no se te ocurra usar la clase System.Windows.Forms.Timer puesto que está especificamente diseñado para ser usado en el entorno single-threaded (STA) de una aplicación con interffaz gráfica (GUI) y te dará problemas - no perceptibles a simple vista - de sincronización y de uso multi-threading en general. Utiliza la clase System.Threading.Timer en su lugar, o si prefieres puedes usar la clase System.Timers.Timer, sus diferencias en el modo de empleo son mínimas, y ambos cumplen con una implementación thread-safe.




Cita de: GangstaSik en 23 Octubre 2018, 11:08 AM
Pues ya intente lo del Console.Read();
pero ni asi quiere andar el codigo

Cita de: GangstaSik en 23 Octubre 2018, 11:08 AM
yo digo que mas bien a de ser el metodo Main lo que esta mal. :(

Y lo está. Quizás no entendiste bien lo que quiso decir el compañero @centurión, digo @zentillón, no... @z3nth10n (acho, qué nombre más chungo de escribir xD, me niego a pronunciarlo de nuevo, a partir de ahora: @Morty), en fin, el caso es que la orden Console.Read(); deberías añadirla a final del bloque del método Main, por la razón ya explicada más arriba.

Saludos.
#614
Cita de: **Aincrad** en 21 Noviembre 2018, 02:08 AMhttps://image.ibb.co/mzpfQV/1.jpg

Por curiosidad, ¿es diseño propio, o estás utilizando algún framework RAD de terceros?. A ver si acierto: ¿Bunifu? (me recuerda un poco a su estilo de controles). Sea como sea, tanto el diseño de la app de la imagen como el del Color Picker me resultan bastante atractivos. +10

Cita de: **Aincrad** en 21 Noviembre 2018, 02:08 AM
Esta vez no me dijiste nada sobre el code :v , asi que creo que estoy mejorando . XD

Aun no lo he visto, aunque lo pienso hacer, probaré la app, pero me reservaré cualquier opinión positiva o negativa para mi... no es plan de incordiar. xD

Cita de: **Aincrad** en 21 Noviembre 2018, 02:08 AMando pariendo con muchas dudas, haber cuando te pones las Pilas XD.

Debo estar ciego, por que no veo ninguna duda... :-\

Saludos
#615
.NET (C#, VB.NET, ASP) / Re: Cargar PDF a AxAcroPDF
21 Noviembre 2018, 02:02 AM
Cita de: SilverLycan68 en 30 Octubre 2018, 20:59 PM
:huh: Y se podria poner el archivo el los recursos de la aplicacion? :huh:

Claro, poder se puede, pero los datos del archivo PDF se serializarían como elemento de cierto archivo XML, por lo que ya no tendrías un archivo físico como tal, sino los datos RAW, los bytes del archivo, vaya. Dicho de otra forma, tú lo puedes añadir como recurso embedido, pero de todos modos luego tendrías que crear el fichero local para leerlo, leyendo los bytes del recurso y escribiéndolos en un stream físico. Eso es así, siempre y cuando el control "AxAcroPDF" (que por lo que entiendo, es un control ActiveX de Adobe Acrobat PDF Reader) no tenga soporte para la lectura de un array de bytes, en cuyo caso podrías pasarle los bytes del recurso y listo, sin crear ningún archivo local intermediario.

Saludos.
#616
Cita de: Caligula en  6 Noviembre 2018, 21:08 PMun datagridview que pase la información a otro

El planteamiento que has descrito no parece ser el más apropiado. Te explico. Por la forma en la que lo has dicho, imagino que tú estarás rellenando manualmente, me refiero, añadiendo los elementos manualmente al DataGridView, bien, pues no debes hacer eso a menos que exista un motivo lo suficientemente razonable; en su lugar lo que deberías hacer es declarar un objeto de tipo System.Data.DataTable que usarás para construir las columnas y filas de la tabla, entonces, usas la propiedad DataGridView.DataSource para especificar la tabla que creaste, y los cambios que hagas los haces en dicha tabla, no directamene en el control DataGridView. Esto quita por completo la necesidad o planteamiento de "pasar los datos de un datagridview a otro", puesto que puedes especificar el mismo DataSource en los DataGridView que quieras, y, cada vez que realices un cambio en dicha tabla, este cambio se verá reflejado en todos los DataGridView.

Espero haberme explicado lo suficientemente bien. Dicho esto, tienes documentación y ejemplos en microsof.docs...


Un ejemplo simplificado (muy, muy básico):

Código (csharp) [Seleccionar]
DataTable dt = new DataTable();
...

dt.Columns.Add("col1");
dt.Rows.Add("row1");
dt.Rows.Add("row2");
dt.Rows.Add("row3");
...

DataGridView1.DataSource = dt;
DataGridView2.DataSource = dt;
#617
Nada que mencionar que no se haya mencionado ya en público o por privado.

Solo que ver esto me irrita...


jeje. En fin, gracias por compartir con los demás, y no lo digo siguiendo el rol de "Moderador Global", que tu ya sabes que ni me va ni me viene, sino como amigo.

Saludos.
#618
Cita de: #Aitor en  9 Noviembre 2018, 21:14 PM¿Podría alguien orientarme poniendome algún ejemplo de como se usaría?

Para hacer uso de las técnicas de IPC más recomendables, solo serían una opción válida si tú has desarrollado dicha aplicación, es decir, si tienes acceso al código fuente de la misma, pues deberias implementar el algoritmo de comunicación tanto en el proceso emisor, como el receptor (o cliente y servidor, quien lo prefiera llamar así). En tal caso, mi recomendación, y dado que no parece haber necesidad de establecer una conexión online, sería crear un bloque de memoría compartido (la ya mencionada técnica de 'Shared Memory' en Inglés) mediante la clase System.IO.MemoryMappedFiles.MemoryMappedFile, de la cual tienes ejemplos oficiales disponibles en microsoft.docs, y otros muchos en la WWW en general.

De lo contrario, lo recomendable, y dado que el propósito sería evitar depender de que la ventana tenga activo el foco de entrada, sería utilizar la función nativa SendMessage (o PostMessage, según cómo lo quieras hacer) junto al mensaje de ventana WM_SETTEXT, logicamente antes de poder enviar el mensaje primero debes identificar la ventana (el control) al que le quieres enviar el mensaje (el texto a insertar). De nuevo no hace falta mencionar que tienes ejemplos (miles de ellos) en la WWW. Y si necesita enviar cualquier otra cosa que no sea texto, es decir, si lo que quieres es simular una tecla o una combinación de teclas, entonces debes usar el mensaje de ventana WM_KEYDOWN + WM_KEYUP (quizás también WM_SYSKEYDOWN + WM_SYSKEYDOWN, dependiendo de las teclas específicas que necesites simular). Repito, esta metodología no requiere tener activo el foco de entrada de la ventana objetivo.

Como alternativa, y esto ya si que tendríapor requisito depender del foco de entrada de la ventana, usarías la API nativa de RAW_INPUT, lo que viene a ser la función nativa SendInput, vaya, lo cual es bastante tedioso de implementar en su totalidad, pero efectivo, y ya existen ejemplos que puedes utilizar, de hecho, si te quieres ahorrar tiempo en declarar decenas de P/Invokes, estructuras nativas y demás, entonces tienes a tu disposición librerías como Windows Input Simulator:


La API de Microsoft UI Automation (en la librería de clases de WPF), cómo ya han mencionado también, sería otra opción, tiene sus ventajas (sobre todo el gran nivel de abstracción que le otorga un manejo facil e intuitivo) y también sus desventajas (es muy, muy lento en comparación, para iterar el árbol visual o visual tree de una aplicación), aparte, solo soporta aplicaciones que sean accesibles por el mismo, lo cual hoy por hoy por lo general la mayoría lo son, pero es importante mencionarlo ya que no es 100% compatible con todo tipo de ventanas, cómo si que lo es la API de Windows en su lugar.

En resumen, si no quieres depender del foco de entrada de la ventana objetivo, usa SendMessage/PostMessage junto a los mensajes de ventana ya mencionados, si no te importa depender del foco de entrada de la ventana, entonces usa SendInput (preferiblemente la implementación de SendInput de la librería ya mencionada).

Saludos.
#619
Viendo el video, parece un software muy completo en cuanto a funcionalidades, está de 10 a simple vista. La única pega que le pongo, y es a modo de sugerencia, es que la interfaz de usuario es demasiado grande para este tipo de programas, ya que por lo general los usuarios prefieren una ventana pequeña para que no moleste o quite visibilidad al observar la imagen (el fondo, lo que sea) detrás de la ventana del programa, para seleccionar comodamente el pixel/color. Esto lo podrías mejorar usando un TabControl u otras técnicas (ej. botones en el lateral izquierdo de la ventana) para no mostrar todos los controles juntos, lo cual requiere ocupar todo el espacio disponible en el Form. Pero está de 10 en todos los demás aspectos por lo que veo en el video.

Saludos.
#620
Cómo ya ha dicho el compañero @NEBIRE, esto ya se te explicó, conretamente en este thread:


En el que, aparte de los comentarios que recibiste de otros usuarios, yo aporté el siguiente comentario:

CitarHay dos formas de llevarlo a cabo, la primera manera, que es la más sofisticada y versatil sería mediante el desarrollo de una extensión de la shell (o shell-extension) del menú contextual, lo cual requiere el uso de C++, o de wrappers de C++ para .NET como sería la librería SharpShell, y la segunda manera, que es mucho más simple de llevar a cabo pero también mucho menos sofisticada sería añadiendo ciertas claves en el registro de Windows.

...al cual parece ser que no le hiciste mucho o nada de caso.

En fin. Tienes mil ejemplos disponibles en la World Wide Web sobre como crear un menú contextual mediante el registro de Windows, no es dificil buscar y encontrar, y ponerte a hacerlo, más cuando ya se te mostró un ejemplo funcional en el otro thread.

Aparte, en el repositorio de GitHub de SharpShell también tienes ejemplos de como hacerlo mediante SharpShell, lo cual, repito lo que ya dije en ese otro thread, sería la manera ideal.

Por cierto, no se si lo comenté ya en el otro thread, pero WinRAR lo que hace es registrar en el sistema una shell-extension, concretamente es el archivo RarExt32.dll y RarExt.dll. De hecho cualquier software medianamente profesional utiliza extensiones de shell para crear sus menues contextuales, no se andan añadiendo manualmente claves al registro o usando un vulgar script de registro, así que no le des tantas vueltas y empieza a aprender SharpShell si quieres hacer lo mismo que ellos y de forma eficiente (a falta de C/C++).




Cita de: rigorvzla en 19 Noviembre 2018, 15:54 PM
El problema esta en que no se como obtener la ruta del archivo seleccionado , a pesar que lei los textos que me dieron y es colocando el parametro %1 , no encuentro como pasar ese "valor obtenido" a una variable y colocarlo en este mentodo mensionado arriiba.

El argumento %1 no lo pasarías "a una variable", el argumento %1 se lo enviarías como entrada de datos por linea de comandos a tu programa, es decir, como un argumento command-line (ej. miprograma.exe %1). Y entonces, en tu programa simplemente debes leer los argumentos command-line (System.Environment.GetCommandLineArgs)

Saludos.