| |
Mostrar Temas
|
|
Páginas: 1 2 3 [4] 5 6 7 8
|
|
31
|
Programación / .NET (C#, VB.NET, ASP) / Manipular ventana en segundo plano
|
en: 6 Enero 2019, 01:27 am
|
hola amigos en este codigo, puedo enviar una orden a un proceso, el detalle esta en que me trae al frente ese proceso, y necesito que mande la orden pero deje la ventana en segundo plano o no ponerla como ventana activa [DllImport("User32.dll")] static extern int SetForegroundWindow(IntPtr point);
Process p = (Process)listBox.SelectedItem; if (p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); simuladorTeclas.Keyboard.KeyPress(VirtualKeyCode.VK_A); } con ese codigo, envio una pulsacion de tecla a la ventana selecionada en el listbox, y en efecto funciona, el detalle es que trae al frente la ventana de ese proceso, mi idea es que se mantenga en segundo plano y no se convierta en principal o ventana activa.
|
|
|
|
|
32
|
Programación / .NET (C#, VB.NET, ASP) / Seleccionar Archivo o Carpeta sin Dialog
|
en: 13 Noviembre 2018, 13:33 pm
|
|
Hola amigos, tengo un problema al cual no le eh encontrado solucion, poniendole este ejemplo espero puedan entenderme.
Cuando tenemos el WinRAR instalado, podemos hacer click derecho en cualquier archivo (lugar escritorio por ejemplo) , el cual nos desplega un menu cotextual con una serie de opciones, dentro las cuales esta la de ( extraer o descomprimir archivo , segun sea el caso) yo quiero saber como es posible lograr eso, siendo mas especifico, como es posible lograr obtener la ruta completa del archivo para realizar la accion en este caso ( comprimir o descomprimir archivo o carpeta).
Eh entendido anteriormente, que para crear una opcion o boton en el menucontextual es necesario crear una entrada en el registro del windows, cosa ya explicada en el ultimo tema en el cual me asistieron de manera excelente. Y de momento es un tema ya entendido.
Normalmente uno obtiene la ruta de el archivo o carpeta con un openfiledialog o un browserdialog, el cual nos despliega un menu y es ahi donde seleccionamos el archivo o carpeteta, luego disponer de esa ruta, en mi caso eso no es lo que necesito, en mi caso, necesito obtener la ruta de manera automatica , asi como lo hace el winrar cuando uno selecciona el archivo a comprimir (menu que aparece en el menu contextual al hacer click derecho).
Espero puedan entender mi pregunta y ayudarme feliz dia.
|
|
|
|
|
33
|
Programación / .NET (C#, VB.NET, ASP) / Guardar contenido de listbox en settings
|
en: 22 Septiembre 2018, 17:00 pm
|
|
Hola a todos amigos, hoy tengo un problema que no enceuntro nada claro para solventarlo, tengo un listbox en el cual agrego datos, me gustaria que esa lista de nombres, pueda guardarla en una settings para poder cargarlos de nuevo al iniciar el programa , pero no se como hacerlo, quizas sea algo sencillo y espero puedan ayudarme.
|
|
|
|
|
36
|
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.
|
|
|
|
|
37
|
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 !
|
|
|
|
|
38
|
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
|
|
|
|
|
39
|
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])); }
|
|
|
|
|
40
|
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.
|
|
|
|
|
|
| |
|