Ir para o conteúdo
  • 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?

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

        }

    }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.