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 - Eleкtro

#7881
Scripting / Re: ayuda a simplificar bat
11 Octubre 2013, 22:21 PM
tienes el argumento abierto en Copiar G, encierralo con comillas dobles...

De todas formas puedes eliminar tareas desde el programador de tareas, en el panel de control.

saludos
#7882
Scripting / Re: ayuda a simplificar bat
11 Octubre 2013, 20:49 PM
En lugar de copiar los ejemplos de los demás sin entender su funcionamiento deberías procurar buscar lo que significa cada cosa y para que sirven.

El ejemplo de @Segadorfelix contiene dos errores de sintaxis, aquí estás dejando un espacio entre la variable del FOR y la comilla doble \" %%r,
pero además de eso, la variable de FOR contiene una letra, un solo caracter, ¿entonces no crees que aquí faltaría algo más?:
\" %%r\Hide\start.vbs\"

Hazle un Echo a la cadena para darte cuenta de lo que falta.

Saludos
#7883
Cita de: juanjo86 en 11 Octubre 2013, 10:00 AM¿Ninguna idea?

Si quieres que el script A reciba una variable del script B entonces tienes que hacer global dicha variable.

Una vez hayas terminado de manejar tus variables locales en el script B, al desactivar ENDLOCAL, podrías setearlas para hacerlas globales, de esta manera:

script A
Código (dos) [Seleccionar]
@Echo OFF & SETLOCAL
Call ScriptB.bat
Echo %var% & REM Result: 123
Pause&Exit


Script B
Código (dos) [Seleccionar]
@Echo OFF & SETLOCAL
Set "var=123"
Endlocal & (
Set "var=%var%"
)
Exit /B 0


Saludos
#7884
Scripting / Re: [Batch] Ayuda con código
11 Octubre 2013, 17:28 PM
Hola

Aquí se ve un fallo a simple vista, te comiste una comilla doble:
CitarSet /P "SelectFiles=

Luego aquí no estás redireccionando absolútamente nada:
Citar --------->Activados.txt

No ibas mal encaminado en esta parte, pero esto no es un For, el keyword "Do" solo pertenece a un For, en su lugar usa los operadores lógicos y de comparación "&" "|" "&&"  "||".
CitarType "%Directory%\activados.txt" | Findstr /V /I "!File%%X!" do (set info=Activado)

Aquí no estás expandiendo la variable info, por lo tanto tus checkeos no iban a funcionar corréctamente.
CitarEcho %%X. !File%%X! %info% | MORE

Prueba así:
@Echo OFF & Color 70 & MODE con cols=75
Title Animefiles 1.3.2

REM CD Plugins
if not exist ".\Plugins\Activados.txt" (
REM --------->Activados.txt
Echo. --------->".\Plugins\Activados.txt"
)

:ACTIVAR
cls
SETLOCAL EnableDelayedExpansion
Set "Directory=%CD%\plugins"

For %%# in (
"%Directory%\*.bat"
) Do (
Set /A "FileCount+=1"
Set "File!FileCount!=%%~nx#"
)
echo.
echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ |MORE
For /L %%X in (1, 1, !FileCount!) Do (
REM Type "%Directory%\activados.txt" | Findstr /V /I "!File%%X!" do (set info=Activado)
Type "%Directory%\activados.txt" | Findstr /I "!File%%X!" 1>NUL 2>&1 && (
set "info=Activado"
) || (
set "info=Desactivado"
)
REM if not defined info (set info=Desactivado)
REM Echo %%X. !File%%X! %info% | MORE
Echo %%X. !File%%X! !info! | MORE
)
echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ|MORE
echo Seleccione el plugin que desea activar:
echo.
Set /P "SelectFiles="
Set "SelectFiles=%SelectFiles: =%"
REM For %%# in (%SelectFiles%) Do (
REM Echo "!File%%#!" >> Activados.txt
REM )
(For %%# in (%SelectFiles%) Do (Echo "!File%%#!"))>> ".\Plugins\Activados.txt"
pause
exit
#7885
No puedo ayudarte mucho más porque no entiendo porque intentas usar las Pipes del For con el programa Clever, no tengo estas utilidades de Winamp y tampoco comentas lo que se supone que debería suceder al redireccionar a este programa, entonces solo puedo aconsejarte que mejores la sintaxis/integridad del código y poco más.

Prueba algo así:
Código (dos) [Seleccionar]
IF %ERRORLEVEL% EQU 0 (cd "%UserProfile%\Desktop\clever pause") | (clever.exe pause 1>nul & Goto :Comprobar)

Código (dos) [Seleccionar]
IF %ERRORLEVEL% EQU 0 (FOR /R %%_ in ("*clever.exe") do (start /B "" "%%_")) | clever.exe pause 1>nul | (Taskkill /F /IM TxtTick.exe >nul & Goto :Esperar)

Saludos
#7886
Mientras sigas escribiendo código de la manera en la que lo estás haciendo, los errores no van a cesar.

1. Usa los operadores de agrupación para agrupar los comandos ().

2. Encierra todos los argumentos "" (sobretodo el de la ruta de directorio...).

3. Comprueba si el error se solucionó.

Saludos
#7887
Un ayudante para manejar la aplicación dBpoweramp Music Converter, es el mejor conversor archivos de música a cualquier formato.

http://www.dbpoweramp.com/dmc.htm

Le agregué lo necesario para convertir a MP3, WAV, y WMA, se puede extender para agregar todos los demás codecs, pero es muy tedioso...

Tambiñen le agregué un par de eventos para capturar el progreso de conversión y mensajes de errores, el modo de empleo está explicado en los primeros comentarios.

PD: También existe una librería llamada dMcscriptinglib.dll, pero los autores de dbPowerAmp me dijeron que no es posible capturar el progreso de una conversión usando la librería, por ese motivo uso el executable CLI.

EDITO: Corregido un bug en las Enumeraciones del SampleRate de los Codecs, y he simplificado parte del código.

Código (vbnet) [Seleccionar]
#Region " CoreConverter Helper "



' [ CoreConverter Helper ]
'
' // By Elektro H@cker
'
'
' Instructions:
'
' 1. Add the "CoreConverter.exe" into the project,
'    together with the dbPoweramp Effects and Codec folders.
'
' Examples :
'
' -------------------
' CONVERT FILE TO MP3
' -------------------
' CoreConverter.Convert_To_MP3("C:\Input.wav", "C:\Output.mp3", _
'                              CoreConverter.Lame_Bitrate.kbps_320, _
'                              CoreConverter.Lame_Bitrate_Mode.cbr, _
'                              CoreConverter.Lame_Profile.SLOW, _
'                              CoreConverter.Lame_Quality.Q0_Maximum, _
'                              CoreConverter.Lame_Khz.Same_As_Source, _
'                              CoreConverter.Lame_Channels.auto, _
'                              { _
'                                CoreConverter.DSP_Effects.Delete_Output_File_on_Error, _
'                                CoreConverter.DSP_Effects.Recycle_Source_File_After_Conversion _
'                              }, _
'                              False, _
'                              CoreConverter.Priority.normal)
'
' -------------------
' CONVERT FILE TO WAV
' -------------------
' CoreConverter.Convert_To_WAV_Uncompressed("C:\Input.mp3", "C:\Output.wav", _
'                                           CoreConverter.WAV_Uncompressed_Bitrate.Same_As_Source, _
'                                           CoreConverter.WAV_Uncompressed_Khz.Same_As_Source, _
'                                           CoreConverter.WAV_Uncompressed_Channels.Same_As_Source, , False)
'
' -------------------
' CONVERT FILE TO WMA
' -------------------
' CoreConverter.Convert_To_WMA("C:\Input.mp3", "C:\Output.wma", _
'                              CoreConverter.WMA_9_2_BitRates.Kbps_128, _
'                              CoreConverter.WMA_9_2_Khz.Khz_44100, _
'                              CoreConverter.WMA_9_2_Channels.stereo, , False)
'
' ------
' EVENTS
' ------
' Public WithEvents Converter As New CoreConverter()
'
' Sub Converter_Progress(Progress As Integer, e As EventArgs) Handles Converter.PercentDone
'     ProgressBar1.Maximum = 59
'     ProgressBar1.Step = 1
'     ProgressBar1.PerformStep()
' End Sub
'
' Sub Converter_Message(Message As String, e As EventArgs) Handles Converter.Exited
'     ProgressBar1.Value = 0
'     MessageBox.Show(Message)
' End Sub



Public Class CoreConverter : Implements IDisposable

#Region " Variables "

   ' <summary>
   ' Gets or sets CoreConverter.exe executable path.
   ' </summary>
   Public Shared CoreConverter_Location As String = ".\CoreConverter.exe"

   ' Stores the CoreConverter process progress
   Private Shared CurrentProgress As Integer = 0

   ' Stores the CoreConverter process StandarOutput
   Private Shared StandardOutput As String = String.Empty

   ' Stores the CoreConverter process ErrorOutput
   Private Shared ErrorOutput As String = String.Empty

   ' Stores the next output character
   Private Shared OutputCharacter As Char = Nothing

   ' Stores the DSP Effects formatted string
   Private Shared Effects As String = String.Empty

#End Region

#Region " Events "

   ' <summary>
   ' Event raised when conversion progress changes.
   ' </summary>
   Public Shared Event PercentDone As EventHandler(Of PercentDoneEventArgs)
   Public Class PercentDoneEventArgs : Inherits EventArgs
       Public Property Progress As Integer
   End Class

   ' <summary>
   ' Event raised when CoreConverter process has exited.
   ' </summary>
   Public Shared Event Exited As EventHandler(Of ExitedEventArgs)
   Public Class ExitedEventArgs : Inherits EventArgs
       Public Property Message As String
   End Class

#End Region

#Region " Process Info "

   ' CoreConverter Process Information.
   Private Shared CoreConverter As New Process() With { _
       .StartInfo = New ProcessStartInfo With { _
       .CreateNoWindow = True, _
       .UseShellExecute = False, _
       .RedirectStandardError = True, _
       .RedirectStandardOutput = True, _
       .StandardErrorEncoding = System.Text.Encoding.Unicode, _
       .StandardOutputEncoding = System.Text.Encoding.Unicode}}

#End Region

#Region " CoreConverter Enumerations "

   ' Priority level of CoreConverter.exe
   Enum Priority
       idle
       low
       normal
       high
   End Enum

   ' DSP Effects
   Public Enum DSP_Effects
       Delete_Output_File_on_Error ' Delete failed conversion (not deletes source file).
       Delete_Source_File_After_Conversion ' Delete source file after conversion.
       Recycle_Source_File_After_Conversion ' Send source file to recycle bin after conversion.
       Karaoke_Remove_Voice ' Remove voice from file.
       Karaoke_Remove_Instrument ' Remove instruments from file.
       Reverse ' Reverse complete audio file.
       Write_Silence ' Write silence at start of file.
   End Enum

#End Region

#Region " Codec Enumerations "

#Region " MP3 Lame "

   Enum Lame_Bitrate
       kbps_8 = 8
       kbps_16 = 16
       kbps_24 = 24
       kbps_32 = 32
       kbps_40 = 40
       kbps_48 = 48
       kbps_56 = 56
       kbps_64 = 64
       kbps_80 = 80
       kbps_96 = 96
       kbps_112 = 112
       kbps_128 = 128
       kbps_144 = 144
       kbps_160 = 160
       kbps_192 = 192
       kbps_224 = 224
       kbps_256 = 256
       kbps_320 = 320
   End Enum

   Enum Lame_Bitrate_Mode
       cbr
       abr
   End Enum

   Enum Lame_Profile
       NORMAL
       FAST
       SLOW
   End Enum

   Enum Lame_Quality
       Q0_Maximum = 0
       Q1 = 1
       Q2 = 2
       Q3 = 3
       Q4 = 4
       Q5 = 5
       Q6 = 6
       Q7 = 7
       Q8 = 8
       Q9_Minimum = 9
   End Enum

   Enum Lame_Khz
       Same_As_Source
       khz_8000 = 8000
       khz_11025 = 11025
       khz_12000 = 12000
       khz_16000 = 16000
       khz_22050 = 22050
       khz_24000 = 24000
       khz_32000 = 32000
       khz_44100 = 44100
       khz_48000 = 48000
   End Enum

   Enum Lame_Channels
       auto
       mono
       stereo
       joint_stereo
       forced_joint_stereo
       forced_stereo
       dual_channels
   End Enum


#End Region

#Region " WAV Uncompressed "

   Enum WAV_Uncompressed_Bitrate
       Same_As_Source
       bits_8 = 8
       bits_16 = 16
       bits_24 = 24
       bits_32 = 32
   End Enum

   Enum WAV_Uncompressed_Khz
       Same_As_Source
       khz_8000 = 8000
       khz_11025 = 11025
       khz_12000 = 12000
       khz_16000 = 16000
       khz_22050 = 22050
       khz_24000 = 24000
       khz_32000 = 32000
       khz_44100 = 44100
       khz_48000 = 48000
       khz_96000 = 96000
       khz_192000 = 192000
   End Enum

   Enum WAV_Uncompressed_Channels
       Same_As_Source
       Channels_1_Mono = 1
       Channels_2_Stereo = 2
       Channels_3 = 3
       Channels_4_Quadraphonic = 4
       Channels_5_Surround = 5
       Channels_6_Surround_DVD = 6
       Channels_7 = 7
       Channels_8_Theater = 8
   End Enum

#End Region

#Region " WMA 9.2 "

   Enum WMA_9_2_BitRates
       Kbps_12 = 12
       Kbps_16 = 16
       Kbps_20 = 20
       Kbps_22 = 22
       Kbps_24 = 24
       Kbps_32 = 32
       Kbps_40 = 40
       Kbps_48 = 48
       Kbps_64 = 64
       Kbps_80 = 80
       Kbps_96 = 96
       Kbps_128 = 128
       Kbps_160 = 160
       Kbps_192 = 192
       Kbps_256 = 256
       Kbps_320 = 320
   End Enum

   Enum WMA_9_2_Khz
       Khz_8000 = 8
       Khz_16000 = 16
       Khz_22050 = 22
       Khz_32000 = 32
       Khz_44100 = 44
       Khz_48000 = 48
   End Enum

   Enum WMA_9_2_Channels
       mono
       stereo
   End Enum

#End Region

#End Region

#Region " Codec Procedures "

#Region " MP3 Lame "

   ' <summary>
   ' Converts a file to MP3 using Lame codec.
   ' </summary>
   Public Shared Sub Convert_To_MP3(ByVal In_File As String, _
                            ByVal Out_File As String, _
                            ByVal Bitrate As Lame_Bitrate, _
                            ByVal Bitrate_Mode As Lame_Bitrate_Mode, _
                            ByVal Encoding_Profile As Lame_Profile, _
                            ByVal Quality As Lame_Quality, _
                            ByVal Khz As Lame_Khz, _
                            ByVal Channels As Lame_Channels, _
                            Optional ByVal DSP_Effects() As DSP_Effects = Nothing, _
                            Optional ByVal Update_Tag As Boolean = True, _
                            Optional ByVal Priority As Priority = Priority.normal, _
                            Optional ByVal Processor As Short = 1)

       Get_Effects(DSP_Effects)

       Set_Main_Parametters("mp3 (Lame)", In_File, Out_File, If(Not Update_Tag, "-noidtag", ""), Effects, Priority.ToString, Processor.ToString)

       CoreConverter.StartInfo.Arguments &= _
       String.Format("-b {0} --{1} -encoding=""{2}"" -freq=""{3}"" -channels=""{4}"" --noreplaygain --extracli=""-q {5}""", _
                     CInt(Bitrate), _
                     Bitrate_Mode.ToString, _
                     Encoding_Profile.ToString, _
                     If(Khz = Lame_Khz.Same_As_Source, "", CInt(Khz)), _
                     If(Channels = Lame_Channels.auto, "", Channels), _
                     CInt(Quality))

       Run_CoreConverter()

   End Sub

#End Region

#Region " WAV Uncompressed "

   ' <summary>
   ' Converts a file to WAV
   ' </summary>
   Public Shared Sub Convert_To_WAV_Uncompressed(ByVal In_File As String, _
                                ByVal Out_File As String, _
                                ByVal Bitrate As WAV_Uncompressed_Bitrate, _
                                ByVal Khz As WAV_Uncompressed_Khz, _
                                ByVal Channels As WAV_Uncompressed_Channels, _
                                Optional ByVal DSP_Effects() As DSP_Effects = Nothing, _
                                Optional ByVal Update_Tag As Boolean = True, _
                                Optional ByVal Priority As Priority = Priority.normal, _
                                Optional ByVal Processor As Short = 1)

       Get_Effects(DSP_Effects)

       Set_Main_Parametters("Wave", In_File, Out_File, If(Not Update_Tag, "-noidtag", ""), Effects, Priority.ToString, Processor.ToString)

       CoreConverter.StartInfo.Arguments &= _
       String.Format("-compression=""PCM"" -bits=""{0}"" -freq=""{1}"" -channels=""{2}""", _
                     If(Bitrate = WAV_Uncompressed_Bitrate.Same_As_Source, "", CInt(Bitrate)), _
                     If(Khz = WAV_Uncompressed_Khz.Same_As_Source, "", CInt(Khz)), _
                     If(Channels = WAV_Uncompressed_Channels.Same_As_Source, "", CInt(Channels)))

       Run_CoreConverter()

   End Sub

#End Region

#Region " WMA 9.2 "

   ' <summary>
   ' Converts a file to WMA 9.2
   ' </summary>
   Public Shared Sub Convert_To_WMA(ByVal In_File As String, _
                                ByVal Out_File As String, _
                                ByVal Bitrate As WMA_9_2_BitRates, _
                                ByVal Khz As WMA_9_2_Khz, _
                                ByVal Channels As WMA_9_2_Channels, _
                                Optional ByVal DSP_Effects() As DSP_Effects = Nothing, _
                                Optional ByVal Update_Tag As Boolean = True, _
                                Optional ByVal Priority As Priority = Priority.normal, _
                                Optional ByVal Processor As Short = 1)

       Get_Effects(DSP_Effects)

       Set_Main_Parametters("Windows Media Audio 10", In_File, Out_File, If(Not Update_Tag, "-noidtag", ""), Effects, Priority.ToString, Processor.ToString)

       CoreConverter.StartInfo.Arguments &= _
       String.Format("-codec=""Windows Media Audio 9.2"" -settings=""{0} kbps, {1} kHz, {2} CBR""",
                     CInt(Bitrate), _
                     CInt(Khz), _
                     Channels.ToString)

       Run_CoreConverter()

   End Sub

#End Region

#End Region

#Region " Run Converter Procedure "

   Private Shared Sub Run_CoreConverter()

       CoreConverter.StartInfo.FileName = CoreConverter_Location
       CoreConverter.Start()

       While Not CoreConverter.HasExited

           OutputCharacter = ChrW(CoreConverter.StandardOutput.Read)

           If OutputCharacter = "*" Then
               CurrentProgress += 1 ' Maximum value is 59, so a ProgressBar Maximum property value would be 59.
               RaiseEvent PercentDone(CurrentProgress, Nothing)
           End If

           If CurrentProgress = 59 Then
               ' I store the last line(s) 'cause it has interesting information:
               ' Example message: Conversion completed in 30 seconds x44 realtime encoding
               StandardOutput = CoreConverter.StandardOutput.ReadToEnd.Trim
           End If

       End While

       ' Stores the Error Message (If any)
       ErrorOutput = CoreConverter.StandardError.ReadToEnd

       Select Case CoreConverter.ExitCode

           Case 0 : RaiseEvent Exited(StandardOutput, Nothing) ' Return StandardOutput
           Case Else : RaiseEvent Exited(ErrorOutput, Nothing) ' Return ErrordOutput

       End Select

       CurrentProgress = Nothing
       OutputCharacter = Nothing
       StandardOutput = Nothing
       ErrorOutput = Nothing
       Effects = Nothing
       CoreConverter.Close()

   End Sub

#End Region

#Region " Miscellaneous functions "

   ' <summary>
   ' Checks if CoreConverter process is avaliable.
   ' </summary>
   Public Shared Function Is_Avaliable() As Boolean
       Return IO.File.Exists(CoreConverter_Location)
   End Function

   ' Set the constant parametters of CoreConverter process
   Private Shared Sub Set_Main_Parametters(ByVal Codec_Name As String, _
                                           ByVal In_File As String, _
                                           ByVal Out_File As String, _
                                           ByVal Update_Tag As String, _
                                           ByVal Effects As String, _
                                           ByVal Priority As String, _
                                           ByVal Processor As String)

       CoreConverter.StartInfo.Arguments = _
       String.Format("-infile=""{0}"" -outfile=""{1}"" -convert_to=""{2}"" {3} {4} -priority=""{5}"" -processor=""{6}"" ", _
                     In_File, Out_File, Codec_Name, Update_Tag, Effects, Priority, Processor)

   End Sub

   ' Returns all joined DSP Effects formatted string
   Private Shared Function Get_Effects(ByVal DSP_Effects() As DSP_Effects) As String

       If DSP_Effects Is Nothing Then Return Nothing

       For Effect As Integer = 0 To DSP_Effects.Length - 1
           Effects &= String.Format(" -dspeffect{0}={1}", _
                                    Effect + 1, _
                                    Format_DSP_Effect(DSP_Effects(Effect).ToString))
       Next Effect

       Return Effects

   End Function

   ' Returns a DSP Effect formatted string
   Private Shared Function Format_DSP_Effect(ByVal Effect As String)

       Select Case Effect
           Case "Reverse" : Return """Reverse"""
           Case "Delete_Output_File_on_Error" : Return """Delete Destination File on Error="""
           Case "Recycle_Source_File_After_Conversion" : Return """Delete Source File=-recycle"""
           Case "Delete_Source_File_After_Conversion" : Return """Delete Source File="""
           Case "Karaoke_Remove_Voice" : Return """Karaoke (Voice_ Instrument Removal)="""
           Case "Karaoke_Remove_Instrument" : Return """Karaoke (Voice_ Instrument Removal)=-i"""
           Case "Write_Silence" : Return """Write Silence=-lengthms={qt}2000{qt}""" ' 2 seconds
           Case Else : Return String.Empty
       End Select

   End Function

#End Region

#Region " Dispose Objects "

   Public Sub Dispose() Implements IDisposable.Dispose
       ' CoreConverter_Location = Nothing ' Do not change if want to preserve a custom location.
       OutputCharacter = Nothing
       StandardOutput = Nothing
       ErrorOutput = Nothing
       CurrentProgress = Nothing
       Effects = Nothing
       CoreConverter.Close()
       GC.SuppressFinalize(Me)
   End Sub

#End Region

End Class

#End Region
#7889
Windows / Re: Problema, mi pc se queda congelado.
10 Octubre 2013, 03:13 AM
Por supuesto cada persona tiene su opinión y Songoku es una persona muy respetable,
aunque yo esté totálmente en contra de la relación entre rendimiento/calidad que ofrece nVidia contra la de ATI y yo haya investigado en su dia las diferencias entre cada una, esto se puede ver también en cualquier mercadillo/tienda online, en los comentarios que dejan los consumidores respecto a tarjetas nVidia contra las de ATI, solo hay que investigar y comparar opiniones antes de adquirir un producto, vaya, no es que yo me lo inventé lo que he llegado a ver sobre nVidia ni tampoco los problemas que me han dado las tarjetas que he llegado a adquirir de esta marca.

Mi intención no es desmentir la opinión de Songoku, porque ante todo es una opinión y hay que respetarla, solo digo que yo a pesar de mi escasez de experiencia en Hardware tengo motivos para dar por hecho que opino con toda sensatez,
para ser sinceros en el subforo de Hardware nunca me han aconsejado una nVidia, siempre ATI, y eso me anima influye todavía más a pensar lo que pienso descalificar a nVidia como una buena marca (además de por todas las malas pasadas que me ha hecho sufrir nVidia), y que sus productos sean buenos... los hay buenos y los hay con problemas.

Lo suyo también es saber elegir una buena tarjeta en relacion rendimiento/calidad/precio, y tener un poco de suerte y que ya sea nVidia o ATI no te toquen tarjetas defectuosas, asi que... suerte!

Saludos!
#7890
Un custom MessageBox que se puede alinear en el centro del formulario y además se puede personalizar la fuente de texto usada.

Modo de empleo:
Código (vbnet) [Seleccionar]
        Using New CustomMessageBox(Me, New Font(New FontFamily("Lucida Console"), Font.SizeInPoints, FontStyle.Bold))
            MessageBox.Show("Test Text", "Test Title", MessageBoxButtons.OK)
        End Using



Código (vbnet) [Seleccionar]
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Windows.Forms

Class CustomMessageBox : Implements IDisposable

    Private mTries As Integer = 0
    Private mOwner As Form
    Private mFont As Font

    ' P/Invoke declarations
    Private Const WM_SETFONT As Integer = &H30
    Private Const WM_GETFONT As Integer = &H31

    Private Delegate Function EnumThreadWndProc(hWnd As IntPtr, lp As IntPtr) As Boolean

    <DllImport("user32.dll")> _
    Private Shared Function EnumThreadWindows(tid As Integer, callback As EnumThreadWndProc, lp As IntPtr) As Boolean
    End Function

    <DllImport("kernel32.dll")> _
    Private Shared Function GetCurrentThreadId() As Integer
    End Function

    <DllImport("user32.dll")> _
    Private Shared Function GetClassName(hWnd As IntPtr, buffer As StringBuilder, buflen As Integer) As Integer
    End Function

    <DllImport("user32.dll")> _
    Private Shared Function GetDlgItem(hWnd As IntPtr, item As Integer) As IntPtr
    End Function

    <DllImport("user32.dll")> _
    Private Shared Function SendMessage(hWnd As IntPtr, msg As Integer, wp As IntPtr, lp As IntPtr) As IntPtr
    End Function

    <DllImport("user32.dll")> _
    Shared Function GetWindowRect(hWnd As IntPtr, ByRef rc As RECT) As Boolean
    End Function

    <DllImport("user32.dll")> _
    Shared Function MoveWindow(hWnd As IntPtr, x As Integer, y As Integer, w As Integer, h As Integer, repaint As Boolean) As Boolean
    End Function

    Structure RECT
        Public Left As Integer
        Public Top As Integer
        Public Right As Integer
        Public Bottom As Integer
    End Structure

    Public Sub New(owner As Form, Optional Custom_Font As Font = Nothing)
        mOwner = owner
        mFont = Custom_Font
        owner.BeginInvoke(New MethodInvoker(AddressOf findDialog))
    End Sub

    Private Sub findDialog()

        ' Enumerate windows to find the message box
        If mTries < 0 Then
            Return
        End If

        Dim callback As New EnumThreadWndProc(AddressOf checkWindow)

        If EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero) Then
            If System.Threading.Interlocked.Increment(mTries) < 10 Then
                mOwner.BeginInvoke(New MethodInvoker(AddressOf findDialog))
            End If
        End If

    End Sub

    Private Function checkWindow(hWnd As IntPtr, lp As IntPtr) As Boolean

        ' Checks if <hWnd> is a dialog
        Dim sb As New StringBuilder(260)
        GetClassName(hWnd, sb, sb.Capacity)
        If sb.ToString() <> "#32770" Then Return True

        ' Got it, get the STATIC control that displays the text
        Dim hText As IntPtr = GetDlgItem(hWnd, &HFFFF)

        Dim frmRect As New Rectangle(mOwner.Location, mOwner.Size)
        Dim dlgRect As RECT
        GetWindowRect(hWnd, dlgRect)
        MoveWindow(hWnd, frmRect.Left + (frmRect.Width - dlgRect.Right + dlgRect.Left) \ 2, frmRect.Top + (frmRect.Height - dlgRect.Bottom + dlgRect.Top) \ 2, dlgRect.Right - dlgRect.Left, dlgRect.Bottom - dlgRect.Top, True)
        If hText <> IntPtr.Zero Then

            If mFont Is Nothing Then
                ' Get the current font
                mFont = Font.FromHfont(SendMessage(hText, WM_GETFONT, IntPtr.Zero, IntPtr.Zero))
            End If

            SendMessage(hText, WM_SETFONT, mFont.ToHfont(), New IntPtr(1))

        End If

        ' Done
        Return False

    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        mTries = -1
        mOwner = Nothing
        If mFont IsNot Nothing Then mFont.Dispose()
    End Sub

End Class