Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

kelsch.cristiano

Como passar o valor de um textbox de uma aplicação para outra?

Recommended Posts

kelsch.cristiano

Boa noite pessoal,

Estou com dúvidas de como passar o valor de um textbox para outra aplicação.

Será que alguém poderia me dar uma mão aee?

abraço


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
Tuntankamon

O único modo que me lembro tem de ser com as APIs do windows.

SendMessage, GetClassName, etc..

Share this post


Link to post
Share on other sites
kelsch.cristiano

Algum exemplo de como fazer?

Abraço


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
Tuntankamon

Para começar precisas de saber qual a janela, para isso começas de saber qual o nome da janela que queres.

O visual studio tem uma ferramenta para isso SPY++

Depois de saberes o nome, (GetTopWindow) tens de percorrer todas as janelas existentes no desktop (GetWindowName) e verificares se é a que te interessa, ao encontrares a que te interessa tens de a seleccionar e seleccionar a textbox (FindWindowEx) que desejas e envaires uma mensagem com o valor (SendMessageA).

Basicamente precisas destas funções

GetTopWindow,GetWindowName,FindWindowEx,SendMessageA, que fazem parte da User32.dll

Share this post


Link to post
Share on other sites
kelsch.cristiano

Bah tentei de todas as formas, pesquisei mais não da certo?

alguém pode me mandar algo?

abraço


Att Cristiano Kelsch

Share this post


Link to post
Share on other sites
rjcp

Viva, tens aqui este código. Vê se serve para o que pretendes:

class InteractWithAnotherTextBox

    {

        public const uint WM_SETTEXT = 0x000C;

        public const uint VK_RETURN = 0x0D;  //ENTER key

        public const uint WM_KEYDOWN = 0x100;

       

        [DllImport("user32")]

        [return: MarshalAs(UnmanagedType.Bool)]

        public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);

       

        [DllImport("user32")]

        public static extern IntPtr FindWindow(string lpClass, string WindowName);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

        public static extern int SendMessage(IntPtr hwnd, [MarshalAs(UnmanagedType.U4)] uint Msg, uint wParam, string lParam);

        [DllImport("user32.dll", EntryPoint = "PostMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)]

        public static extern void PostMessage(IntPtr hWnd, uint msg, uint wParam, uint lParam);

        /// <summary>

        /// Returns a list of child windows

        /// </summary>

        /// <param name="parent">Parent of the windows to return</param>

        /// <returns>List of child windows</returns>

        public static List<IntPtr> GetChildWindows(IntPtr parent)

        {

            List<IntPtr> result = new List<IntPtr>();

            GCHandle listHandle = GCHandle.Alloc(result);

            try

            {

                EnumWindowProc childProc = new EnumWindowProc(EnumWindow);

                EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));

            }

            finally

            {

                if (listHandle.IsAllocated)

                listHandle.Free();

            }

            return result;

        }

        /// <summary>

        /// Callback method to be used when enumerating windows.

        /// </summary>

        /// <param name="handle">Handle of the next window</param>

        /// <param name="pointer">Pointer to a GCHandle that holds a reference to the list to fill</param>

        /// <returns>True to continue the enumeration, false to bail</returns>

        private static bool EnumWindow(IntPtr handle, IntPtr pointer)

        {

            GCHandle gch = GCHandle.FromIntPtr(pointer);

            List<IntPtr> list = gch.Target as List<IntPtr>;

            if (list == null)

            {

                throw new InvalidCastException("GCHandle Target could not be cast as List<IntPtr>");

            }

            list.Add(handle);

            //  You can modify this to check to see if you want to cancel the operation, then return a null here

            return true;

        }

        /// <summary>

        /// Delegate for the EnumChildWindows method

        /// </summary>

        /// <param name="hWnd">Window handle</param>

        /// <param name="parameter">Caller-defined variable; we use it for a pointer to our list</param>

        /// <returns>True to continue enumerating, false to bail.</returns>

        public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);

        public void SendMessageToNewTextBox(string message){

            IntPtr mainWind = FindWindow(null, <String com o nome da janela onde está a textbox>);

            List<IntPtr> result = GetChildWindows(mainWind);

            IntPtr textBoxMessageTo = result[result.Count-1];

            SendMessage(textBoxMessageTo, WM_SETTEXT, 0, message);

        }

    }

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.