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 - rigorvzla

#91
Muy bien, eh logrado ya entender en parte la ubicacion del regustro y como crear el boton para poder hacer click , mas no logro como hacer para que ejecute un metodo, me explico mejor, si coloco en  la ruta del archivo un "archivo.exe" lo ejecuta sin mas, pero si coloco otra extension "archivo.pdf" no lo hace (esto es una curiosidad de saber el porque), el problema que si amerito resolver es , que al hacer click ahi , me ejecute un (mensaje de hola) un metodo, (Comprimir() ; ) pero al colocarlo me da un error de object el cual no entiendo aun .

void Comprimir()
{
lineas de compresion //ejemplo, basicamente el metodo que yo quiera
}

Espero puedan entender lo que quiero explicar, ya al tener eso me quedara la creacion de submenus y la colocacion de la imagen que ya me fue explicado con una buena teoria , debere ahora aplicar la practica jeje...
#92
Nebire , muchisimas gracias, se nota que se te da muy MUY bien esto de modificacion de registro, que explicacion tan genial muchas gracias.

Elektro, como siempre de atento muchisimas gracias por tu repuesta, ambas me has sido de gran GRAN ayuda y la partida para lograr lo que tengo en mente, espero cualquier duda a aposterior, puedan aclararla, feliz dia al regresar de mis labores me ponddre de inmediato.
#93
Hola amigos, tengo una inquietud, quiero con la apertura de mi aplicacion agregar opciones al menu contextual de windows, lo cual investigando encontre este ejemplo:

  public partial class MainWindow : Window
    {
        private const string MenuName = "Folder\\shell\\Asistente Virtual AIRH";
        public const string Command = "Folder\\shell\\Asistente Virtual AIRH\\command";

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            cargaContextual();
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            cierreContextual();
        }


        private void cierreContextual()
        {
            try
            {
                RegistryKey reg = Registry.ClassesRoot.OpenSubKey(Command);
                if (reg != null)
                {
                    reg.Close();
                    Registry.ClassesRoot.DeleteSubKey(Command);
                }
                reg = Registry.ClassesRoot.OpenSubKey(MenuName);
                if (reg != null)
                {
                    reg.Close();
                    Registry.ClassesRoot.DeleteSubKey(MenuName);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.ToString());
            }
            finally
            {
            }
        }
       
        private void ejecutrable()
        {
            MessageBox.Show("Hola");
        }
        private void cargaContextual()
        {
            RegistryKey regmenu = null;
            RegistryKey regcmd = null;
            try
            {
                regmenu = Registry.ClassesRoot.CreateSubKey(MenuName);
                if (regmenu != null)
                    regmenu.SetValue("", "AV-AIRH");
                regcmd = Registry.ClassesRoot.CreateSubKey(Command);
                if (regcmd != null)
                    regcmd.SetValue("", @"E:\Descargas\a.exe");

            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.ToString());
            }
            finally
            {
                if (regmenu != null)
                    regmenu.Close();
                if (regcmd != null)
                    regcmd.Close();
            }
        }
    }
}


tiene unas pequeñas modificaciones y es funcional, el problema radica en lo siguiente, solo funciona en el menu contextual de carpetas NO archivos , tampoco me deja muy claro, como modificar la accion que se establece al hacer click en el , de momento solo abre el archivo "a.exe" pero quisiera que se ejecutara un metodo especifico que yo establezca, quiero tambien en ves de crear un menu se creen varios , estos varios en un submenu, si alguien me puede guiar se lo agradeceria mucho para poder sacarle partido a ese codigo ejemplo que consegui.

Y como nota final, el poder agregar una imagen a esa opcion de menu contextual, como lo hace el MegaAsync claro ejemplo de lo que quiero hacer.
#94
Hola amigo espero no sea tarde, y pueda esto ayudarte
https://juanespinozaweb.wordpress.com/envio-de-correos-en-c/
#95
.NET (C#, VB.NET, ASP) / Re: CancellationToken
4 Agosto 2018, 00:54 AM
GRAAAAAACIAAAAAAAAAS!!!!! lastima no  puedo escribir un grito de cuatro vientos de agradecimiento!!!! jaja muchas muchisimas gracias, habiahecho por cuenta propia la mitad del trabajo! jajajaja y por eso no servia, elektro muchas gracias  ;-)

solo creaba esta parte
CancellationTokenSource source = new CancellationTokenSource();
mas faltaba el token como tal... Oops!

pff dormire como un bebe hoy jajajajaja , gracias nuevamente .
#96
.NET (C#, VB.NET, ASP) / CancellationToken
3 Agosto 2018, 00:42 AM
Buenas tardes , hoy tengo un problema bastante interesante que a mas de uno le gustara saber su solucion (incluyendome), el tema lo inicie con el amigo elektro mas es posible que alguien mas este pasando por lo mismo que yo y quiera saber solucion.

La pregunta inicial fue la siguiente:
CitarEh usado el cancellinToken para cancelar una Task, y resulta bien (ya que antes debia cerrar y abrir la aplicacion para cancelar tal accion) el problema esta en que al llamar de nuevo la Task, NO ocurre nada, me gustaria saber como puedo "reiniciar" o una vez cancelada la Task pueda reutilizarla y no quede inutil, ya que para que funcione de nuevo debo cerrar y abrir la aplicacion nuevamente...

La respuesta dada por Elektro fue la siguiente:
CitarHola. No se a que te refieres por "cancellinToken" pero no existe ningún miembro que se llame así en .NET Framework y que esté relacionado con la clase Task, por ende intuyo que probablemente en realidad quisiste decir la clase "CancellationToken" o bien ese "cancellinToken" al que te referiste sea un miembro que está definido en el código fuente de la librería de terceros que estés utilizando...

Respondiendo a tu duda principal, la clase Task representa una "tarea" en segundo plano (un thread) que transiciona de un estado inicial de creación a un estado final de terminación, esto significa que la tarea solo se puede iniciar una vez, y cualquier intento de volver a iniciar una tarea que no esté en el estado inicial de creación dará como resultado una excepción.

Lo que debes hacer, es crear una nueva instancia de ese objeto Task cuando se haya finalizado, y entonces ya puedes volver a iniciar. Te muestro un ejemplo:

    Action action = new Action(() => Console.WriteLine("Hello Asynchronic World!"));
     
    Task t = new Task(action);
    t.Start();
    t.Wait();
    t.Dispose();
     
    t = new Task(action);
    t.Start();
    t.Wait();
    t.Dispose();

Citar
PD: en la mayoría de casos no debes preocuparte por llamar al método Task.Dispose(), las razones se explican aquí (en la sección Remarks):

    https://msdn.microsoft.com/en-us/library/dd270681(v=vs.110).aspx

mostre la linea de codigo al cual quiero aplicar el token y en efecto como dijo elktro puedo llamarlo cuantas veces quiera mas no funciona una vez cancelado por el token la tarea.

CitarEn el código que has mostrado no hay necesidad de "reiniciar" el método 'videoDescarga', puedes llamar a dicho método cuantas veces quieras de forma consecutiva, el problema que creo debes estar teniendo es con el token de cancelación, ¿verdad?. Para simplificarlo, imagina que un token de cancelación representa estados... más o menos como una Task, el estado cancelado y el de no cancelado, y una vez cancelado no puedes volver a cancelarlo, no puedes volver a usarlo, así que debes asegurarte de renovar el token de cancelación cuando este se haya cancelado, asegúrate de hacer eso, si el token es cancelado entonces debes crear una nueva instancia de la clase CancellationTokenSource y de la clase CancellationToken para pasarle el nuevo token al método 'videoDescarga'.

Continuando con el tema, de mi problema a pesar que me han dicho que debo crear  un New token no se como hacerlo al cancelarlo, como podria hacerlo ?

el metodo de cancelacion lo tengo de la siguiente manera:
public static void cerrarVideo()
                {
                    cancellationTokenSource.Cancel();
                }


Espero puedan ayudarme con esto, ya que me tiene dando vueltas la cabeza desde hace ya un rato. Gracias !
#97
en efecto, para no saber , acertaste perfectamente muuchas gracias.
de ahi parti y lo solucione, gracias nuevamente
#98
hola a todos, espero puedan ayudarme en este problema.

estoy usando la api MegaApiCLient
y aunque todo va casi bien en este codigo , no veo lo que hago mal
   static void descargaMegaFile()
        {           
                var client = new MegaApiClient();
                client.LoginAnonymous();

                Uri fileLink = new Uri("https://mega.nz/#!4YlxhLpD!i0RpF63RTLkjvHvHoeqf3xm8yXQv0zDzp954XtouMUE");
                INodeInfo node = client.GetNodeFromLink(fileLink);

                Console.WriteLine($"Downloading {node.Name}");
                Progress<double> ze = new Progress<double>(p => Console.WriteLine($"Progress updated: {p:P0}"));
                client.DownloadFileAsync(fileLink, node.Name, ze);

                client.Logout();
            Console.ReadKey();
        }


en teoria esta bien pero al iniciar la descarga da un error.

en cambio este esta perfecto mas no puedo capturar el progress de la descarga

   static void descargaMegaFile()
        {           
                var client = new MegaApiClient();
                client.LoginAnonymous();

                Uri fileLink = new Uri("https://mega.nz/#!4YlxhLpD!i0RpF63RTLkjvHvHoeqf3xm8yXQv0zDzp954XtouMUE");
                INodeInfo node = client.GetNodeFromLink(fileLink);

                Console.WriteLine($"Downloading {node.Name}");
               
                client.DownloadFile(fileLink, node.Name);

                client.Logout();
            Console.ReadKey();
        }


si alguien tiene conocimiento espero pueda ayudarme
#99
.NET (C#, VB.NET, ASP) / Api Telegram.Bot
17 Julio 2018, 04:09 AM
Buenas noches a todos, espero esten bien , hoy tengo un problema y me gustaria saber como poder resolverlo, esta api la utilizo para enviar archivos del pc a el telegram, el problema radica , que cuando envio el archivo llega sin nombre ni extension, solo dice "Document" y esto no eh podido cambiarlo a pesar que eh revisado "Todo".

               Telegram.Bot.Types.InputFiles.InputOnlineFile f = new Telegram.Bot.Types.InputFiles.InputOnlineFile(System.IO.File.Open(s[i], FileMode.Open));

BibliotecaMetodos.Bot.SendDocumentAsync(idTelegram, f.Content, "Guardar como: " + "Nombre Archivo");                  


Explico un poco, el f.Content es la variable (no se si es el termino correcto porfavor corrijanme) que indica cual es el archivo solo que dice que el "protected set - esta protegido" y no encuentro como cambiar tal cosa por mas que he buscado.

Si alguien sabe como dar el nombre por defecto del archivo en este caso el documento enviado se lo agradeceria mucho.

el "Guardar como" solo da un mensaje adjunto al archivo mas nada.

https://github.com/TelegramBots/Telegram.Bot Anexo el api usado la url

PD. eh llegado a pensar que la api no permite tal modificacion siendo esa su limitante

Anexo esto, donde en teroia esta bien mas no hace lo que debe
string fileName = Path.GetFileName(s[i]);
                Telegram.Bot.Types.InputFiles.InputOnlineFile f = new Telegram.Bot.Types.InputFiles.InputOnlineFile(System.IO.File.Open(s[i], FileMode.Open), fileName);
               
                if (Path.GetExtension(s[i]) == ".doc" || Path.GetExtension(s[i]) == ".docx" || Path.GetExtension(s[i]) == ".rtf" || Path.GetExtension(s[i]) == ".pdf")
                {
                    BibliotecaMetodos.Bot.SendDocumentAsync(Settings.Default.idTelegram, f.Content, "Guardar como: " + Path.GetFileName(s[i]));
                }
#100
.NET (C#, VB.NET, ASP) / OpenHardwareMonitor
29 Junio 2018, 06:15 AM
Buenas gente, justo uso esa libreria (del titulo) para obtener la temperatura del procesador y la tarjeta grafica, pero me di cuenta que es posible obtener datos como cantidad de memoria usada total y libre de la ram y tambien los mismos datos del disco duro, mas no se como lograr esos ultimos, podrian ayudarme con ello? anexo el codigo con el que consigo los datos de temperatura.

public static void GetSystemInfo()
               {
                   TempProcesador updateVisitor = new TempProcesador();
                   Computer computer = new Computer();
                   computer.Open();
                   computer.CPUEnabled = true;
                   computer.GPUEnabled = true;
                   computer.Accept(updateVisitor);
                   for (int i = 0; i < computer.Hardware.Length; i++)
                   {
                       if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                       {
                           for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                           {
                               if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
                                   
                                   BibliotecaMetodos.de.SendTextMessageAsync(Settings.Default.ed, $@"Temperatura de procesador
{computer.Hardware[i].Sensors[j].Name}: {computer.Hardware[i].Sensors[j].Value.ToString()}");
                           }
                       }
                       if (computer.Hardware[i].HardwareType == HardwareType.GpuNvidia || computer.Hardware[i].HardwareType == HardwareType.GpuAti)
                       {
                           for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                           {
                               if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
                               {
                                   BibliotecaMetodos.de.SendTextMessageAsync(Settings.Default.ed, $@"Temperatura GPU
{computer.Hardware[i].Sensors[j].Name}: {computer.Hardware[i].Sensors[j].Value.ToString()} ºC");
                               }
                           }
                       }
                   }
                   computer.Close();
               }
           }


es totalmente funcional, si alguien ya ha usado esa libreria seria fantastico que me ayudara con el codigo para la obtencion de esos datos.