|
141
|
Programación / Programación C/C++ / [SOLUCIONADO] ¿Cómo añadir dos botones al formulario?
|
en: 7 Abril 2018, 17:49 pm
|
Hola: He creado un formulario con Windows Form (Win32). Quiero añadir en él dos botones. Por ahora he hecho esto. Paso 1: Paso 2: Pado 3: Se me genera códigos pero no se ve el formulario. Lo que demuestra se un engorro programar así hoy en día, pero hay empresas que si programan así y enseñan en algunas universidades les gusten a los alumnos o no. Paso 4: Aquí lo dejo el formulario como si fuese por defeto 300x300 pero en realidad es muy grande para mi gusto. Quiero hacer dos cosas. Poner el tamaño del formulario a 300 x 300 y introducir 2 botones. Quiero hacer. Un botón se llama: Abrir y el otro Cerrar. ¿Cómo se hace? Saludos. PD: La verdad, no sabía que fuera tan coñazo, pesado, complicado en hacer lo que estoy pidiendo.
|
|
|
142
|
Programación / Programación C/C++ / Corregir este error con Win32
|
en: 7 Abril 2018, 12:04 pm
|
Hola: He hecho un mini programa que abre y cierra la bandeja del lector. Lo que no entiendo a la hora de ejecutar la aplicación me sale este mensaje de error. Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Error LNK1104 no se puede abrir el archivo 'C:\Users\Usuario\Documents\Visual Studio 2017\Projects\Bandeja_consola_win32_cpp\Debug\Bandeja_consola_win32_cpp.exe' Bandeja_consola_win32_cpp C:\Users\Meta\Documents\Visual Studio 2017\Projects\Bandeja_consola_win32_cpp\Bandeja_consola_win32_cpp\LINK 1
El código es: #include "stdafx.h" #include "Windows.h" #include "iostream" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Consola C++ Win32 2017"); // Variable. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { // Muestra en pantalla textos. cout << "Control bandeja del lector: " << endl << endl; cout << "A - Abrir bandeja." << endl; cout << "C - Cerrar bandeja." << endl; cout << "==========================" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if ((entrada[0] == 'a') || (entrada[0] == 'A')) { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if ((entrada[0] == 'c') || (entrada[0] == 'C')) { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } // Si haz pulsado otro caracter distinto de A, C, a, y c aparece else { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Antes me funcionaba, actualizo Visual studio y pasa esto. Saludos.
|
|
|
143
|
Programación / .NET (C#, VB.NET, ASP) / Quitar rastros
|
en: 3 Abril 2018, 22:40 pm
|
Hola: Hice una aplicación de C# que se ejecuta en el inico de Windows. Como no se puede borrar así mismo el propio ejecutable, crea un archivo bat o cmd a su lado, luego borra los dos archivos. Precisamente hace esto: 1. Ejecutar C#. 2. C# crea un archivo bat o cmd. 3. C# ejecuta el bat. 4. Bat tiene tiempo de retardo de 1 segundo. 5. C# después de crear el archivo bat, se cierra así mismo o se acaba el programa. 6. Después de pasar 1 segundo, borra el .exe y el bat .cmd así mismo. 7. No hay ningún rastro de archivos. Si lo hay en el editor de registtro el ejecutable, lo he encontrado en estas direcciones y en la misma lo puede nombrar dos veces. Equipo\HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
Equipo\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
Equipo\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
Equipo\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\bam\UserSettings\S-1-5-21-1318602974-3718958170-1399798190-1001
Equipo\HKEY_USERS\S-1-5-21-1318602974-3718958170-1399798190-1001\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
Equipo\HKEY_USERS\S-1-5-21-1318602974-3718958170-1399798190-1001\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
Equipo\HKEY_USERS\S-1-5-21-1318602974-3718958170-1399798190-1001_Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache Por ejemplo, en esta ruta: Equipo\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store Se encuentra el ejecutable llamado: C:\Users\Usuario\Desktop\ Bat_desde_CS_Consola_02.exeLa ruta completa hay que borrarlo. Eso si, debo crear un programa que permita localizar dentro del editor de registro el nombre del ejecutable y borrarlo. ¿Alguna idea como se hace? Si les pica la curiosidad, el programa básico de lo que hace es este. using System; using System.ComponentModel; using System.Diagnostics; using System.IO; namespace Bat_desde_CS_Consola_02 { class Program { static void Main(string[] args) { try { // Variables. string strFileFullName = @"archivo.cmd"; // Nombre del archivo. string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Startup); // Ruta en Inico de Windwos. //string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta en el escritorio. string ficheroAGrabar = Path.Combine(ruta, strFileFullName); // Concatenar ruta. // Muestra la ruta en pantalla. Console.WriteLine(ruta); // C:\Users\Usuario\Desktop // Si no existe el archivo. if (!File.Exists(ficheroAGrabar)) { // Crea el contenido al archivo de texto. File.WriteAllText(ficheroAGrabar, @"@echo off TIMEOUT /T 1 DEL /S Bat_desde_CS_Consola_02.exe DEL /S archivo.cmd EXIT"); } else // Si existe... { // Codigo a ejecutar si existe... Console.WriteLine("El archivo existe, así que no se sustituirá."); } // Ejecutar archivo.cmd. ProcessStartInfo psi = new ProcessStartInfo (); psi.UseShellExecute = false; psi.CreateNoWindow = true; psi.WindowStyle = ProcessWindowStyle.Hidden; psi.FileName = strFileFullName; // archivo.cmd. Process.Start(psi); // Cerrar aplicación C#. Environment.Exit(-1); } catch (Win32Exception) { // No mostrar nada. // Cerrar aplicación C#. Environment.Exit(-1); } } } }
No olvidar, en las propiedades, para que no muestre la ventana en ningún momento. Hasta el cmd también debe estar oculta, y lo logra con C#. Otra pregunta. A parte de todo esto. ¿Hay algún sitio, sea archivo en las profundidades de Windwos que dejen rastros? Saludos.
|
|
|
144
|
Programación / .NET (C#, VB.NET, ASP) / Cifrar variables o textos de forma sencilla.
|
en: 29 Marzo 2018, 08:47 am
|
Buenas gente: Hice un ejemplo con este código. using System; namespace Encriptar_variable_Consola_01 { class Program { static void Main(string[] args) { Console.Title = "Ocultar variable"; // Título de la pantalla. string variable = "Esto es una prueba."; Console.WriteLine(variable); Console.WriteLine("Otra prueba."); Console.ReadKey(); // Pulse cualquier tecla para salir. } } }
Mirando el ejecutable en el editor hexadecimal. Si encuentra los valores de las variables como indica la captura. Uso Visual Studio 2017 Community. No quiero usar técnica de obfuscación, no se si esta versión la incluye. Quiero saber si existe la manera de camuflar esas variables. Mi idea era usar algo parecido a esto en XOR ^10 con otro programa que haré a parte. for (int i = 0; i < variable.Length; i++) { variable[i] = (byte)(variable[i] ^ 10); }
El código de ejemplo de una variable tipo array desordenarlo. Luego copio y pego el resultado ya codificado en la variable que es el que estoy usando ahora. En este caso uso una variable tipo string. Tengo que hacer de alguna manera, al ejecutar el programa, lea las variables codificadas y las vuelva a poner bien para que se lea en cristiano, luego lo guarda en otra variable y Console.WriteLine lo muestra. Espero que se entienda lo que quiero decir o lo explico de otra manera. ¿Alguna ocurrencia? Saludos.
|
|
|
145
|
Programación / .NET (C#, VB.NET, ASP) / Imprimir una hoja con C#
|
en: 27 Marzo 2018, 21:46 pm
|
Buenas: Quiero imprimir un folio, una hoja con la consola en C#, no con Windows Form. Aquí hay un ejemplo pero es con Windows Form en el cual no me interesa. https://msdn.microsoft.com/es-es/library/system.drawing.printing.printersettings%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp&f=255&MSPPError=-2147217396#code-snippet-2He modificado el código así un poco. using System; using System.IO; namespace Impresora_Consola_01 { class Program { static void Main(string[] args) { void Printing(string printer) { try { streamToPrint = new StreamReader (@"Hola amigo."); try { printFont = new Font ("Arial", 10); PrintDocument pd = new PrintDocument (); pd .PrintPage += new PrintPageEventHandler (pd_PrintPage ); // Specify the printer to use. pd.PrinterSettings.PrinterName = printer; if (pd.PrinterSettings.IsValid) { pd.Print(); } else { Console.WriteLine("Printer is invalid."); } } finally { streamToPrint.Close(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } }
Cuando ejecutes el ejecutable, lo que tiene que hacer, buscar una impresora que tenga dispuesta, y imprima solo un folio. El mensaje que imprime una hoja es este: Hola amigo.
Solo te he gastado un folio. ¿Es posible hacer en modo consola o tiene que ser si o si con Windows Form? Saludos.
|
|
|
146
|
Programación / .NET (C#, VB.NET, ASP) / Programas de broma
|
en: 22 Marzo 2018, 17:29 pm
|
Hola: Estaba urgando con C# haciendo archivo de bromas. La idea principal es, que al ejecutar esta aplicación hecha en modo consola, no muestre la pantalla en negro, que no muestre nada, solo que al ejecutarlo tres veces, la primera vez crea un archivo de texto llamado Archivo.txt que contiene el valor número 3, si llega a 0, crea otro arhivo llamado Hola.txt y en su interior, el contenido escrito esto, Hola amigo. Los archivos se crean en el escritorio como ejemplo. Aquí un ejemplo: using System; using System.IO; namespace Broma_Consola_02 { class Program { static void Main(string[] args) { // Variables. string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string nombreArchivo = "Archivo.txt"; // Comprueba si existe el archivo en dicha ruta. if (File.Exists(Path.Combine(path, nombreArchivo))) { // Variable del contador. int contador; // Lee el fichero. if (Int32.TryParse(File.ReadAllText(Path.Combine(path, nombreArchivo)), out contador)) { // Si el contador es mayor que 0. if (contador > 0) { // Sobre escribe el archivo con -1 su valor. File.WriteAllText(Path.Combine(path, nombreArchivo), $"{contador -= 1}"); } // Si el contador es igual a 0. if (contador == 0) { // Escribe un nuevo arhivo de texto con su contenido correspondiente. File.WriteAllText(Path.Combine(path, "Hola.txt"), "Hola amigo."); } } // Entonces. else { Console.WriteLine("El archivo contiene un valor no esperado."); } } // Entonces. else { // Escribe el archivo con el valor 3 en Archivo.txt. File.WriteAllText(Path.Combine(path, nombreArchivo), "3"); } //Console.ReadKey(); // Pulse cualquier tecla para salir. } } }
Mi idea es que este ejecutable esté sea como sea, en el inicio de Windows, es decir, que al iniciar Windows, te resta un valor en el archivo txt hasta llegar a 0. Cuando llegues a 0, al iniciar el Windows, se abre también en el inicio el archivo Hola.txt con el mensaje, Hola amigo. Aquí abajo lo puse como escritorio, al dinal sustituye Desktop (escritorio) string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
a Startup (Inicio). string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
El que quiere poner otra ubicación, aquí hay una lista. ¿Qué técnica, o ideas, usarían para poder poner este ejecutable en el inicio? Salu2.
|
|
|
147
|
Programación / .NET (C#, VB.NET, ASP) / Cambiar atributo archivo
|
en: 11 Marzo 2018, 15:05 pm
|
Hola: Tengo este archivo de texto llamado Hola.txt, creado con C#. Sus atributos son estos. El código para crear este archivo de texto es el siguiente. using System; using System.IO; // No olvidar. namespace Crear_txt_Consola_02_cs { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Crear archivo txt Consola 02 C#"; // Tamaño ventana consola. Console.WindowWidth = 55; // X. Ancho. Console.WindowHeight = 18; // Y. Alto. /* Creo que te estás complicando innecesariamente. Si tienes la ruta y el fichero, * no hay más que juntar la ruta con el fichero (poniendo la "\" entre medias igual * que si fueses a escribir la ruta a mano en el explorador de Windows). Es una simple * concatenación de strings: */ /* string strFileName = @"Hola.txt"; // Nombre del archivo. string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta. string ficheroAGrabar = ruta + @"\" + strFileName; */ // Variables. string strFileFullName = @"Hola.txt"; // Nombre del archivo. string ruta = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Ruta. string ficheroAGrabar = Path.Combine(ruta, strFileFullName); // Concatenar ruta. // Muestra la ruta en pantalla. Console.WriteLine(ruta); // C:\Users\Usuario\Desktop // Si no existe el archivo. if (!File.Exists(ficheroAGrabar)) { // Crea el contenido al archivo de texto. File.WriteAllText(ficheroAGrabar, "Hola Mundo."); } else // Si existe... { // Codigo a ejecutar si existe... Console.WriteLine("El archivo existe, así que no se sustituirá."); // Pulse cualquier tecla para salir. Console.ReadKey(); } } } }
¿Existe hacer de alguna manera, cambiar los datos de los atributos como fecha y hora indicada en la imagen de arriba? No quiero que se sepa cuando se creó el archivo. O poner otra fecha muy al pasado. Saludos.
|
|
|
148
|
Programación / Scripting / Crear funciones en est script
|
en: 28 Noviembre 2017, 09:57 am
|
Hola: Estoy usando desde ISE con PowerShell este código. Lo que hace ahora es crear un formulario Windows Form en el cual abre y cierra la bandeja del lector del disco. $MemDef = @" [DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback); "@
$winnm = Add-Type -memberDefinition $MemDef -ErrorAction 'SilentlyContinue' -passthru -name mciSendString function Set-CDAudioDoor { Param( [ValidateSet("open", "closed")][String[]]$Mode = 'open' ) $winnm::mciSendStringA("set cdaudio door $mode", $null, 0,0)}
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms") [void][reflection.assembly]::loadwithpartialname("System.Drawing")
$Form = New-Object system.Windows.Forms.Form $Form.Text = "PowerShell 2017" $Form.TopMost = $true $Form.Width = 300 $Form.Height = 300 $Form.StartPosition = "CenterScreen"
$button_Abrir = New-Object system.windows.Forms.Button $button_Abrir.Text = "Abrir" $button_Abrir.Width = 75 $button_Abrir.Height = 23 $button_Abrir.location = new-object system.drawing.point(40, 150) $button_Abrir.Font = "Microsoft Sans Serif,10" $Form.controls.Add($button_Abrir)
$button_Cerrar = New-Object system.windows.Forms.Button $button_Cerrar.Text = "Cerrar" $button_Cerrar.Width = 75 $button_Cerrar.Height = 23 $button_Cerrar.location = new-object system.drawing.point(174, 150) $button_Cerrar.Font = "Microsoft Sans Serif,10" $Form.controls.Add($button_Cerrar)
$label_Mensaje = New-Object system.windows.Forms.Label $label_Mensaje.Text = "?" $label_Mensaje.AutoSize = $true $label_Mensaje.Width = 25 $label_Mensaje.Height = 10 $label_Mensaje.location = new-object system.drawing.point(54,26) $label_Mensaje.Font = "Microsoft Sans Serif,36,style=Bold" $Form.controls.Add($label_Mensaje)
# Abrir bandeja. $label_Mensaje.Text = "Abriendo..." $button_Abrir.Add_Click({Set-CDAudioDoor open}) $label_Mensaje.Text = "Abierto."
# Cerrar bandeja. $label_Mensaje.Text = "Cerrando..." $button_Cerrar.Add_Click({Set-CDAudioDoor closed}) $label_Mensaje.Text = "Cerrado."
[void]$Form.ShowDialog() $Form.Dispose() Al ejecutar este Script, muestra esta imagen. Com podrás observar, siempre se ejecuta una detrás otra esta instrucción de mensajes. $label_Mensaje.Text = "Cerrado." Mi idea es, que al pulsar el botón Abrir, aparezca el mensaje "Abrriendo...", se abre la bandeja del todo, sale otro mensaje, "Abierto.", lo mismo al pulsar el botón Cerrar. ¿En que fallo? Saludos.
|
|
|
149
|
Programación / Java / Otro estilo en Java
|
en: 22 Noviembre 2017, 23:52 pm
|
Hola: Aquí hay un código hecho en Java usando WMPlayer.OCX.7. Quiero usar en Java mciSendString(L"Set CDAudio Door Open Wait", 0, 0, 0); Es para abrir y cerrar la bandeja. /** * */ package com.sabado; import java.io.File; import java.io.FileWriter; /** * -.- * */ public class Unidad { /** * @param args */ public static void main (String[] args ) { // TODO Auto-generated method stub //mostramos mensajes antes de abrir las bandejas de CD DVD null, "Pulsa OK para abrir las bandejas de los " + "lectores/grabadores de CD/DVD del equipo.", "Abrir CD/DVD", Unidad.abrirBandejaCDDVD(); //mostramos mensaje antes de cerrar las bandejas de CD DVD null, "Pulsa OK para cerrar las bandejas de los " + "lectores/grabadores de CD/DVD del equipo.", "Cerrar CD/DVD", Unidad.cerrarBandejaCDDVD(); } public static void abrirBandejaCDDVD () { try { File file = File. createTempFile("abrirbandejacd", ".vbs"); file.deleteOnExit(); String vbs = "Set objPlayer = CreateObject(\"WMPlayer.OCX.7\") \n" + "Set collCDROM = objPlayer.cdromCollection \n" + "if collCDROM.Count >= 1 then \n" + "For i = 0 to collCDROM.Count - 1 \n" + "collCDROM.Item(i).Eject \n" + "Next \n" + "End If \n"; fw.write(vbs); fw.close(); Runtime. getRuntime(). exec("wscript " + file. getPath()). waitFor(); } { e.printStackTrace(); } } public static void cerrarBandejaCDDVD() { try { File file = File. createTempFile("cerrarbandejacd", ".vbs"); file.deleteOnExit(); //para cerrar las bandejas de CD hay que ejecutar "eject" dos veces String vbs = "Set objPlayer = CreateObject(\"WMPlayer.OCX.7\") \n" + "Set collCDROM = objPlayer.cdromCollection \n" + "if collCDROM.Count >= 1 then \n" + "For i = 0 to collCDROM.Count - 1 \n" + "collCDROM.Item(i).Eject \n" + "collCDROM.Item(i).Eject \n" + "Next \n" + "End If \n"; fw.write(vbs); fw.close(); Runtime. getRuntime(). exec("wscript " + file. getPath()). waitFor(); } { e.printStackTrace(); } } }
¿Algún ejemplo usando mciSendString en Java? Lo pregunto porque el de arriba es mucho código para lo que hay que hacer, abrir y cerrar la bandeja. Un ejemplo en C++ se hace en menos líneas de códigos, por ejemplo este indicado abajo. Paso 1: Paso 2: Paso3: Escribir Winmm.lib. Paso 4: Sólo se necesita tres includes. #include "stdafx.h" #include "Windows.h" #include "iostream" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Consola C++ Win32 2017"); // Variable. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { // Muestra en pantalla textos. cout << "Control bandeja del lector: " << endl << endl; cout << "A - Abrir bandeja." << endl; cout << "C - Cerrar bandeja." << endl; cout << "==========================" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if ((entrada[0] == 'a') || (entrada[0] == 'A')) { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if ((entrada[0] == 'c') || (entrada[0] == 'C')) { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } // Si haz pulsado otro caracter distinto de A, C, a, y c aparece else { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Saludos.
|
|
|
150
|
Programación / Scripting / Crear formulario de estos lenguajes
|
en: 19 Noviembre 2017, 11:08 am
|
Hola: Antes pensaba que PowerShell solo era línea de comandos, el sustituto del CMD de Windows se puede decir. He descubierto hoy que se puede crear formulario tal como lo hace Windows Form de Visual C# o Visual Basic .net. Aquí hay un editor de formularios para hacerlo más rápido por vía Web y te genera el código para probarlo en el Power Shell. https://poshgui.com/#Aquí encuentras más enalces. # http://tianit.cloudapp.net/blog/index.php/2015/11/04/crear-formularios-con-powershell/Por ejemplo, abajo un formalario creado en visual solo con códigos de PowerShell. Mi pregunta es. ¿Se puede crear también formularios con el lenguaje Visual F#?Por todas partes se llama Visual F#, pero solo he visto códigos en modo consola. Saludos.
|
|
|
|
|
|
|