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

#2471
.NET (C#, VB.NET, ASP) / Re: Digit0 DataBase 1.0 ...
29 Diciembre 2009, 14:45 PM
Primero, Cuando re-distribuyas trata de que todo funcione, acabo de ejecutar el source y me doy cuenta de que "admin"-"admin" no funciona :¬¬ jeje....

Para los que prueben el source, logueen con uno de estos usuarios

user: Eadmin o Madmin
pass: admin

Ahora lo seguire viendo, pondre mis "observaciones" aca

[OBSERVACIONES]

  • Activa comprobacion de instancia previa: Sin querer ejecute 2 veces el ejecutable, y me salio 2 veces la pantalla de login, tengo entendido de que una vez que uno trabaje en una base de datos en access, otro debe esperar para modificarla. Si se loguean 2 a la vez, ¡PUM! algo inesperado pasará jeje.

  • Buena estrategia para agregar items: Es verdad, muy buena e ingeniosa esa estrategia para "aprovechar todos los espacios", pero aun asi, se puede optimizar ;)

  • No uses controles en la capa de Datos! Las funciones de consulta reciben controles de WIndows Forms como parametros, NO DEBE SER ASI!!! Gastas memoria copiando control por control, imagina que vas a pasar ese proyecto a uno de consola, tendrias que re-armar media clase! Y si fuera para web-services, matate! :xD Usa clases, o variables simples. Ej: BuscarEmpleado(Codigo as String) nada mas... jeje

  • Reutiliza los formularios: Tienes un formulario para agregar una cosa, y otro para editarlo. Podrias usar uno solo para las 2 cosas, usando propiedades, etc, Ya que el formato es el mismo, te ahorras un poco de codigo y espacio en memoria

  • Agrega foco al teclado: Hay gente que es mas rapida usando solo el teclado que con el teclado y el mouse. Pero tu aplicacion no tiene soporte para ir presionando Enter, tab, o incluso las flechas jeje. Deberias ponerlo. Hay lugares donde practicamente no trabajan con mouse  ;)

Hasta ahora esas son mis observaciones. En todo lo demas esta bien, muy bueno para ser tu primera aplicacion, y el diseño de la portada me gusto :P jeje
#2472
Es para usar objetos, es introduccion a la POO seguro, tal vez con otro ejemplo entiendas ;D
#2473
Cita de: seba123neo en 29 Diciembre 2009, 02:47 AM
Hola, en visual basic 6 hay una forma de forzar el apagado con la api AdjustTokenPrivileges, fijate si hay algo parecido en C#, debe haber seguro...

saludos.

Exacto, tienes que usar la API, y apagar "a la fuerza", te paso parte de una aplicacion que hize recopilando codigos de internet (la aplicacion era para apagar la PC a determinada hora, con el shutdown.exe era dificil calcular en cuantos segundos queria q se apage :P)

Código (vbnet) [Seleccionar]

#region "- Delcaraciones API -"
<DllImport("user32.dll", SetLastError:=True)> _
    Function ExitWindowsEx( _
     ByVal uFlags As ExitWindows, _
     ByVal dwReason As ShutdownReason) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function

    <Flags()> _
    Enum ExitWindows As UInteger
        LogOff = &H0
        ShutDown = &H1
        Reboot = &H2
        PowerOff = &H8
        RestartApps = &H40
        ' plus AT MOST ONE of the following two:
        Force = &H4
        ForceIfHung = &H10
    End Enum

    <Flags()> _
Enum ShutdownReason As UInteger
        MajorApplication = &H40000
        MajorHardware = &H10000
        MajorLegacyApi = &H70000
        MajorOperatingSystem = &H20000
        MajorOther = &H0
        MajorPower = &H60000
        MajorSoftware = &H30000
        MajorSystem = &H50000

        MinorBlueScreen = &HF
        MinorCordUnplugged = &HB
        MinorDisk = &H7
        MinorEnvironment = &HC
        MinorHardwareDriver = &HD
        MinorHotfix = &H11
        MinorHung = &H5
        MinorInstallation = &H2
        MinorMaintenance = &H1
        MinorMMC = &H19
        MinorNetworkConnectivity = &H14
        MinorNetworkCard = &H9
        MinorOther = &H0
        MinorOtherDriver = &HE
        MinorPowerSupply = &HA
        MinorProcessor = &H8
        MinorReconfig = &H4
        MinorSecurity = &H13
        MinorSecurityFix = &H12
        MinorSecurityFixUninstall = &H18
        MinorServicePack = &H10
        MinorServicePackUninstall = &H16
        MinorTermSrv = &H20
        MinorUnstable = &H6
        MinorUpgrade = &H3
        MinorWMI = &H15

        FlagUserDefined = &H40000000
        FlagPlanned = &H80000000&
    End Enum

    'This routine enables the Shutdown privilege for the current process,
    'which is necessary if you want to call ExitWindowsEx.

    Const ANYSIZE_ARRAY As Integer = 1
    Const TOKEN_QUERY As Integer = &H8
    Const TOKEN_ADJUST_PRIVILEGES As Integer = &H20
    Const SE_SHUTDOWN_NAME As String = "SeShutdownPrivilege"
    Const SE_PRIVILEGE_ENABLED As Integer = &H2

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure LUID
        Public LowPart As UInt32
        Public HighPart As UInt32
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure LUID_AND_ATTRIBUTES
        Public Luid As LUID
        Public Attributes As UInt32
    End Structure

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure TOKEN_PRIVILEGES
        Public PrivilegeCount As UInt32
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=ANYSIZE_ARRAY)> _
        Public Privileges() As LUID_AND_ATTRIBUTES
    End Structure

    <DllImport("advapi32.dll", SetLastError:=True)> _
    Private Function LookupPrivilegeValue( _
     ByVal lpSystemName As String, _
     ByVal lpName As String, _
     ByRef lpLuid As LUID _
      ) As Boolean
    End Function

    <DllImport("advapi32.dll", SetLastError:=True)> _
    Private Function OpenProcessToken( _
     ByVal ProcessHandle As IntPtr, _
     ByVal DesiredAccess As Integer, _
     ByRef TokenHandle As IntPtr _
      ) As Boolean
    End Function

    <DllImport("kernel32.dll", SetLastError:=True)> _
    Private Function CloseHandle(ByVal hHandle As IntPtr) As Boolean
    End Function

    <DllImport("advapi32.dll", SetLastError:=True)> _
    Private Function AdjustTokenPrivileges( _
       ByVal TokenHandle As IntPtr, _
       ByVal DisableAllPrivileges As Boolean, _
       ByRef NewState As TOKEN_PRIVILEGES, _
       ByVal BufferLength As Integer, _
       ByRef PreviousState As TOKEN_PRIVILEGES, _
       ByRef ReturnLength As IntPtr _
     ) As Boolean
    End Function

    Public Sub AcquireShutdownPrivilege()

        Dim lastWin32Error As Integer = 0

        'Get the LUID that corresponds to the Shutdown privilege, if it exists.
        Dim luid_Shutdown As LUID
        If Not LookupPrivilegeValue(Nothing, SE_SHUTDOWN_NAME, luid_Shutdown) Then
            lastWin32Error = Marshal.GetLastWin32Error()
            Throw New System.ComponentModel.Win32Exception(lastWin32Error, _
             "LookupPrivilegeValue failed with error " & lastWin32Error.ToString & ".")
        End If

        'Get the current process's token.
        Dim hProc As IntPtr = Process.GetCurrentProcess().Handle
        Dim hToken As IntPtr
        If Not OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) Then
            lastWin32Error = Marshal.GetLastWin32Error()
            Throw New System.ComponentModel.Win32Exception(lastWin32Error, _
             "OpenProcessToken failed with error " & lastWin32Error.ToString & ".")
        End If

        Try

            'Set up a LUID_AND_ATTRIBUTES structure containing the Shutdown privilege, marked as enabled.
            Dim luaAttr As New LUID_AND_ATTRIBUTES
            luaAttr.Luid = luid_Shutdown
            luaAttr.Attributes = SE_PRIVILEGE_ENABLED

            'Set up a TOKEN_PRIVILEGES structure containing only the shutdown privilege.
            Dim newState As New TOKEN_PRIVILEGES
            newState.PrivilegeCount = 1
            newState.Privileges = New LUID_AND_ATTRIBUTES() {luaAttr}

            'Set up a TOKEN_PRIVILEGES structure for the returned (modified) privileges.
            Dim prevState As TOKEN_PRIVILEGES = New TOKEN_PRIVILEGES
            ReDim prevState.Privileges(CInt(newState.PrivilegeCount))

            'Apply the TOKEN_PRIVILEGES structure to the current process's token.
            Dim returnLength As IntPtr
            If Not AdjustTokenPrivileges(hToken, False, newState, Marshal.SizeOf(prevState), prevState, returnLength) Then
                lastWin32Error = Marshal.GetLastWin32Error()
                Throw New System.ComponentModel.Win32Exception(lastWin32Error, _
                 "AdjustTokenPrivileges failed with error " & lastWin32Error.ToString & ".")
            End If

        Finally
            CloseHandle(hToken)
        End Try

    End Sub
#End Region

Sub ApagarWindows()
            Call AcquireShutdownPrivilege()
            Call ExitWindowsEx(ExitWindows.ShutDown, ShutdownReason.MajorApplication)
End Sub


Ahora encargate de pasar eso a C#  ;D

PInvoke te puede ayudar para las API, guarda el link  ;)
#2474
Cita de: Meta en 29 Diciembre 2009, 01:26 AM
Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Net;       // No olvidar.
using System.Net.Mail;


namespace email
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Evento para cuando pulsamos el botón "enviar"
        private void button1_Click(object sender, EventArgs e)
        {
            //La cadena "servidor" es el servidor de correo que enviará tu mensaje
            string servidor = "Localhost"; // Seria el de IIS
            // Crea el mensaje estableciendo quién lo manda y quién lo recibe
            MailMessage mensaje = new MailMessage(
               emisor.Text,
               receptor.Text,
               asunto.Text,
               mensajazo.Text);

            //Envía el mensaje.
            SmtpClient cliente = new SmtpClient(servidor);

                /* cliente.UseDefaultCredentials = false;
                *cliente.Credentials = new System.Net.NetworkCredential(emisor.Text, "csfg@$gfdvs5v&vC&6765g74v654|¬#~6");
                *cliente.Port = 587;
                *cliente.Host = "smtp.gmail.com";
                *cliente.EnableSsl = true;
                * Con IIS ya no va */
            //Añade credenciales si el servidor lo requiere.
            //cliente.Credentials = CredentialCache.DefaultNetworkCredentials;
            cliente.Send(mensaje);
        }
    }
}



Asi te deberia de andar, siempre y cuando tengas instalado y activado el SMTP del IIS

Citar
El que dices no me vale ya que el PIC 16F84A envía órdenes al puerto serie que detecta C#. He hecho un mini ejemplo y dejo el código.
el mail lo quieres enviar desde C# no? Entonces porque no sirve? cual es el problema?
#2475
pues haz eso, Instala IIS y configura el servidor SMTP o instala algun servidor SMTP y bueno....lo demas supongo que ya lo sabes (el codigo no cambia, lo que cambia son los parametros :P)

Y en tu cuenta google marca el "correo" del que supuestamente mandas para que no lo detecte como spam
#2476
Cita de: Meta en 28 Diciembre 2009, 22:04 PM
Busca en VB .net el componente NotifyIcon.
:huh: :huh:


para que? Existe la manera (mediante API) de implementar NotifyIcon en vb6, pero no es lo que el esta "planteando" aca, el lo que quiere haces iniciar un proceso, pero que no se vea ninguna ventana de este, o si?

Y otra pregunta, el proceso es interactivo? (hace falta hacer click en un boton para que empieze a funcionar??)
#2477
Si se puede, implementa tu "servidor SMTP", pero al no ser "conocido" algunos lo tomaran como SPAM
IIS tiene un servidor SMTp, nose como funciona, pero teoricamente sirve para enviar mails desde ahi, y no necesitas contraseña (salvo q lo configures, claro)


O te pensas que existen los mails "no-responder@unaPaginaweb.com".... nop, estos son generados por sus propios servidores SMTP, que basicamente son pequeños programitas jeje
#2478
Cita de: agustin_v8 en 28 Diciembre 2009, 20:24 PM
Hola intente con

Código (vb) [Seleccionar]
Private Sub Command2_Click()
Call Shell("C:\Documents and Settings\USER\Escritorio\host\server1\samp-server.exe", vbHide)
End Sub


y compila perfecto, solo que al hacer clic no pasa nada :S, ni siquiera se ve que lo ejecuta y la ruta esta perfecta y VB toma la ruta bien.

Pero recordemos que el exe que intento ejecutar carga archivos tambien, como dije en comentarios anteriores, la cual puede ser que traiga inconvenientes.

Se supone que no se tiene que ver que se ejecuta no? (Para ver si se inicio el proceso, fijate en el administrador de tareas o alguno parecido).

El funcionamiento del exe no tiene nada que ver con que lo llames, y ... estas seguro de que la ruta que le pasas es la correcta? no necesitara algun parametro o algo?
#2479
CitarProbé con:

Código (vb) [Seleccionar]
Private Sub Command2_Click()
Shell("C:\Documents and Settings\USER\Escritorio\host\server1\samp-server.exe", vbHide)
End Sub


y al compilar me tira error y dice:

CitarError de compilacion:

Se esperaba: =



Código (vb) [Seleccionar]
Private Sub Command2_Click()
Call Shell("C:\Documents and Settings\USER\Escritorio\host\server1\samp-server.exe", vbHide)
End Sub
#2480
PHP / Re: A los viejitos en PHP y Mysql :P
27 Diciembre 2009, 17:57 PM
Cita de: fede_cp en 27 Diciembre 2009, 17:55 PM
a algo asi como ajax, seria recomendable arpender ajax?, porque me parece que con php y mysql me quedo corto, osea combinar algunas cosas.

Obviamente! Es la puerta a la web 2.0, ajax es mas "comodo" para el usuario (aunque no lo note), aunque te puede traer unos dolores de cabeza, es muy bueno saberlo