|
Mostrar Temas
|
Páginas: 1 2 3 [4] 5 6 7
|
33
|
Programación / .NET (C#, VB.NET, ASP) / Crear Menu Contextual Windows
|
en: 22 Agosto 2018, 01:33 am
|
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.
|
|
|
34
|
Programación / .NET (C#, VB.NET, ASP) / CancellationToken
|
en: 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: Eh 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: Hola. 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(); 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. En 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 !
|
|
|
35
|
Programación / .NET (C#, VB.NET, ASP) / MegaApiClient error de progress
|
en: 22 Julio 2018, 15:29 pm
|
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
|
|
|
36
|
Programación / .NET (C#, VB.NET, ASP) / Api Telegram.Bot
|
en: 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])); }
|
|
|
37
|
Programación / .NET (C#, VB.NET, ASP) / OpenHardwareMonitor
|
en: 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.
|
|
|
38
|
Programación / .NET (C#, VB.NET, ASP) / Envio de archivo sin nombre Telegram C#
|
en: 27 Junio 2018, 03:36 am
|
Buenas noches amigos, aqui les traigo un problema que no le encuentro solucion aun, tengo un codigo para poder enviar archivos de diferentes formatos a una cuenta de telegram, todo esta bien , el problema es que llegan los archivos PERO sin nombre, me explico segui "todo" como debe ser. y al enviarlo en caso de un documento, envia el archivo con el nombre "Document" y sin extension de paso. Espero puedan ayudarme con la solucion a esto y poder enviar el archivo con su nombre y extension y asi llegue al otro lado. anexo el codigo funcional expetuando eso. Telegram.Bot.Types.InputFiles.InputTelegramFile f = new Telegram.Bot.Types.InputFiles.InputTelegramFile(System.IO.File.Open(ofd.FileName, FileMode.Open)); if (Path.GetExtension(ofd.FileName) == ".doc" || Path.GetExtension(ofd.FileName) == ".docx" || Path.GetExtension(ofd.FileName) == ".rtf" || Path.GetExtension(ofd.FileName) == ".pdf") { Biblioteca.Herramientas.TelegramTool.Bot.SendDocumentAsync(Settings.Default.idTelegram, f.Content, f.FileName = ofd.SafeFileName); } else if (Path.GetExtension(ofd.FileName) == ".jpg" || Path.GetExtension(ofd.FileName) == ".jpge" || Path.GetExtension(ofd.FileName) == ".png" || Path.GetExtension(ofd.FileName) == ".bmp") { Biblioteca.Herramientas.TelegramTool.Bot.SendPhotoAsync(Settings.Default.idTelegram, f.Content, f.FileName = ofd.SafeFileName); } else if (Path.GetExtension(ofd.FileName) == ".mp3" || Path.GetExtension(ofd.FileName) == ".mp2" || Path.GetExtension(ofd.FileName) == ".wav") { Biblioteca.Herramientas.TelegramTool.Bot.SendAudioAsync(Settings.Default.idTelegram, f.Content, f.FileName = ofd.SafeFileName); } else if (Path.GetExtension(ofd.FileName) == ".mp4" || Path.GetExtension(ofd.FileName) == ".3gp" || Path.GetExtension(ofd.FileName) == ".avi" || Path.GetExtension(ofd.FileName) == ".mkv") { Biblioteca.Herramientas.TelegramTool.Bot.SendVideoAsync(Settings.Default.idTelegram, f.Content); } Esta en un simple boton, gracias de antemano , espero sua tencion y ayuda. Anexo, la informacion que encontre en internet esta desactualizada respecto al que descargue (al parecer la ultima version), pueden fijarse en los planteamientos diferentes que hay y el mio.
|
|
|
39
|
Programación / .NET (C#, VB.NET, ASP) / Enviar accion a proceso especifico wpf
|
en: 13 Junio 2018, 02:48 am
|
Hola , a todos, esta noche les traigo un problema que no puedo resolver, eh conseguido un codigo para lo que necesito pero en otro leguanje que no es wpf, el lenguaje es VB aunque no estoy seguro y me da el error siguiente el cual no puedo resolver. "No se puede convertir un objeto de tipo string al tipo diagnostic.process" y aqui el codigo Process p = (Process) listBox1.SelectedItem; if (p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); simuladorTeclas.Keyboard.KeyPress(VirtualKeyCode.VK_A); } Esto consiste en seleccionar de un listbox un proceso y a ese proceso enviar la accion, que en este caso seria precionar la tecla "a" Me podrian ayudar con el codigo que no allo como hacer para que me funcione y es creo , lo ultimo para que sirva, de antemano gracias. Anexo, que el codigo de donde me estoy guiando funciona perfectamente Process p = (Process) listBox1.SelectedItem; if (p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); simuladorTeclas.Keyboard.KeyPress(VirtualKeyCode.VK_A); } ejecutando esto desde un boton que es lo original
|
|
|
40
|
Programación / .NET (C#, VB.NET, ASP) / Ocultar Proyecto de ALT+TAB
|
en: 8 Junio 2018, 03:46 am
|
Buenas noches amigos, hoy les traigo una consulta con la cual no eh dado respuesta por ningun lado y espero ustedes puedan ayudarme, mi proyecto al iniciar abre dos "ventanas" puedo manipular una , y la otra es una"alerta" para el usuario, el problema empieza que cuando apreto (alt+tab) , en ese menu (no se como se llama) se muestra todo lo que esta activo , incluyendo la "ventana de alerta" mi pregunt es.
Existe alguna manera para ocultar una ventana especifica del proyecto al apretar (alt+tab) ? y si es asi, como seria la forma.
Muchas Gracias .!
|
|
|
|
|
|
|