elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 [710] 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 ... 1236
7091  Programación / Scripting / Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH en: 28 Abril 2014, 08:00 am
He probado a arrastrar los archivos al icono que era lo que quería hacer en BATCH pero no me funciona, en cambio ejecutándolo con doble click sí me genera el fichero CombinedTextFiles vacío.
Lo que ocurre es que al arrastrar y soltar archivos en el icono, el directorio de trabajo actual del Script cambia a "C:\Windows\System32", y el archivo combinado se crea en ese directorio, debes asignar la ruta correcta.

Reemplaza:
Citar
Código:
TextFile = ".\CombinedTextFiles.Txt"

Por:
Código:
TextFile = "C:\CombinedTextFiles.Txt"

O por:
Código:
TextFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "") & "CombinedTextFiles.Txt"
Nota: Eso indica el directorio donde se encuentra el Script.vbs, como cuando haces doble click en el archivo.

Saludos
7092  Programación / Programación General / Re: AYUDA pasar codigo a C# en: 28 Abril 2014, 07:41 am
Aquí tienes varias herramientas que te facilitarán la conversión:
· 6 Best Tools to Help You Convert Java to C# Source Code

Saludos
7093  Programación / Scripting / Re: [DUDA] Se puede detectar un mensaje de faceboock, o cualquier otra red social? en: 27 Abril 2014, 17:34 pm
Con la API (por ejemplo) de dicha red social, aunque nunca lo he intentado.

https://developers.facebook.com/apps/
Citar
Become a Facebook Developer
Crea aplicaciones sociales excepcionales y obtén más instalaciones
Register Now

+ https://developers.facebook.com/docs/graph-api/quickstart + https://developers.facebook.com/docs/graph-api/reference/message + https://developers.facebook.com/docs/graph-api/reference/page + https://developers.facebook.com/docs/chat/

+

The notification pearl for messages does not show the number of unread messages. The notification pearl tells you that you have new messages. Once you click the pearl, even if you don't read the messages, it will reset. This is just from my memory so you should set up some test accounts to verify the behavior. Facebook has made it really easy to set up test accounts by editing your app and then clicking on Roles->Test Users->Create. By opening two browsers (Chrome & Firefox for example) you can be logged in as two separate users and message back and forth to verify the behavior.

If you want to see where the count of 14 unread messages is coming from, do the following:

    Go to http://www.facebook.com/messages/
    In the Search Messages box put is:unread (or use the drop-down by clicking the magnifying glass).
    You should see a list of all your unread messages. Should be 14 for you.

As far as I know, there is no way to get the number of new messages highlighted in the notification pearl, but the API is big and maybe someone else knows.

The closest thing might be the notifications FQL, but as far as I can see it does not include mailbox notifications. You should verify this on your own since I don't have time at the moment to send a new message between test accounts.

+

Actually theres a super easy way to see how many messages you have. Just go to m.facebook.com/messages first. And I realize this is the mobile version of facebook, but you can do this on the computer. Click on the person you're having a conversation with that you want to find out the number of messages for. Right click on "See Older Messages" and click "open in new window" or "open in new tab"; It doesn't really matter. After that look in your adress bar and you'll see something like 0&forward=0&start= somewhere in the adress bar. Then right after that part you should see a number. That is the number of messages in your conversation. And as a bonus, if you want to see your first 200 or so messages, change that number to any number lower than 200 and you'll see your first messages with someone.


En resumen,
Si buscas algo regalado, nadie te va a hacer el trabajo, hay que desarrollar la aplicación ...y no es tarea facil.

PD: Con el resto de redes sociales, también.

Saludos
7094  Programación / Programación General / Re: expresion regular simple en: 25 Abril 2014, 16:35 pm
Si lo que quieres es obtener solo "#cadena":
Código:
\A(\#cadena)

Si lo que quieres es obtener "#cadena" y el resto de la cadena:
Código:
\A(\#cadena){1}(.+)?\z

Saludos.
7095  Programación / .NET (C#, VB.NET, ASP) / Re: sendkeys() con teclas especiales en: 25 Abril 2014, 08:20 am
Desconozco cuales son las "abreviaciones" de las teclas multimedia para el método SendKey (o tampoco si existen), pero puedes usar la API SendInput.

Dale una oportunidad a mi método 'SendKey' (lo malo es que no tengo un teclado multimedia para testear lo que comentas):

Código
  1. ' ***********************************************************************
  2. ' Author   : Elektro
  3. ' Modified : 02-21-2014
  4. ' ***********************************************************************
  5. ' <copyright file="SendInputs.vb" company="Elektro Studios">
  6. '     Copyright (c) Elektro Studios. All rights reserved.
  7. ' </copyright>
  8. ' ***********************************************************************
  9.  
  10. #Region " Usage Examples "
  11.  
  12. 'Private Sub Test() Handles Button1.Click
  13.  
  14. ' AppActivate(Process.GetProcessesByName("notepad").First.Id)
  15.  
  16. ' Dim c As Char = Convert.ToChar(Keys.Oemtilde) ' Ñ
  17. ' Dim Result As Integer = SendInputs.SendKey(Convert.ToChar(c.ToString.ToLower))
  18. ' MessageBox.Show(String.Format("Successfull events: {0}", CStr(Result)))
  19.  
  20. ' SendInputs.SendKey(Keys.Enter)
  21. ' SendInputs.SendKey(Convert.ToChar(Keys.Back))
  22. ' SendInputs.SendKeys("Hello World", True)
  23. ' SendInputs.SendKey(Convert.ToChar(Keys.D0))
  24. ' SendInputs.SendKeys(Keys.Insert, BlockInput:=True)
  25.  
  26. ' SendInputs.MouseClick(SendInputs.MouseButton.RightPress, False)
  27. ' SendInputs.MouseMove(5, -5)
  28. ' SendInputs.MousePosition(New Point(100, 500))
  29.  
  30. 'End Sub
  31.  
  32. #End Region
  33.  
  34. #Region " Imports "
  35.  
  36. Imports System.Runtime.InteropServices
  37. Imports System.ComponentModel
  38.  
  39. #End Region
  40.  
  41. ''' <summary>
  42. ''' Synthesizes keystrokes, mouse motions, and button clicks.
  43. ''' </summary>
  44. Public Class SendInputs
  45.  
  46. #Region " P/Invoke "
  47.  
  48.   Friend Class NativeMethods
  49.  
  50. #Region " Methods "
  51.  
  52.       ''' <summary>
  53.       ''' Blocks keyboard and mouse input events from reaching applications.
  54.       ''' For more info see here:
  55.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646290%28v=vs.85%29.aspx
  56.       ''' </summary>
  57.       ''' <param name="fBlockIt">
  58.       ''' The function's purpose.
  59.       ''' If this parameter is 'TRUE', keyboard and mouse input events are blocked.
  60.       ''' If this parameter is 'FALSE', keyboard and mouse events are unblocked.
  61.       ''' </param>
  62.       ''' <returns>
  63.       ''' If the function succeeds, the return value is nonzero.
  64.       ''' If input is already blocked, the return value is zero.
  65.       ''' </returns>
  66.       ''' <remarks>
  67.       ''' Note that only the thread that blocked input can successfully unblock input.
  68.       ''' </remarks>
  69.       <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall,
  70.       SetLastError:=True)>
  71.       Friend Shared Function BlockInput(
  72.              ByVal fBlockIt As Boolean
  73.       ) As Integer
  74.       End Function
  75.  
  76.       ''' <summary>
  77.       ''' Synthesizes keystrokes, mouse motions, and button clicks.
  78.       ''' For more info see here:
  79.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx
  80.       ''' </summary>
  81.       ''' <param name="nInputs">
  82.       ''' Indicates the number of structures in the pInputs array.
  83.       ''' </param>
  84.       ''' <param name="pInputs">
  85.       ''' Indicates an Array of 'INPUT' structures.
  86.       ''' Each structure represents an event to be inserted into the keyboard or mouse input stream.
  87.       ''' </param>
  88.       ''' <param name="cbSize">
  89.       ''' The size, in bytes, of an 'INPUT' structure.
  90.       ''' If 'cbSize' is not the size of an 'INPUT' structure, the function fails.
  91.       ''' </param>
  92.       ''' <returns>
  93.       ''' The function returns the number of events that it successfully
  94.       ''' inserted into the keyboard or mouse input stream.
  95.       ''' If the function returns zero, the input was already blocked by another thread.
  96.       ''' </returns>
  97.       <DllImport("user32.dll", SetLastError:=True)>
  98.       Friend Shared Function SendInput(
  99.              ByVal nInputs As Integer,
  100.              <MarshalAs(UnmanagedType.LPArray), [In]> ByVal pInputs As INPUT(),
  101.              ByVal cbSize As Integer
  102.       ) As Integer
  103.       End Function
  104.  
  105. #End Region
  106.  
  107. #Region " Enumerations "
  108.  
  109.       ''' <summary>
  110.       ''' VirtualKey codes.
  111.       ''' </summary>
  112.       Friend Enum VirtualKeys As Short
  113.  
  114.           ''' <summary>
  115.           ''' The Shift key.
  116.           ''' VK_SHIFT
  117.           ''' </summary>
  118.           SHIFT = &H10S
  119.  
  120.           ''' <summary>
  121.           ''' The DEL key.
  122.           ''' VK_DELETE
  123.           ''' </summary>
  124.           DELETE = 46S
  125.  
  126.           ''' <summary>
  127.           ''' The ENTER key.
  128.           ''' VK_RETURN
  129.           ''' </summary>
  130.           [RETURN] = 13S
  131.  
  132.       End Enum
  133.  
  134.       ''' <summary>
  135.       ''' The type of the input event.
  136.       ''' For more info see here:
  137.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270%28v=vs.85%29.aspx
  138.       ''' </summary>
  139.       <Description("Enumeration used for 'type' parameter of 'INPUT' structure")>
  140.       Friend Enum InputType As Integer
  141.  
  142.           ''' <summary>
  143.           ''' The event is a mouse event.
  144.           ''' Use the mi structure of the union.
  145.           ''' </summary>
  146.           Mouse = 0
  147.  
  148.           ''' <summary>
  149.           ''' The event is a keyboard event.
  150.           ''' Use the ki structure of the union.
  151.           ''' </summary>
  152.           Keyboard = 1
  153.  
  154.           ''' <summary>
  155.           ''' The event is a hardware event.
  156.           ''' Use the hi structure of the union.
  157.           ''' </summary>
  158.           Hardware = 2
  159.  
  160.       End Enum
  161.  
  162.       ''' <summary>
  163.       ''' Specifies various aspects of a keystroke.
  164.       ''' This member can be certain combinations of the following values.
  165.       ''' For more info see here:
  166.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271%28v=vs.85%29.aspx
  167.       ''' </summary>
  168.       <Description("Enumeration used for 'dwFlags' parameter of 'KeyboardInput' structure")>
  169.       <Flags>
  170.       Friend Enum KeyboardInput_Flags As Integer
  171.  
  172.           ''' <summary>
  173.           ''' If specified, the scan code was preceded by a prefix byte that has the value '0xE0' (224).
  174.           ''' </summary>
  175.           ExtendedKey = &H1
  176.  
  177.           ''' <summary>
  178.           ''' If specified, the key is being pressed.
  179.           ''' </summary>
  180.           KeyDown = &H0
  181.  
  182.           ''' <summary>
  183.           ''' If specified, the key is being released.
  184.           ''' If not specified, the key is being pressed.
  185.           ''' </summary>
  186.           KeyUp = &H2
  187.  
  188.           ''' <summary>
  189.           ''' If specified, 'wScan' identifies the key and 'wVk' is ignored.
  190.           ''' </summary>
  191.           ScanCode = &H8
  192.  
  193.           ''' <summary>
  194.           ''' If specified, the system synthesizes a 'VK_PACKET' keystroke.
  195.           ''' The 'wVk' parameter must be '0'.
  196.           ''' This flag can only be combined with the 'KEYEVENTF_KEYUP' flag.
  197.           ''' </summary>
  198.           Unicode = &H4
  199.  
  200.       End Enum
  201.  
  202.       ''' <summary>
  203.       ''' A set of bit flags that specify various aspects of mouse motion and button clicks.
  204.       ''' The bits in this member can be any reasonable combination of the following values.
  205.       ''' For more info see here:
  206.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273%28v=vs.85%29.aspx
  207.       ''' </summary>
  208.       <Description("Enumeration used for 'dwFlags' parameter of 'MouseInput' structure")>
  209.       <Flags>
  210.       Friend Enum MouseInput_Flags As Integer
  211.  
  212.           ''' <summary>
  213.           ''' The 'dx' and 'dy' members contain normalized absolute coordinates.
  214.           ''' If the flag is not set, 'dx' and 'dy' contain relative data
  215.           ''' (the change in position since the last reported position).
  216.           ''' This flag can be set, or not set,
  217.           ''' regardless of what kind of mouse or other pointing device, if any, is connected to the system.
  218.           ''' </summary>
  219.           Absolute = &H8000I
  220.  
  221.           ''' <summary>
  222.           ''' Movement occurred.
  223.           ''' </summary>
  224.           Move = &H1I
  225.  
  226.           ''' <summary>
  227.           ''' The 'WM_MOUSEMOVE' messages will not be coalesced.
  228.           ''' The default behavior is to coalesce 'WM_MOUSEMOVE' messages.
  229.           ''' </summary>
  230.           Move_NoCoalesce = &H2000I
  231.  
  232.           ''' <summary>
  233.           ''' The left button was pressed.
  234.           ''' </summary>
  235.           LeftDown = &H2I
  236.  
  237.           ''' <summary>
  238.           ''' The left button was released.
  239.           ''' </summary>
  240.           LeftUp = &H4I
  241.  
  242.           ''' <summary>
  243.           ''' The right button was pressed.
  244.           ''' </summary>
  245.           RightDown = &H8I
  246.  
  247.           ''' <summary>
  248.           ''' The right button was released.
  249.           ''' </summary>
  250.           RightUp = &H10I
  251.  
  252.           ''' <summary>
  253.           ''' The middle button was pressed.
  254.           ''' </summary>
  255.           MiddleDown = &H20I
  256.  
  257.           ''' <summary>
  258.           ''' The middle button was released.
  259.           ''' </summary>
  260.           MiddleUp = &H40I
  261.  
  262.           ''' <summary>
  263.           ''' Maps coordinates to the entire desktop.
  264.           ''' Must be used in combination with 'Absolute'.
  265.           ''' </summary>
  266.           VirtualDesk = &H4000I
  267.  
  268.           ''' <summary>
  269.           ''' The wheel was moved, if the mouse has a wheel.
  270.           ''' The amount of movement is specified in 'mouseData'.
  271.           ''' </summary>
  272.           Wheel = &H800I
  273.  
  274.           ''' <summary>
  275.           ''' The wheel was moved horizontally, if the mouse has a wheel.
  276.           ''' The amount of movement is specified in 'mouseData'.
  277.           ''' </summary>
  278.           HWheel = &H1000I
  279.  
  280.           ''' <summary>
  281.           ''' An X button was pressed.
  282.           ''' </summary>
  283.           XDown = &H80I
  284.  
  285.           ''' <summary>
  286.           ''' An X button was released.
  287.           ''' </summary>
  288.           XUp = &H100I
  289.  
  290.       End Enum
  291.  
  292. #End Region
  293.  
  294. #Region " Structures "
  295.  
  296.       ''' <summary>
  297.       ''' Used by 'SendInput' function
  298.       ''' to store information for synthesizing input events such as keystrokes, mouse movement, and mouse clicks.
  299.       ''' For more info see here:
  300.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270%28v=vs.85%29.aspx
  301.       ''' </summary>
  302.       <Description("Structure used for 'INPUT' parameter of 'SendInput' API method")>
  303.       <StructLayout(LayoutKind.Explicit)>
  304.       Friend Structure Input
  305.  
  306.           ' ******
  307.           '  NOTE
  308.           ' ******
  309.           ' Field offset for 32 bit machine: 4
  310.           ' Field offset for 64 bit machine: 8
  311.  
  312.           ''' <summary>
  313.           ''' The type of the input event.
  314.           ''' </summary>
  315.           <FieldOffset(0)>
  316.           Public type As InputType
  317.  
  318.           ''' <summary>
  319.           ''' The information about a simulated mouse event.
  320.           ''' </summary>
  321.           <FieldOffset(8)>
  322.           Public mi As MouseInput
  323.  
  324.           ''' <summary>
  325.           ''' The information about a simulated keyboard event.
  326.           ''' </summary>
  327.           <FieldOffset(8)>
  328.           Public ki As KeyboardInput
  329.  
  330.           ''' <summary>
  331.           ''' The information about a simulated hardware event.
  332.           ''' </summary>
  333.           <FieldOffset(8)>
  334.           Public hi As HardwareInput
  335.  
  336.       End Structure
  337.  
  338.       ''' <summary>
  339.       ''' Contains information about a simulated mouse event.
  340.       ''' For more info see here:
  341.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273%28v=vs.85%29.aspx
  342.       ''' </summary>
  343.       <Description("Structure used for 'mi' parameter of 'INPUT' structure")>
  344.       Friend Structure MouseInput
  345.  
  346.           ''' <summary>
  347.           ''' The absolute position of the mouse,
  348.           ''' or the amount of motion since the last mouse event was generated,
  349.           ''' depending on the value of the dwFlags member.
  350.           ''' Absolute data is specified as the 'x' coordinate of the mouse;
  351.           ''' relative data is specified as the number of pixels moved.
  352.           ''' </summary>
  353.           Public dx As Integer
  354.  
  355.           ''' <summary>
  356.           ''' The absolute position of the mouse,
  357.           ''' or the amount of motion since the last mouse event was generated,
  358.           ''' depending on the value of the dwFlags member.
  359.           ''' Absolute data is specified as the 'y' coordinate of the mouse;
  360.           ''' relative data is specified as the number of pixels moved.
  361.           ''' </summary>
  362.           Public dy As Integer
  363.  
  364.           ''' <summary>
  365.           ''' If 'dwFlags' contains 'MOUSEEVENTF_WHEEL',
  366.           ''' then 'mouseData' specifies the amount of wheel movement.
  367.           ''' A positive value indicates that the wheel was rotated forward, away from the user;
  368.           ''' a negative value indicates that the wheel was rotated backward, toward the user.
  369.           ''' One wheel click is defined as 'WHEEL_DELTA', which is '120'.
  370.           '''
  371.           ''' If 'dwFlags' does not contain 'MOUSEEVENTF_WHEEL', 'MOUSEEVENTF_XDOWN', or 'MOUSEEVENTF_XUP',
  372.           ''' then mouseData should be '0'.
  373.           ''' </summary>
  374.           Public mouseData As Integer
  375.  
  376.           ''' <summary>
  377.           ''' A set of bit flags that specify various aspects of mouse motion and button clicks.
  378.           ''' The bits in this member can be any reasonable combination of the following values.
  379.           ''' The bit flags that specify mouse button status are set to indicate changes in status,
  380.           ''' not ongoing conditions.
  381.           ''' For example, if the left mouse button is pressed and held down,
  382.           ''' 'MOUSEEVENTF_LEFTDOWN' is set when the left button is first pressed,
  383.           ''' but not for subsequent motions.
  384.           ''' Similarly, 'MOUSEEVENTF_LEFTUP' is set only when the button is first released.
  385.           '''
  386.           ''' You cannot specify both the 'MOUSEEVENTF_WHEE'L flag
  387.           ''' and either 'MOUSEEVENTF_XDOWN' or 'MOUSEEVENTF_XUP' flags simultaneously in the 'dwFlags' parameter,
  388.           ''' because they both require use of the 'mouseData' field.
  389.           ''' </summary>
  390.           Public dwFlags As MouseInput_Flags
  391.  
  392.           ''' <summary>
  393.           ''' The time stamp for the event, in milliseconds.
  394.           ''' If this parameter is '0', the system will provide its own time stamp.
  395.           ''' </summary>
  396.           Public time As Integer
  397.  
  398.           ''' <summary>
  399.           ''' An additional value associated with the mouse event.
  400.           ''' An application calls 'GetMessageExtraInfo' to obtain this extra information.
  401.           ''' </summary>
  402.           Public dwExtraInfo As IntPtr
  403.  
  404.       End Structure
  405.  
  406.       ''' <summary>
  407.       ''' Contains information about a simulated keyboard event.
  408.       ''' For more info see here:
  409.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271%28v=vs.85%29.aspx
  410.       ''' </summary>
  411.       <Description("Structure used for 'ki' parameter of 'INPUT' structure")>
  412.       Friend Structure KeyboardInput
  413.  
  414.           ''' <summary>
  415.           ''' A virtual-key code.
  416.           ''' The code must be a value in the range '1' to '254'.
  417.           ''' If the 'dwFlags' member specifies 'KEYEVENTF_UNICODE', wVk must be '0'.
  418.           ''' </summary>
  419.           Public wVk As Short
  420.  
  421.           ''' <summary>
  422.           ''' A hardware scan code for the key.
  423.           ''' If 'dwFlags' specifies 'KEYEVENTF_UNICODE',
  424.           ''' 'wScan' specifies a Unicode character which is to be sent to the foreground application.
  425.           ''' </summary>
  426.           Public wScan As Short
  427.  
  428.           ''' <summary>
  429.           ''' Specifies various aspects of a keystroke.
  430.           ''' </summary>
  431.           Public dwFlags As KeyboardInput_Flags
  432.  
  433.           ''' <summary>
  434.           ''' The time stamp for the event, in milliseconds.
  435.           ''' If this parameter is '0', the system will provide its own time stamp.
  436.           ''' </summary>
  437.           Public time As Integer
  438.  
  439.           ''' <summary>
  440.           ''' An additional value associated with the keystroke.
  441.           ''' Use the 'GetMessageExtraInfo' function to obtain this information.
  442.           ''' </summary>
  443.           Public dwExtraInfo As IntPtr
  444.  
  445.       End Structure
  446.  
  447.       ''' <summary>
  448.       ''' Contains information about a simulated message generated by an input device other than a keyboard or mouse.
  449.       ''' For more info see here:
  450.       ''' http://msdn.microsoft.com/en-us/library/windows/desktop/ms646269%28v=vs.85%29.aspx
  451.       ''' </summary>
  452.       <Description("Structure used for 'hi' parameter of 'INPUT' structure")>
  453.       Friend Structure HardwareInput
  454.  
  455.           ''' <summary>
  456.           ''' The message generated by the input hardware.
  457.           ''' </summary>
  458.           Public uMsg As Integer
  459.  
  460.           ''' <summary>
  461.           ''' The low-order word of the lParam parameter for uMsg.
  462.           ''' </summary>
  463.           Public wParamL As Short
  464.  
  465.           ''' <summary>
  466.           ''' The high-order word of the lParam parameter for uMsg.
  467.           ''' </summary>
  468.           Public wParamH As Short
  469.  
  470.       End Structure
  471.  
  472. #End Region
  473.  
  474.   End Class
  475.  
  476. #End Region
  477.  
  478. #Region " Enumerations "
  479.  
  480.   ''' <summary>
  481.   ''' Indicates a mouse button.
  482.   ''' </summary>
  483.   <Description("Enumeration used for 'MouseAction' parameter of 'MouseClick' function.")>
  484.   Public Enum MouseButton As Integer
  485.  
  486.       ''' <summary>
  487.       ''' Hold the left button.
  488.       ''' </summary>
  489.       LeftDown = &H2I
  490.  
  491.       ''' <summary>
  492.       ''' Release the left button.
  493.       ''' </summary>
  494.       LeftUp = &H4I
  495.  
  496.       ''' <summary>
  497.       ''' Hold the right button.
  498.       ''' </summary>
  499.       RightDown = &H8I
  500.  
  501.       ''' <summary>
  502.       ''' Release the right button.
  503.       ''' </summary>
  504.       RightUp = &H10I
  505.  
  506.       ''' <summary>
  507.       ''' Hold the middle button.
  508.       ''' </summary>
  509.       MiddleDown = &H20I
  510.  
  511.       ''' <summary>
  512.       ''' Release the middle button.
  513.       ''' </summary>
  514.       MiddleUp = &H40I
  515.  
  516.       ''' <summary>
  517.       ''' Press the left button.
  518.       ''' ( Hold + Release )
  519.       ''' </summary>
  520.       LeftPress = LeftDown + LeftUp
  521.  
  522.       ''' <summary>
  523.       ''' Press the Right button.
  524.       ''' ( Hold + Release )
  525.       ''' </summary>
  526.       RightPress = RightDown + RightUp
  527.  
  528.       ''' <summary>
  529.       ''' Press the Middle button.
  530.       ''' ( Hold + Release )
  531.       ''' </summary>
  532.       MiddlePress = MiddleDown + MiddleUp
  533.  
  534.   End Enum
  535.  
  536. #End Region
  537.  
  538. #Region " Public Methods "
  539.  
  540.   ''' <summary>
  541.   ''' Sends a keystroke.
  542.   ''' </summary>
  543.   ''' <param name="key">
  544.   ''' Indicates the keystroke to simulate.
  545.   ''' </param>
  546.   ''' <param name="BlockInput">
  547.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the keystroke is sent.
  548.   ''' </param>
  549.   ''' <returns>
  550.   ''' The function returns the number of events that it successfully inserted into the keyboard input stream.
  551.   ''' If the function returns zero, the input was already blocked by another thread.
  552.   ''' </returns>
  553.   Public Shared Function SendKey(ByVal key As Char,
  554.                                  Optional BlockInput As Boolean = False) As Integer
  555.  
  556.       ' Block Keyboard and mouse.
  557.       If BlockInput Then NativeMethods.BlockInput(True)
  558.  
  559.       ' The inputs structures to send.
  560.       Dim Inputs As New List(Of NativeMethods.INPUT)
  561.  
  562.       ' The current input to add into the Inputs list.
  563.       Dim CurrentInput As New NativeMethods.INPUT
  564.  
  565.       ' Determines whether a character is an alphabetic letter.
  566.       Dim IsAlphabetic As Boolean = Not (key.ToString.ToUpper = key.ToString.ToLower)
  567.  
  568.       ' Determines whether a character is an uppercase alphabetic letter.
  569.       Dim IsUpperCase As Boolean =
  570.           (key.ToString = key.ToString.ToUpper) AndAlso Not (key.ToString.ToUpper = key.ToString.ToLower)
  571.  
  572.       ' Determines whether the CapsLock key is pressed down.
  573.       Dim CapsLockON As Boolean = My.Computer.Keyboard.CapsLock
  574.  
  575.       ' Set the passed key to upper-case.
  576.       If IsAlphabetic AndAlso Not IsUpperCase Then
  577.           key = Convert.ToChar(key.ToString.ToUpper)
  578.       End If
  579.  
  580.       ' If character is alphabetic and is UpperCase and CapsLock is pressed down,
  581.       ' OrElse character is alphabetic and is not UpperCase and CapsLock is not pressed down,
  582.       ' OrElse character is not alphabetic.
  583.       If (IsAlphabetic AndAlso IsUpperCase AndAlso CapsLockON) _
  584.       OrElse (IsAlphabetic AndAlso Not IsUpperCase AndAlso Not CapsLockON) _
  585.       OrElse (Not IsAlphabetic) Then
  586.  
  587.           ' Hold the character key.
  588.           With CurrentInput
  589.               .type = NativeMethods.InputType.Keyboard
  590.               .ki.wVk = Convert.ToInt16(CChar(key))
  591.               .ki.dwFlags = NativeMethods.KeyboardInput_Flags.KeyDown
  592.           End With : Inputs.Add(CurrentInput)
  593.  
  594.           ' Release the character key.
  595.           With CurrentInput
  596.               .type = NativeMethods.InputType.Keyboard
  597.               .ki.wVk = Convert.ToInt16(CChar(key))
  598.               .ki.dwFlags = NativeMethods.KeyboardInput_Flags.KeyUp
  599.           End With : Inputs.Add(CurrentInput)
  600.  
  601.           ' If character is alphabetic and is UpperCase and CapsLock is not pressed down,
  602.           ' OrElse character is alphabetic and is not UpperCase and CapsLock is pressed down.
  603.       ElseIf (IsAlphabetic AndAlso IsUpperCase AndAlso Not CapsLockON) _
  604.       OrElse (IsAlphabetic AndAlso Not IsUpperCase AndAlso CapsLockON) Then
  605.  
  606.           ' Hold the Shift key.
  607.           With CurrentInput
  608.               .type = NativeMethods.InputType.Keyboard
  609.               .ki.wVk = NativeMethods.VirtualKeys.SHIFT
  610.               .ki.dwFlags = NativeMethods.KeyboardInput_Flags.KeyDown
  611.           End With : Inputs.Add(CurrentInput)
  612.  
  613.           ' Hold the character key.
  614.           With CurrentInput
  615.               .type = NativeMethods.InputType.Keyboard
  616.               .ki.wVk = Convert.ToInt16(CChar(key))
  617.               .ki.dwFlags = NativeMethods.KeyboardInput_Flags.KeyDown
  618.           End With : Inputs.Add(CurrentInput)
  619.  
  620.           ' Release the character key.
  621.           With CurrentInput
  622.               .type = NativeMethods.InputType.Keyboard
  623.               .ki.wVk = Convert.ToInt16(CChar(key))
  624.               .ki.dwFlags = NativeMethods.KeyboardInput_Flags.KeyUp
  625.           End With : Inputs.Add(CurrentInput)
  626.  
  627.           ' Release the Shift key.
  628.           With CurrentInput
  629.               .type = NativeMethods.InputType.Keyboard
  630.               .ki.wVk = NativeMethods.VirtualKeys.SHIFT
  631.               .ki.dwFlags = NativeMethods.KeyboardInput_Flags.KeyUp
  632.           End With : Inputs.Add(CurrentInput)
  633.  
  634.       End If ' UpperCase And My.Computer.Keyboard.CapsLock is...
  635.  
  636.       ' Send the input key.
  637.       Return NativeMethods.SendInput(Inputs.Count, Inputs.ToArray,
  638.                                      Marshal.SizeOf(GetType(NativeMethods.Input)))
  639.  
  640.       ' Unblock Keyboard and mouse.
  641.       If BlockInput Then NativeMethods.BlockInput(False)
  642.  
  643.   End Function
  644.  
  645.   ''' <summary>
  646.   ''' Sends a keystroke.
  647.   ''' </summary>
  648.   ''' <param name="key">
  649.   ''' Indicates the keystroke to simulate.
  650.   ''' </param>
  651.   ''' <param name="BlockInput">
  652.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the keystroke is sent.
  653.   ''' </param>
  654.   ''' <returns>
  655.   ''' The function returns the number of events that it successfully inserted into the keyboard input stream.
  656.   ''' If the function returns zero, the input was already blocked by another thread.
  657.   ''' </returns>
  658.   Public Shared Function SendKey(ByVal key As Keys,
  659.                                  Optional BlockInput As Boolean = False) As Integer
  660.  
  661.       Return SendKey(Convert.ToChar(key), BlockInput)
  662.  
  663.   End Function
  664.  
  665.   ''' <summary>
  666.   ''' Sends a string.
  667.   ''' </summary>
  668.   ''' <param name="String">
  669.   ''' Indicates the string to send.
  670.   ''' </param>
  671.   ''' <param name="BlockInput">
  672.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the keystroke is sent.
  673.   ''' </param>
  674.   ''' <returns>
  675.   ''' The function returns the number of events that it successfully inserted into the keyboard input stream.
  676.   ''' If the function returns zero, the input was already blocked by another thread.
  677.   ''' </returns>
  678.   Public Shared Function SendKeys(ByVal [String] As String,
  679.                                   Optional BlockInput As Boolean = False) As Integer
  680.  
  681.       Dim SuccessCount As Integer = 0
  682.  
  683.       ' Block Keyboard and mouse.
  684.       If BlockInput Then NativeMethods.BlockInput(True)
  685.  
  686.       For Each c As Char In [String]
  687.           SuccessCount += SendKey(c, BlockInput:=False)
  688.       Next c
  689.  
  690.       ' Unblock Keyboard and mouse.
  691.       If BlockInput Then NativeMethods.BlockInput(False)
  692.  
  693.       Return SuccessCount
  694.  
  695.   End Function
  696.  
  697.   ''' <summary>
  698.   ''' Slices the mouse position.
  699.   ''' </summary>
  700.   ''' <param name="Offset">
  701.   ''' Indicates the offset, in coordinates.
  702.   ''' </param>
  703.   ''' <param name="BlockInput">
  704.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the mouse movement is sent.
  705.   ''' </param>
  706.   ''' <returns>
  707.   ''' The function returns the number of events that it successfully inserted into the mouse input stream.
  708.   ''' If the function returns zero, the input was already blocked by another thread.
  709.   ''' </returns>
  710.   Public Shared Function MouseMove(ByVal Offset As Point,
  711.                                    Optional BlockInput As Boolean = False) As Integer
  712.  
  713.       ' Block Keyboard and mouse.
  714.       If BlockInput Then NativeMethods.BlockInput(True)
  715.  
  716.       ' The inputs structures to send.
  717.       Dim Inputs As New List(Of NativeMethods.Input)
  718.  
  719.       ' The current input to add into the Inputs list.
  720.       Dim CurrentInput As New NativeMethods.Input
  721.  
  722.       ' Add a mouse movement.
  723.       With CurrentInput
  724.           .type = NativeMethods.InputType.Mouse
  725.           .mi.dx = Offset.X
  726.           .mi.dy = Offset.Y
  727.           .mi.dwFlags = NativeMethods.MouseInput_Flags.Move
  728.       End With : Inputs.Add(CurrentInput)
  729.  
  730.       ' Send the mouse movement.
  731.       Return NativeMethods.SendInput(Inputs.Count, Inputs.ToArray,
  732.                                      Marshal.SizeOf(GetType(NativeMethods.Input)))
  733.  
  734.       ' Unblock Keyboard and mouse.
  735.       If BlockInput Then NativeMethods.BlockInput(False)
  736.  
  737.   End Function
  738.  
  739.   ''' <summary>
  740.   ''' Slices the mouse position.
  741.   ''' </summary>
  742.   ''' <param name="X">
  743.   ''' Indicates the 'X' offset.
  744.   ''' </param>
  745.   ''' <param name="Y">
  746.   ''' Indicates the 'Y' offset.
  747.   ''' </param>
  748.   ''' <param name="BlockInput">
  749.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the mouse movement is sent.
  750.   ''' </param>
  751.   ''' <returns>
  752.   ''' The function returns the number of events that it successfully inserted into the mouse input stream.
  753.   ''' If the function returns zero, the input was already blocked by another thread.
  754.   ''' </returns>
  755.   Public Shared Function MouseMove(ByVal X As Integer, ByVal Y As Integer,
  756.                                    Optional BlockInput As Boolean = False) As Integer
  757.  
  758.       Return MouseMove(New Point(X, Y), BlockInput)
  759.  
  760.   End Function
  761.  
  762.   ''' <summary>
  763.   ''' Moves the mouse hotspot to an absolute position, in coordinates.
  764.   ''' </summary>
  765.   ''' <param name="Position">
  766.   ''' Indicates the absolute position.
  767.   ''' </param>
  768.   ''' <param name="BlockInput">
  769.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the mouse movement is sent.
  770.   ''' </param>
  771.   ''' <returns>
  772.   ''' The function returns the number of events that it successfully inserted into the mouse input stream.
  773.   ''' If the function returns zero, the input was already blocked by another thread.
  774.   ''' </returns>
  775.   Public Shared Function MousePosition(ByVal Position As Point,
  776.                                        Optional BlockInput As Boolean = False) As Integer
  777.  
  778.       ' Block Keyboard and mouse.
  779.       If BlockInput Then NativeMethods.BlockInput(True)
  780.  
  781.       ' The inputs structures to send.
  782.       Dim Inputs As New List(Of NativeMethods.Input)
  783.  
  784.       ' The current input to add into the Inputs list.
  785.       Dim CurrentInput As New NativeMethods.Input
  786.  
  787.       ' Transform the coordinates.
  788.       Position.X = CInt(Position.X * 65535 / (Screen.PrimaryScreen.Bounds.Width - 1))
  789.       Position.Y = CInt(Position.Y * 65535 / (Screen.PrimaryScreen.Bounds.Height - 1))
  790.  
  791.       ' Add an absolute mouse movement.
  792.       With CurrentInput
  793.           .type = NativeMethods.InputType.Mouse
  794.           .mi.dx = Position.X
  795.           .mi.dy = Position.Y
  796.           .mi.dwFlags = NativeMethods.MouseInput_Flags.Absolute Or NativeMethods.MouseInput_Flags.Move
  797.           .mi.time = 0
  798.       End With : Inputs.Add(CurrentInput)
  799.  
  800.       ' Send the absolute mouse movement.
  801.       Return NativeMethods.SendInput(Inputs.Count, Inputs.ToArray,
  802.                                      Marshal.SizeOf(GetType(NativeMethods.Input)))
  803.  
  804.       ' Unblock Keyboard and mouse.
  805.       If BlockInput Then NativeMethods.BlockInput(False)
  806.  
  807.   End Function
  808.  
  809.   ''' <summary>
  810.   ''' Moves the mouse hotspot to an absolute position, in coordinates.
  811.   ''' </summary>
  812.   ''' <param name="X">
  813.   ''' Indicates the absolute 'X' coordinate.
  814.   ''' </param>
  815.   ''' <param name="Y">
  816.   ''' Indicates the absolute 'Y' coordinate.
  817.   ''' </param>
  818.   ''' <param name="BlockInput">
  819.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the mouse movement is sent.
  820.   ''' </param>
  821.   ''' <returns>
  822.   ''' The function returns the number of events that it successfully inserted into the mouse input stream.
  823.   ''' If the function returns zero, the input was already blocked by another thread.
  824.   ''' </returns>
  825.   Public Shared Function MousePosition(ByVal X As Integer, ByVal Y As Integer,
  826.                                        Optional BlockInput As Boolean = False) As Integer
  827.  
  828.       Return MousePosition(New Point(X, Y), BlockInput)
  829.  
  830.   End Function
  831.  
  832.   ''' <summary>
  833.   ''' Simulates a mouse click.
  834.   ''' </summary>
  835.   ''' <param name="MouseAction">
  836.   ''' Indicates the mouse action to perform.
  837.   ''' </param>
  838.   ''' <param name="BlockInput">
  839.   ''' If set to <c>true</c>, the keyboard and mouse are blocked until the mouse movement is sent.
  840.   ''' </param>
  841.   ''' <returns>
  842.   ''' The function returns the number of events that it successfully inserted into the mouse input stream.
  843.   ''' If the function returns zero, the input was already blocked by another thread.
  844.   ''' </returns>
  845.   Public Shared Function MouseClick(ByVal MouseAction As MouseButton,
  846.                                     Optional BlockInput As Boolean = False) As Integer
  847.  
  848.       ' Block Keyboard and mouse.
  849.       If BlockInput Then NativeMethods.BlockInput(True)
  850.  
  851.       ' The inputs structures to send.
  852.       Dim Inputs As New List(Of NativeMethods.Input)
  853.  
  854.       ' The current input to add into the Inputs list.
  855.       Dim CurrentInput As New NativeMethods.Input
  856.  
  857.       ' The mouse actions to perform.
  858.       Dim MouseActions As New List(Of MouseButton)
  859.  
  860.       Select Case MouseAction
  861.  
  862.           Case MouseButton.LeftPress ' Left button, hold and release.
  863.               MouseActions.Add(MouseButton.LeftDown)
  864.               MouseActions.Add(MouseButton.LeftUp)
  865.  
  866.           Case MouseButton.RightPress ' Right button, hold and release.
  867.               MouseActions.Add(MouseButton.RightDown)
  868.               MouseActions.Add(MouseButton.RightUp)
  869.  
  870.           Case MouseButton.MiddlePress ' Middle button, hold and release.
  871.               MouseActions.Add(MouseButton.MiddleDown)
  872.               MouseActions.Add(MouseButton.MiddleUp)
  873.  
  874.           Case Else ' Other
  875.               MouseActions.Add(MouseAction)
  876.  
  877.       End Select ' MouseAction
  878.  
  879.       For Each Action As MouseButton In MouseActions
  880.  
  881.           ' Add the mouse click.
  882.           With CurrentInput
  883.               .type = NativeMethods.InputType.Mouse
  884.               '.mi.dx = Offset.X
  885.               '.mi.dy = Offset.Y
  886.               .mi.dwFlags = Action
  887.           End With : Inputs.Add(CurrentInput)
  888.  
  889.       Next Action
  890.  
  891.       ' Send the mouse click.
  892.       Return NativeMethods.SendInput(Inputs.Count, Inputs.ToArray,
  893.                                      Marshal.SizeOf(GetType(NativeMethods.Input)))
  894.  
  895.       ' Unblock Keyboard and mouse.
  896.       If BlockInput Then NativeMethods.BlockInput(False)
  897.  
  898.   End Function
  899.  
  900. #End Region
  901.  
  902. End Class

Saludos.
7096  Programación / Scripting / Re: Necesito ayuda con un script que modifique un archivo xml en: 25 Abril 2014, 06:56 am
Como veo que no te importa depender de aplicaciones de terceros entonces en lugar de utilizar 'SED' podrías utilizar alguna herramienta óptima para la manipulación de XML, como por ejemplo 'XML Starlet':

Código
  1. @Echo OFF
  2.  
  3. Set "XmlInput=.\FileZilla.xml"
  4. Set "XmlOutput=.\Nuevo documento.xml"
  5.  
  6. Set "UserXPath=FileZilla3/Servers/Folder/Server/User"
  7. Set "UserValue=Nuevo Usuario"
  8.  
  9. Set "PassXPath=FileZilla3/Servers/Folder/Server/Pass"
  10. Set "PassValue=Nuevo Pass"
  11.  
  12. .\xmlstarlet.exe ed -u "%UserXPath%" -v "%UserValue%" -u "%PassXPath%" -v "%PassValue%" "%XmlInput%" > "%XmlOutput%"
  13.  
  14. Pause&Exit

Saludos
7097  Programación / Scripting / Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH en: 24 Abril 2014, 19:11 pm
En Batch puedes pasar 255 argumentos, pero solo 9 de ellos se pueden usar (%1-%9), para seguir usando el resto de argumentos necesitas usar el comando SHIFT para desplazar a la izquierda el última argumento (%8<<%9<<%10), y así sucesivamente hasta terminar con los argumentos que pasaste.

Lo considero una completa pérdida de tiempo porque Batch es así de simple, la simpleza es el peor de sus defectos y esto lo convierte en una herramienta en la que es necesario invertir demasiado tiempo para escribir el código para realizar una tarea que debería ser simple y así lo es en cualquier otro lenguaje, así que para no perder el tiempo, te escribiré una solución en VBS:

Código
  1. ' La ruta del archivo de texto plano resultante.
  2. TextFile = ".\CombinedTextFiles.Txt"
  3.  
  4. ' Constante que indica al método que se precisa abrir el archivo para leerlo.
  5. Const ReadText = 1
  6.  
  7. ' Constante que indica al método que se precisa abrir el archivo para añadir texto.
  8. Const AppendText = 8
  9.  
  10. ' Instancio el objeto que contiene los métodos de lectura/escritura.
  11. set objFSO = CreateObject("Scripting.FileSystemObject")
  12.  
  13. ' Iteración de argumentos.
  14. For Each Arg In WScript.Arguments
  15.  
  16.    ' Obtengo y combino el contenido de texto de los archivos pasados como argumento.
  17.    CombinedText = CombinedText & vbNewLine &  _
  18.                   objFSO.OpenTextFile(Arg, ReadText, False).ReadAll
  19.  
  20. Next
  21.  
  22. ' Abro/Creo el archivo resultante para su posterior escritura.
  23. set objTextFile = objFSO.OpenTextFile(TextFile, AppendText, True)
  24.  
  25. ' Agrego el texto de los archivos combinados al archivo resultante.
  26. objTextFile.WriteLine(CombinedText)
  27.  
  28. ' Libero el objeto.
  29. objTextFile.Close
  30.  
  31. ' Código de salida satisfactorio.
  32. Wscript.Quit(0)

Saludos
7098  Programación / Scripting / Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH en: 24 Abril 2014, 17:11 pm
Un ejemplo para arrastrar y soltar archivos a la consola:

[Batch] [Aporte] (O eso creo xD) Consola de reciclaje v1.0 By Elektro

Si los quieres "concatenar" de forma más interna, solo debes cambiar/adaptar el patrón de búsqueda del comando Copy...

Código:
copy /A "*NombreParcial*.txt" "script_total.txt"

o:

Código:
copy /A "Nombre Completo 1.txt"+"Nombre Completo 2.txt" "script_total.txt"

Saludos
7099  Programación / .NET (C#, VB.NET, ASP) / Re: Convertir texto en formato URL en: 23 Abril 2014, 13:56 pm
· HttpUtility Class (System.Web) - MSDN
Citar
Provides methods for encoding and decoding URLs

Ejemplo:
Código
  1. Imports System.Web
  2.  
  3. Public Class Test
  4.  
  5.    Private Sub Test() Handles MyBase.Load
  6.  
  7.        Dim s As String = "rel=nofollow target=_blank>"
  8.  
  9.        MsgBox(HttpUtility.UrlEncode(s))     ' Result: rel%3dnofollow+target%3d_blank%3e
  10.        MsgBox(HttpUtility.UrlPathEncode(s)) ' Result: rel=nofollow%20target=_blank>
  11.  
  12.    End Sub
  13.  
  14. End Class

Saludos.
7100  Programación / .NET (C#, VB.NET, ASP) / Re: [WPF] Agregar referencia desde un recurso del mismo proyecto, es posible? en: 22 Abril 2014, 21:39 pm
Cita de: Ikillnukes;1042929488
este DLL tiene siempre que estar al lado del ejecutable (.exe) para que la aplicación rule, si no lo está no se abre como sabréis.

Eso es incorrecto, una dll es un archivo localizable como cualquier otro archivo, puedes meter el ensamblado en una carpeta cualquiera, y luego cargarlo desde esa '...\carpeta\ensamblado.dll' en tu proyecto (ya sea WF o WPF).



Cita de: Ikillnukes;1042929488
Para mi esto de que un maldito DLL tenga que estar al lado del Exe para que se pueda ejecutar me toca mucho la moral, y bueno, pues estuve viendo por ahí metodos de como poder llamar a este dichoso DLL desde los recursos.

Es lo más normal del mundo, una dll no es más que un conjunto de Classes y otros miembros (como un proyecto, en este caso solo métodos con sus objetos y otros miembros y los diálogos ...UserControls) compiladas en un ensamblado .NET ...de extensión dll y con sus puntos de acceso (EntryPoints) legibles y accesibles por el lenguaje, es un archivo complétamente independiente al que accedes.



Cita de: Ikillnukes;1042929488
si cargo desde los recursos este dichoso DLL como se supone que Intellise va a detectar que en los recursos hay tal DLL para importarlo (Imports DLL.Dichoso)

hmmm, creo que entiendo lo que quieres decir... aunque también creo que estás confundiendo cosas, la característica IntelliSense nada tiene que ver con la importación de un ensamblado (la instrucción Imports), son dos cosas muy distintas, aparte, la declaración Imports referencia los miembros de un ensamblado para que puedas especificarlos de forma abreviada y también para evitar ambiguedades (conflictos) entre miembros que tengan el mismo nombre ...pero tú la librería la puedes usar sin importarla, solo tienes que escribir el namespace completo (una vez hayas referenciado el ensamblado).

IntelliSense es una característica que muestra la información relevante (los comentarios XML que se hayan documentado en el ensamblado), sobre los miembros (cualquier miembro documentable, como una propiedad, o un método, y sus parámetros y/o su valor de retorno),

si te fijas en alguno de mis Snippets verás muchos comentarios, pues no lo hago por gusto, lo hago para documentar el código y que IntelliSense lo muestre.

Para usar la instrucción Imports en un ensamblado (la dll), este debe existir como un archivo físico en el disco para importar (al menos que yo sepa), ten en cuenta que los recursos se cargan en la memoria y no en el disco, pero como todo espacio de memoria, este se puede manipular y extraer, así que si añades una dll como recurso a tu proyecto, una vez compilado (quiero decir, en tiempo de ejecución) podrías extraer primeramente del Stream de memoria todos los bytes que forman el archivo dll para guardarlo en el disco físico ...en un 'archivo.dll', y luego cargarlo usando Reflection, o mejor todavía, puedes cargar el Stream del ensamblado (el recurso en el namespace My.Resources) diréctamente usando Reflection,
pero el tema Reflection es MUY extenso y complejo como para explicarlo en 10 segundos, y además deberías usar reflection también para modificar todos los nombres referenciados de la libreria, por ejemplo:
Código:
Dim dialog As New Ookii.Dialogs.VistaFolderBrowserDialog
Esa sería la manera normal como instanciarias el objeto, pero al no tenerlo referenciado obviamente no vas a poder especificar los nombres completos porque el Debugger te va a mandar a la mierd..., primero tienes que cargar el ensamblado, luego debes localizar el miembro instanciable (la Class que contiene el Constructor), y luego instanciarla, ejemplo:

Código
  1. Imports System.Reflection
  2.  
  3. Public Class Form1
  4.  
  5.  
  6.    Private Shadows Sub Shown() Handles MyBase.Shown
  7.  
  8.        ' Cargo la dll como recurso, es decir, cargo el Stream de memoria que contiene los bytes de la dll.
  9.        Dim asm As Assembly = Assembly.Load(My.Resources.Ookii_Dialogs)
  10.  
  11.        ' Obtengo el miembro 'VistaFolderBrowserDialog' del ensamblado.
  12.        Dim t As Type = (From member As Type In asm.GetTypes
  13.                         Where member.Name = "VistaFolderBrowserDialog").First
  14.  
  15.        ' Instancio la Class.
  16.        ' Esto sería el equivalente a:
  17.        ' Dim Dialog As New Ookii.Dialogs.VistaFolderBrowserDialog
  18.        Dim Dialog = Activator.CreateInstance(t)
  19.  
  20.        ' Asigno una propiedad del Objeto.
  21.        Dialog.Tag = "Hello"
  22.        MsgBox(Dialog.tag)
  23.  
  24.    End Sub
  25.  
  26. End Class
...Y eso es en versión reducida y rápida, si un método es privado o si hay coincidencias ambiguas (un método overload, con el mismo nombre que otro) deberás iterar los miembros (métodos) para hallar el correcto e invocarlo, y especificar sus Types, el Binder, y etc, y lo mismo para asignar valores a las propiedades en caso de que se den las mismas circunstancias, usar Reflection no es moco de pavo, es algo avanzado, aunque cuando vas aprendiendo te das cuenta de que hay cosas que son muy sencillas al fin y al cabo.

Y en fín, por esa razón te sugerí otras alternativas (seguir leyendo abajo).



Cita de: Ikillnukes;1042929488
ILMerge por aquí, .Net Shrink por allá, pero ningún maldito tutorial en condiciones que te explique paso por paso lo que se supone que hay que hacer.

No se si es sarcasmo, porque lo de ILMerge y .NET Shrink te lo sugerí yo... y a mi parecer si no te entiendes con una aplicación tan sencilla diseñada para newbies como es .NET Shrink entonces diréctamente te sugiero dejar de programar.

Te explico, abres la aplicación, arrastras los ensamblados .NET (el exe + las librerías dll), y le das al botoncito que pone 'Compress File', y listo, ya tienes todos los ensamblados empaquetado en un único archivo executable, muy dificil no es ...¿VERDAD?, ¿sigue siendo necesario un tutorial?.

De hecho te recomendé el uso de esa aplicación porque es lo más sencillo y rápido para ti, tú lo que debes hacer es agregar tus librerías dll a tu proyecto, no te preocupes por si la dll está "al lado" del exe, tu hazlo e importas la librería en tu proyecto como harias normalmente, acabas tu proyecto y todo el código, y luego (el paso final) abres el .NET Shrink (o ILMerge u otros Mergers) y lo empaquetas como te expliqué, se generará un único archivo EXE que contendrá todas las dll que hayas metido, la structura de archivos seguirá siendo la misma intérnamente, es decir, la dll estará ubicada al lado del exe ...pero todo estará empaquetado y podrás usar esa dll teniendo solo un exe (con la dll adentro).


Saludos!



Aparte de eso, por si te interesa más Reflection, hice este ejemplo y lo posteé hace tiempo en el hilo de Snippets, un ejemplo para localizar e invocar métodos:

Código
  1. Imports System.Reflection
  2. Imports System.Globalization
  3.  
  4. Public Class Form1
  5.  
  6.    Private Shadows Sub Load() Handles MyBase.Load
  7.  
  8.        Dim MethodName As String = "Test"
  9.  
  10.        Dim Method As MethodInfo =
  11.            Me.GetType().GetMethod(MethodName, BindingFlags.IgnoreCase Or BindingFlags.Instance Or
  12.                                               BindingFlags.Public Or BindingFlags.NonPublic)
  13.  
  14.        If Method IsNot Nothing Then
  15.            Method.Invoke(Me, BindingFlags.IgnoreCase Or BindingFlags.Instance Or
  16.                              BindingFlags.Public Or BindingFlags.NonPublic,
  17.                          Nothing,
  18.                          New Object() {"Hello World!", Type.Missing}, CultureInfo.InvariantCulture)
  19.  
  20.        Else
  21.            MsgBox("Method not found.")
  22.  
  23.        End If
  24.  
  25.    End Sub
  26.  
  27.    Private Sub Test(ByVal StringValue As String, Optional ByVal IntValue As Integer = 1)
  28.        MessageBox.Show(StringValue & IntValue)
  29.    End Sub
  30.  
  31. End Class

Nota: Hay que tener muy presente la visibilidad del miembro.
Páginas: 1 ... 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 [710] 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 ... 1236
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines