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

#311
Programación C/C++ / RE: Solucionando errores
20 Noviembre 2017, 20:44 PM
Buenas:

Problema resuelto y problema sin resolver.

El código que está abajo funciona, el programa tiene un nombre del proyecto, lo curioso que he creado otro proyecto con otro nombre, así varias veces y esta vez no hay manera de que funcione el programa. El un problema muy curioso y eso que uso el mismo código. Donde da problemas en en lo señalado abajo.

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

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)
{
// 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;
}


Concretamente falla en:
Código (cpp) [Seleccionar]
mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);

Código de error:
CitarGravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   LNK2019   símbolo externo __imp__mciSendStringW@16 sin resolver al que se hace referencia en la función _main   Bandeja_consola_win32_cpp   C:\Users\Usuario\Documents\Visual Studio 2017\Projects\Bandeja_consola_win32_cpp\Bandeja_consola_win32_cpp\Bandeja_consola_win32_cpp.obj   1   


Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   LNK1120   1 externos sin resolver   Bandeja_consola_win32_cpp   C:\Users\Usuario\Documents\Visual Studio 2017\Projects\Bandeja_consola_win32_cpp\Debug\Bandeja_consola_win32_cpp.exe   1   


A pesar de los enlaces que dan, no entiendo nada ni como resolverlo.
LNK2019.
LNK1120.

¿Es normal que funcione el código, para que lo vuelva a crear con otro nombre del proyecto no funcione ni una vez?

¿Qué es lo que ocurre?

Gracias por todo.
#312
Cita de: SubAtomicParticula en 20 Noviembre 2017, 18:31 PM
Ole, campeón. Te has resuelto el tema, solo te falta cambiar la "b" por "c", jejeje.

No lo he resuelto arriba, lo acabo de resolver ahora que pongo los resultado aquí mismo. Lo que he resuelto arriba es MFC C++ 2017.

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

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)
{
cout << "Control bandeja del lector : \n\n" << endl; // Muestra en pantalla textos.
cout << "A - Abrir bandeja. \n" << endl;
cout << "C - Cerrar bandeja. \n" << endl;
cout << "========================== \n\n" << 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.
}
else // Si haz pulsado otro caracter distinto de A, C, a, y c aparece
{
cout << "Solo pulsar A o C." << endl << endl; // este mensaje.

}

}
return EXIT_SUCCESS;
}


Gracias por todo.
#313
Buenas:

He mejorado el ménú y puedo abrir la bandeja del disco, pero no me se el código de cerrar la bandeja.

Código (cpp) [Seleccionar]

function mostrarMenu
{
     param (
           [string]$Titulo = ' Control bandeja del lector '
     )
     cls
     Write-Host "╔====================================╗"
     Write-Host "║    $Titulo    ║"
     Write-Host "╠====================================╣"
     Write-Host "║                                    ║"
     Write-Host "║    1) Abrir.                       ║"
     Write-Host "║    2) Cerrar.                      ║"
     Write-Host "║    3) Información.                 ║"
     Write-Host "║    S) Presiona 'S' para salir.     ║"
     Write-Host "║                                    ║"
     Write-Host "╚====================================╝"
}

do
{
     mostrarMenu
     Write-Host ""
     $input = Read-Host "      Elegir una Opción."
     switch ($input)
     {
           '1' {
                cls
                'Abriendo...'
                $items = (New-Object -com "WMPlayer.OCX.7").cdromcollection.item(0)           
                $items.eject()
                'Abierto.'
                Write-Host ""
           } '2' {
                cls
                'Segunda Opción'
           } '3' {
                cls
                'Información.'
           } 's' {
                return
           } 
     }
     pause
}
until ($input -eq 's')


¿Cuál es el código para cerrar el disco?

Gracias.
#314
Hola de nuevo:

Estoy haciendo pruebas con MFC C++ y funciona de maravilla, lo que no se cambiar el tamaño de la etiqueta cuando dice Abierto.

Puedo abrir y cerrar la bandeja con este código. Parece mentira con MFC me parezca más fácil que en modo consola, impresioante.



Código (cpp,92,101) [Seleccionar]

// MFC_ProbandoDlg.cpp: archivo de implementación
//

#include "stdafx.h"
#include "MFC_Probando.h"
#include "MFC_ProbandoDlg.h"
#include "afxdialogex.h"
#include "mmsystem.h" // No olvidar.

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Cuadro de diálogo de CMFCProbandoDlg



CMFCProbandoDlg::CMFCProbandoDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_MFC_PROBANDO_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCProbandoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMFCProbandoDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_ABRIR, &CMFCProbandoDlg::OnBnClickedButtonAbrir)
ON_BN_CLICKED(IDC_BUTTON_CERRAR, &CMFCProbandoDlg::OnBnClickedButtonCerrar)
END_MESSAGE_MAP()


// Controladores de mensajes de CMFCProbandoDlg

BOOL CMFCProbandoDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Establecer el icono para este cuadro de diálogo.  El marco de trabajo realiza esta operación
//  automáticamente cuando la ventana principal de la aplicación no es un cuadro de diálogo
SetIcon(m_hIcon, TRUE); // Establecer icono grande
SetIcon(m_hIcon, FALSE); // Establecer icono pequeño

// TODO: agregar aquí inicialización adicional

return TRUE;  // Devuelve TRUE  a menos que establezca el foco en un control
}

// Si agrega un botón Minimizar al cuadro de diálogo, necesitará el siguiente código
//  para dibujar el icono.  Para aplicaciones MFC que utilicen el modelo de documentos y vistas,
//  esta operación la realiza automáticamente el marco de trabajo.

void CMFCProbandoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // Contexto de dispositivo para dibujo

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Centrar icono en el rectángulo de cliente
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Dibujar el icono
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// El sistema llama a esta función para obtener el cursor que se muestra mientras el usuario arrastra
//  la ventana minimizada.
HCURSOR CMFCProbandoDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}



void CMFCProbandoDlg::OnBnClickedButtonAbrir()
{
// TODO: Agregue aquí su código de controlador de notificación de control.
SetDlgItemText(IDC_STATIC_MENSAJE, L"Abriendo..."); // Mostrar texto.
mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); // Abrir bandeja.
SetDlgItemText(IDC_STATIC_MENSAJE, L"Abierto."); // Mostrar texto.
}


void CMFCProbandoDlg::OnBnClickedButtonCerrar()
{
// TODO: Agregue aquí su código de controlador de notificación de control.
SetDlgItemText(IDC_STATIC_MENSAJE, L"Cerrando..."); // Mostrar texto.
mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); // Cerrar bandeja.
SetDlgItemText(IDC_STATIC_MENSAJE, L"Cerrado."); // Mostrar texto.
}


Siguiendo con el código de C++ en moco consola, he quitado el santo Switch y he usado el else if, ahora puedo abrir la bandeja, pero no puedo cerrarla.

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

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)
{
cout << "Control bandeja del lector : \n\n" << endl; // Muestra en pantalla textos.
cout << "A - Abrir bandeja. \n" << endl;
cout << "C - Cerrar bandeja. \n" << endl;
cout << "========================== \n\n" << endl;

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

int i = 0;
char c;

while (entrada[i])
{
c = entrada[i];
putchar(tolower(c));
i++;
}

string str(entrada);

// Abrir bandeja.
if (str == "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.
} // Cerrar bandeja.
else if (str == "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.
}
else // 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;
}


¿Alguna idea?

Saludos.
#316
Programación C/C++ / Re: Solucionando errores
19 Noviembre 2017, 22:27 PM
Hola Señor.

¿Cómo estás?

Tenía que poner std, no str, me esquivoqué al escribir, en el cual también da errores.

Hice otro código pero sigue con errores.
Código (cpp,29) [Seleccionar]
#include "stdafx.h"
#include "stdio.h"
#include "Windows.h"
#include "iostream"
#include "string"
#include "conio.h"
#include "cctype"

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)
{
cout << "Control bandeja del lector : \n\n" << endl; // Muestra en pantalla textos.
cout << "A - Abrir bandeja. \n" << endl;
cout << "C - Cerrar bandeja. \n" << endl;
cout << "========================== \n\n" << endl;

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

switch (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;
}



Errores:


Si que me está dando guerra.

Saludos.
#317
Buenas:

Veo que hay GUI para hacer la vida más fácil, no tiene todos los códigos pero funciona.
https://poshgui.com/#

Más GUI para elegir.
http://tianit.cloudapp.net/blog/index.php/2015/11/04/crear-formularios-con-powershell/

¿Por qué Microsoft no pone como novedad un editor GUI visual para F# y PowerShell?

No se porqué no lo hace si hay demanda, los que lo hacen son terceros y no están completos pero lo intentan y al menos existen para escapar.

Mi truco es, hacer el formulario al 100 % con Visual C# y adaptar los códigos a PowerShell con lo que quiere mucho tiempo.

Saludos.
#318
Scripting / Crear formulario de estos lenguajes
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.
#319
Hola:

Tengo esta ventana creada con PowerShell. Lo que no entiendo por mucho que observe el código, es que me aparezcan dos botones iguales en la parte de arriba.



# Cargo los Assemblies (necesario para definir el form).
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms")
[void][reflection.assembly]::loadwithpartialname("System.Drawing")

            $label_Mensaje = New-Object System.Windows.Forms.Label
            $button_Abrir = New-Object System.Windows.Forms.Button
            $button_Cerrar = New-Object System.Windows.Forms.Button
            $groupBox_Bandeja = New-Object System.Windows.Forms.GroupBox

            #
            # label_Mensaje
            #
            $label_Mensaje.Location = New-Object System.Drawing.Point(12, 9)
            $label_Mensaje.Name = "label_Mensaje"
            $label_Mensaje.Size = New-Object System.Drawing.Size(58, 13)
            $label_Mensaje.Text = "Abriendo..."
            #
            # button_Abrir
            #
            $button_Abrir.Location = New-Object System.Drawing.Point(31, 30)
            $button_Abrir.Name = "button_Abrir"
            $button_Abrir.Size = New-Object System.Drawing.Size(75, 23)
            $button_Abrir.Text = "Abrir"         
            #
            # button_Cerrar
            #
            $button_Cerrar.Location = New-Object System.Drawing.Point(139, 30)
            $button_Cerrar.Name = "button_Cerrar"
            $button_Cerrar.Size = New-Object System.Drawing.Size(75, 23)
            $button_Cerrar.Text = "Cerrar"
            #
            # groupBox_Bandeja
            #
            $groupBox_Bandeja.Controls.Add($button_Cerrar)
            $groupBox_Bandeja.Controls.Add($button_Abrir)
            $groupBox_Bandeja.Location = New-Object System.Drawing.Point(15, 118)
            $groupBox_Bandeja.Name = "groupBox_Bandeja"
            $groupBox_Bandeja.Size = New-Object System.Drawing.Size(250, 97)
            $groupBox_Bandeja.Text = "Bandeja"

            #
            # Form1
            #
            #$AutoScaleDimensions = New-Object System.Drawing.SizeF(6F, 13F)
            #$AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            $Form.ClientSize = New-Object System.Drawing.Size(284, 261)
            $Form.Controls.Add($groupBox_Bandeja)
            $Form.Controls.Add($label_Mensaje)
            $Form.Name = "Form1"
            $Form.Text = "Ventana PowerShell"

            # Ejecuto el formulario.
            [void]$Form.ShowDialog()


Saludos.
#320
Scripting / Hacer un menú sencillo con este Script
19 Noviembre 2017, 07:22 AM
Hola a todos y a todas:

Quiero hacer un menú sencillo que las funciones se hará después.

Por ahora he hecho esto de esta manera haciendo pruebas.

Citar╔====================================╗
║     Control bandeja del lector     ║
╠====================================╣
║                                    ║
1) Primera Opción
2) Segunda Opción
3) Tercera Opción
S) Presiona 'S' para salir
Elegir una Opción:

Como puedes ver, pulso el número 2), luego Enter para poder entrar en el menú. Mi idea es, desde que pulses la tecla número 2), entre directamente a la Segunda opción sin tener que pulsar Enter.

{
     param (
           [string]$Titulo = ' Control bandeja del lector '
     )
     cls
     Write-Host "╔====================================╗"
     Write-Host "║    $Titulo    ║"
     Write-Host "╠====================================╣"
     Write-Host "║                                    ║"

     
     Write-Host "1) Primera Opción"
     Write-Host "2) Segunda Opción"
     Write-Host "3) Tercera Opción"
     Write-Host "S) Presiona 'S' para salir"
}

do
{
     mostrarMenu
     $input = Read-Host "Elegir una Opción"
     switch ($input)
     {
           '1' {
                cls
                'Primera Opción'
           } '2' {
                cls
                'Segunda Opción'
           } '3' {
                cls
                'Tercera Opción'
           } 's' {
                return
           } 
     }
     pause
}
until ($input -eq 's')



¿Cómo se hace lo que quiero?

Saludos.