|
491
|
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.
|
|
|
492
|
Programación / .NET (C#, VB.NET, ASP) / Re: Programas de broma
|
en: 5 Abril 2018, 04:29 am
|
Hola: ¿Qué les parece la broma? Todavía queda mucho que pulir, poco a poco se va ampliando y mejorando. Leer los comentarios para entender el código. using Microsoft.Win32; using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; namespace Broma_Consola_05 { class Program { // Importar dll. // Bandeja o lector o unidad de disco. [DllImport("winmm.dll")] public static extern Int32 mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback); public static StringBuilder rt = new StringBuilder (127); // Intercambio de botones del ratón. [DllImport("user32.dll")] static extern bool SwapMouseButton(bool fSwap); // Leds del teclado. [DllImport("user32.dll")] internal static extern short GetKeyState(int keyCode); [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo); static void Main(string[] args) { // Root. const string userRoot = "HKEY_CURRENT_USER"; // Clave. const string subkey = "Metaconta"; // FullName. const string keyName = userRoot + "\\" + subkey; // ValueName. const string valueName = "Contador"; // Variables txt. string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // Si no existe la Key, dará -1. int contador = Convert.ToInt32(Registry.GetValue(keyName, valueName, -1) ?? -1); // Comprueba si la key, al ser -1 si la key no existe. if (contador >= 0) { // Si el contador es mayor que 0. if (contador > 0) { // Sobre escribe la key con -1 su valor. Registry.SetValue(keyName, valueName, contador -= 1); } // Escribe un nuevo arhivo de texto con su contenido correspondiente. if (contador == 7) { File.WriteAllText(Path.Combine(path, "Hola.txt"), "Hola amigo."); } // Abrir bandeja del lector. if (contador == 6) { mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero); } // Intercambiar botones del ratón (Diestro). if (contador == 5) { SwapMouseButton(false); // Activar . } // Intercambiar botones del ratón (Zurdo). if (contador == 4) { // Activar modo zurdo. // SwapMouseButton(true); o SwapMouseButton(1); // Para volver a modo diestro. // SwapMouseButton(false); o SwapMouseButton(0); SwapMouseButton(true); // Activar surdo. } // Imprimir un folio de la impresora o ficticia. if (contador == 3) { string amigo = @"Hola amigo."; string folio = @"Solo te he gastado un folio."; PrintDocument p = new PrintDocument (); p.PrintPage += delegate (object sender1, PrintPageEventArgs e1) { e1 .Graphics.DrawString(amigo, new Font ("Times New Roman", 100), new SolidBrush (Color .Black), new RectangleF (30, 100, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height)); e1 .Graphics.DrawString(folio, new Font ("Times New Roman", 12), new SolidBrush (Color .Black), new RectangleF (530, 270, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height)); }; try { p.Print(); } catch (Exception ex) { throw new Exception ("Excepción ocurrida durante la impresión.", ex ); } } // Parpadean los Led del teclado. if (contador == 2) { while (true) { //No se el orden porque no tengo un teclado mecanico para ver los 3 pilotos juntos PressKeyboardButton(VirtualKeyStates.BloqMayus); Thread.Sleep(100); //Ajusta estos tiempos a como te interese PressKeyboardButton(VirtualKeyStates.BloqNum); Thread.Sleep(100); PressKeyboardButton(VirtualKeyStates.BloqDespl); Thread.Sleep(100); } void PressKeyboardButton(VirtualKeyStates keyCode) { const int KEYEVENTF_EXTENDEDKEY = 0x1; const int KEYEVENTF_KEYUP = 0x2; keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, 0); keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } // Crea archivo bat, borra .exe y .cmd. Fin de la broma. if (contador == 1) { 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 inicio de Windows. 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 Broma_Consola_05.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); } } // Entonces. else { // Escribe en el registro el valor. Registry.SetValue(keyName, valueName, 10); } } } public enum VirtualKeyStates : int { BloqMayus = 0x14, // 20 BloqNum = 0x90, //144 BloqDespl = 0x91, //145 } } }
Saludos.
|
|
|
493
|
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.
|
|
|
495
|
Programación / Programación General / Re: Programacion play2
|
en: 1 Abril 2018, 22:30 pm
|
Buenas: No sabía a estas alturas el YaBasic para la PSP. En fin, ¿de PS3 y PS4 nada de nada? Con la 360 y la One está con el Visual Studio incluido. Al menos viene, pero Sony se la repamplimfla. Ya que encontré la demo de PS2 con el YaBasic, la verdad que martirio usarlo con el mando. Si ha alguien se le da bien programando así, quiero lograr hacer un mini menú con YaBasic, muy básico como se puede hacer con C#. Dejo un ejemplo por si algún avispado sabe adaptar el C# a YaBasic, aunque parezca mentira, todavía se actuaiza YaBasic y con Windows 10. YaBasic: http://www.yabasic.de/Código C#:using System; namespace Menu_y_opciones_consola { class Program { static void Main(string[] args) { // Título de la ventana. Console.Title = "Menú y opciones C# 2017"; // Tamaño ventana consola. Console.WindowWidth = 30; // X. Ancho. Console.WindowHeight = 10; // Y. Alto. // Cursor invisible. Console.CursorVisible = false; // Posición del mansaje en la ventana. Console.SetCursorPosition(0, 0); Console.Write(@"Elija una opción: 1- Opción A. 2- Opción B. 3- Opción C. Escape- Salir. ==========================="); ConsoleKey key; do { // Cursor invisible Console.CursorVisible = false; // Lee cualquier tecla. key = Console.ReadKey(true).Key; // Variable de mensaje vacío. string mensaje = string.Empty; // Leer tecla selecconada por el usuario. switch (key) { case ConsoleKey.D1: // Tecla principal 1. case ConsoleKey.NumPad1: // Tecla extendida 1. Console.SetCursorPosition(0, 8); mensaje = "OPCIÓN A."; // Mostrar mensaje en pantalla. break; case ConsoleKey.D2: case ConsoleKey.NumPad2: mensaje = "OPCIÓN B."; break; case ConsoleKey.D3: case ConsoleKey.NumPad3: mensaje = "OPCIÓN C."; break; } // Posición de los mensajes. Console.SetCursorPosition(0, 8); Console.Write(" "); // 13 espacios. Console.SetCursorPosition(0, 8); Console.Write(mensaje); } // Salir de la plicación al pulsar la tecla Escape o número 4. while (key != ConsoleKey.Escape); } } }
Saludos amigos. PD: Perdón por el gran reflote del año.
|
|
|
497
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cifrar variables o textos de forma sencilla.
|
en: 1 Abril 2018, 04:36 am
|
Buenas: Lo he probado. Funciona de maravilla. Tarda mucho en darle F11 todo el rato, pero se entiende.  Lo que quería hacer era más sencillo, menos protección pero sencillo. Programa A, el original, programa B el que hace el XOR ^10. Los dos hacen XOR ^10. El tipo de varibale como ejemplo es el Byte[]. byte[] rawData = { 0xF5, 0xD2, 0xF5, 0xEA, 0x0A, 0x1A, 0x40, 0x4C, 0x43, 0x4C, 0x0A, 0x0B, 0x0B, 0x0B, 0x0A, 0x42, 0x0A, 0x42, 0x0A, 0x0A, 0xF5, 0xD1, 0x0A, 0x49}
Usamos el XOR ^10. for (int i = 0; i < rawData.Length; i++) { rawData[i] = (byte)(rawData[i] ^ 10); }
El problema que tengo ahora, es que no uso Byte[], sino string. Por eso estoy para arriba y para abajo. En vez de usar como ejemplo de arriba que puse Byte[], pongo un string en cristiano. No en códigos hexadecimales. ¿Hay alguna solución sobre lo que busco? Salu2. 
|
|
|
499
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cifrar variables o textos de forma sencilla.
|
en: 29 Marzo 2018, 16:10 pm
|
Gracias. No quería tanto código, con una mini protección ya me vale. Si tengo un array, hago este código y me basta. for (int i = 0; i < var1.Length; i++) { var1[i] = (byte)(var1[i] ^ 10); }
Solo tengo este string que dice: string var1 = "Esto es una prueba."; Console.WriteLine = var1;
Cuando usas el for arriba otra vez que es un XOR ^10, con usar el mismo, vuelve los valores como estaba. Ahora la variable var1 en su interior lo transforma en "mjcgpow5yp4g0,xy43ph". Si vuelvo aplicar el for pero con la variable var1 igual a mjcgpow5yp4g0,xy43ph, al final dice "Esto es una prueba.". El for de arriba mira un array, pero en este caso es un string, en el cual no se que hacer para que funcione en un string. Ahí está mi problema. Saludos.
|
|
|
500
|
Seguridad Informática / Hacking / Re: Hackear una impresora
|
en: 29 Marzo 2018, 12:44 pm
|
Buenas: Me dio por venir aquí otra vez. He gastado bromas a un amigo con su impresora. Desde que ejecute este .exe, imprime un mensaje en su impresora. Es muy sencillo para que se entienda.Se los dejo aquí por si lo necesitan. El código del post anterior es más complicado. Código C#: using System; using System.Drawing; // No olvidar y añadir referencia. using System.Drawing.Printing; namespace Impresora_Consola_01 { class Program { static void Main(string[] args) { string s = "Hola amigo. Solo t he gastado un folio."; PrintDocument p = new PrintDocument (); p.PrintPage += delegate (object sender1, PrintPageEventArgs e1) { e1 .Graphics.DrawString(s, new Font ("Times New Roman", 12), new SolidBrush (Color .Black), new RectangleF (0, 0, p .DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height)); }; try { p.Print(); } catch (Exception ex) { // throw new Exception("Exception Occured While Printing", ex); } } } }
Si se pude modificar a mejor, lo comparten. Saludos.
|
|
|
|
|
|
|