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

#321
Hola:

Una aclaración de lo que quiero hacer.

Puedo introducir estas letras, A, a, C y c. Si introduzco otra cosa, las ignora.

Si en el teclado pulso la letra A mayúscula, pues con el str.ToLower quería que cualquier letra que pulse mayúscula, lo convierta en minúscula.

He comprobado que tu código al final si funciona, si pongo el teclado en mayúscula activado. Solo falta la soltura de vovler a preguntar siempre las teclas en vez de cerrarse el programa.

Aún así, tu código, buen trabajo. Ya vamos paso a paso.

Saludos.
#322
Hola:

Ya está está solucionado. Hay que leerse bien hasta las narices los tutos estos deF#.
https://msdn.microsoft.com/es-es/library/ee241126(v=vs.110).aspx
https://msdn.microsoft.com/es-es/library/dd233160(v=vs.120).aspx

Código F#:
Código (csharp) [Seleccionar]
// Más información acerca de F# en http://fsharp.org

open System
open System.Runtime.InteropServices
open System.Text;

// importar librería o dll externo.
[<DllImport("winmm.dll")>]
extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
        int uReturnLength, IntPtr hwndCallback)

let rt = StringBuilder(127)

// Evento.
let DoEvents (transition:string) =
    Console.SetCursorPosition(0, 6)
    Console.Write transition

let action state transition (mensaje:string) =
    Console.SetCursorPosition(0, 6);
    DoEvents transition;
    mciSendString(state, rt, 127, IntPtr.Zero) |> ignore
    Console.SetCursorPosition(0, 6)
    Console.Write("           ")
    Console.SetCursorPosition(0, 6)
    Console.Write(mensaje)

// Pulse letra A para abrir bandeja o C para cerrar bandeja.
let rec loop() =
    match Console.ReadKey(true).Key with
    | ConsoleKey.Escape -> ()
    | ConsoleKey.A -> action "set CDAudio door open" "Abriendo..." "Abierto."
                      loop()
    | ConsoleKey.C -> action "set CDAudio door closed" "Cerrando..." "Cerrado."
                      loop()
    | _ -> loop()

[<EntryPoint>]
let main argv =
    // Título de la ventana.
    Console.Title <- "F#"

    // Tamaño ventana consola.
    Console.WindowWidth <- 29 // X. Ancho.
    Console.WindowHeight <- 8 // Y. Alto.

    // Cursor invisible.
    Console.CursorVisible <- false

    // Posición del mansaje en la ventana.
    Console.SetCursorPosition(0, 0)
    Console.Write(@"Control bandeja del lector:

A - Abrir bandeja.
C - Cerrar bandeja.
===========================")
    loop()
    0 // return an integer exit code


Por cierto. Los códigos GeSHI no inclute F# de este foro.

¿Se incluirán en el futuro y no se puede?

Saludos.
#323
Buenas:

Tu programa ejecuta pero no pasa nada si pulso las teclas.

Intenté hacerlo como pude a mi manera pero no ejecuta.

Código (cpp) [Seleccionar]
#include "stdafx.h"
#include "stdio.h"
#include "Windows.h"
#include "iostream"
#include "string"
#include "conio.h"

using namespace std;


int main()
{
// Título de la ventana.
SetConsoleTitle(L"Abrir y cerrar bandeja del disco C++ Win32");

// Variable
char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola.

while (true)
{
printf("Control bandeja del lector : \n\n");
printf("A - Abrir bandeja. \n");
printf("C - Cerrar bandeja. \n");
printf("========================== \n\n");

cin >> entrada; // Aquí introduces letras A, a, C, y c.

switch (srt.tolower(entrada)) // Espera recibir A, a, C, y c. Transforma en minúscula.
{
// Abrir bandeja.
case 'a':
cout << "Abriendo..." << endl; // Muestra en pantalla textos.
//printf("Abriendo...");
// Aquí va un evento para que aparezca la palabra Abirendo... mientra se está abriendo el lector.
mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);
cout << "Abierto." << endl; // Muestra en pantalla textos.
break;

// Cerrar bandeja.
case 'b':
cout << "Cerrando..." << endl; // Muestra en pantalla textos.
// Aquí va un evento.
mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr);
cout << "Cerrado." << endl; // Muestra en pantalla textos.
break;

default: // Si haz pulsado otro caracter distinto de A, C, a, y c aparece
cout << "Solo pulsar A o C." << endl; // este mensaje.
}
}
return EXIT_SUCCESS;
}


Algo se nos escapa.

Saludos.
#324
Hola:

He hecho este programa para poder abrir y cerrar la bandeja con C++ Win32. Lo que tiene que hacer es si pulsa la tecla A, se abre el lector, si pulsas C, cierra la bandeja del lector de discos.

Código (cpp) [Seleccionar]
#include "stdafx.h"
#include "stdio.h"
#include "Windows.h"
#include "iostream"
#include "string"
#include "conio.h"

using namespace std;


int main()
{
// Título de la ventana.
SetConsoleTitle(L"Abrir y cerrar bandeja del disco C++ Win32");

// Variable
char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola.

while (true)
{
printf("Control bandeja del lector : \n\n");
printf("A - Abrir bandeja. \n");
printf("C - Cerrar bandeja. \n");
printf("========================== \n\n");

cin >> entrada; // Aquí introduces letras A, a, C, y c.

switch (srt.tolower(entrada)) // Espera recibir A, a, C, y c. Transforma en minúscula.
{
// Abrir bandeja.
case 'a':
cout << "Abriendo..." << endl; // Muestra en pantalla textos.
//printf("Abriendo...");
// Aquí va un evento para que aparezca la palabra Abirendo... mientra se está abriendo el lector.
mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);
cout << "Abierto." << endl; // Muestra en pantalla textos.
break;

// Cerrar bandeja.
case 'b':
cout << "Cerrando..." << endl; // Muestra en pantalla textos.
// Aquí va un evento.
mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr);
cout << "Cerrado." << endl; // Muestra en pantalla textos.
break;

default: // Si haz pulsado otro caracter distinto de A, C, a, y c aparece
cout << "Solo pulsar A o C." << endl; // este mensaje.
}
}
return EXIT_SUCCESS;
}




¿Qué tengo mal?

Saludos.
#325
Hola:

Trabajando con MFC al crear formularios, me salía esta ventana al final en el cual podía ejecutar al pulsar F5 para compilar.

Ver zoom.
Aquí abajo dejo una guía paso a paso de crear un formulario MFC como se hacía antes desde la página 36, hasta la página 45.
Ver visor.
Ver pdf.
Intenté seguir los pasos, la primera ventana me sale esto.


No se cual es la mejor forma de hacerlo. Lo dejo tal cual por si acaso y sigo a la página siguiente.
Sigo el siguiente paso.

Siguiente paso.

Siente paso.

Antes al ejecutar no me daba problemas. Ahora me salen todos estos errores indicado abajo y no se como solucionarlo.


¿Hay alguna solución?

Antes, podía ejecutar la ventana y no pasaba nada.

Saludos.

PD: Disculpen si no me sale el tamaño adecuado de las capturas.
#327
Cita de: okik en 16 Noviembre 2017, 08:41 AM
Buen aporte Meta, gracias  ;-)

Lo que no entiendo es porqué al usar el comando "status" mciSendString siempre me devuelve "open"

Código (vbnet) [Seleccionar]

 Const cchReturnLen As UInteger = 255
       Dim sRet As New StringBuilder(CInt(cchReturnLen))
       Dim err As UInteger = mciSendString("status cdaudio mode", sRet, cchReturnLen, IntPtr.Zero)
       MessageBox.Show(sRet.ToString)



Código (vbnet) [Seleccionar]
    <DllImport("winmm.dll")> _
    Private Shared Function mciSendString(sCommand As String, sReturn As StringBuilder, cchReturn As UInteger, hwnd As IntPtr) As UInteger
    End Function



Hola oki:

Module1.bas:
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long


frmcd.frm[/U]:
Private Sub Command1_Click()

On Error Resume Next
Command2.Visible = True
Command1.Visible = False
frmcd.Caption = "Abriendo. . . ."
retvalue = mciSendString("set CDAudio door open", returnstring, 127, 0)

End Sub

Private Sub Command2_Click()

On Error Resume Next
Command1.Visible = True
Command2.Visible = False
frmcd.Caption = "Cerrando. . . ."
retvalue = mciSendString("set CDAudio door closed", returnstring, 127, 0)

End Sub

Private Sub Form_Load()

On Error Resume Next
Command1.Visible = True
Command2.Visible = False
frmcd.Caption = "C D . . . "

End Sub


Prueba y nos cuenta.

Poco a poco espero sacar algo del F#.

Haber si le cojo el truco de F# de una vez por todas.
https://msdn.microsoft.com/es-es/library/dd233160(v=vs.120).aspx

Saludos.
#328
Hola:

Me ejecuta el programa. Como sabrás, no hay botón para abrir y cerrar la bandeja. Así sin más no pasa nada.

Puse un botón y este código en el cual no furula. Xdddd.

Código (csharp) [Seleccionar]
        private void button_Abrir_Click(object sender, EventArgs e)
        {
            EventWatcher_EventArrived();
        }


Saludos.
#329
Hola:

Copié tu código. Errores por todas partes, no respondí antes por ser muy lioso estos errores que pasé.


Gracias por tu tiempo. ;)

MOD: Imagen adaptada a lo permitido. (Ya deberías saber ésto)
#330
Programación C/C++ / Adaptar C++ CLR a C++ Win32
16 Noviembre 2017, 12:15 PM
Hola:

Quiero adaptar este código de C++ CLR a C++ Win32. Antes que nada, quiero saber si es posible o hay que complicarse mucho la vida para hacer lo mismo. El código lo que hace es abrir y cerrar la bandeja de cualquier lector de discos sea IDE o SATA.

Aquí encontré un vídeo pero solo ejecuta, y abre el lector en Win32. Por algo se empieza.

[youtube=640,360]https://www.youtube.com/watch?v=ANY57ArJsY8[/youtube]

Código C++ CLR:
Código (cpp) [Seleccionar]
#include "stdafx.h"

using namespace System;
using namespace System::Runtime::InteropServices;
using namespace System::Text;

[DllImport("winmm.dll")]
extern Int32 mciSendString(String^ lpstrCommand, StringBuilder^ lpstrReturnString,
int uReturnLength, IntPtr hwndCallback);

static void DoEvents()
{
Console::SetCursorPosition(0, 6);
Console::Write("Abriendo...");
}

static void DoEvents2()
{
Console::SetCursorPosition(0, 6);
Console::Write("Cerrando...");
}

int main(array<System::String ^> ^args)
{
StringBuilder^ rt = gcnew StringBuilder(127);

// Título de la ventana.
Console::Title = "Control lector de bandeja. C++ CLR";

// Tamaño ventana consola.
Console::WindowWidth = 29; // X. Ancho.
Console::WindowHeight = 8; // Y. Alto.

  // Cursor invisible.
Console::CursorVisible = false;

// Posición del mansaje en la ventana.
Console::SetCursorPosition(0, 0);
Console::WriteLine("Control bandeja del lector : \n\n" +
"A - Abrir bandeja. \n" +
"C - Cerrar bandeja. \n" +
"========================== \n");
//Console::WriteLine("A - Abrir bandeja.");
//Console::WriteLine("C - Cerrar bandeja.");
//Console::Write("==========================");

ConsoleKey key;
//Console::CursorVisible = false;
do
{
key = Console::ReadKey(true).Key;

String^ mensaje = "";

//Asignamos la tecla presionada por el usuario
switch (key)
{
case ConsoleKey::A:
mensaje = "Abriendo...";
Console::SetCursorPosition(0, 6);
DoEvents();
mciSendString("set CDAudio door open", rt, 127, IntPtr::Zero);
mensaje = "Abierto.";
break;

case ConsoleKey::C:
mensaje = "Cerrando...";
Console::SetCursorPosition(0, 6);
DoEvents2();
mciSendString("set CDAudio door closed", rt, 127, IntPtr::Zero);
mensaje = "Cerrado.";
break;
}

Console::SetCursorPosition(0, 6);
Console::Write("           ");
Console::SetCursorPosition(0, 6);
Console::Write(mensaje);

} while (key != ConsoleKey::Escape);
    return 0;
}


Saludos.