Escolar Documentos
Profissional Documentos
Cultura Documentos
NET
Enviar comentarios
Las aplicaciones web ASP.NET no se limitan a los lenguajes y las herramientas basados en servidor.Puede incluir ECMAScript (JavaScript o JScript) en sus pginas web ASP.NET para crear funcionalidad enriquecida basada en explorador.ASP.NET dispone de una amplia gama de caractersticas para la compatibilidad con los scripts de cliente. Una opcin consiste en crear y agregar fragmentos de cdigo individuales de script de cliente a las pginas web ASP.NET para admitir el comportamiento de explorador que disee para la aplicacin.Esta opcin resulta prctica si solo desea incluir algunas partes pequeas de cdigo JavaScript o si trabaja con cdigo JavaScript que ya tiene.Esta opcin tambin permite que el tamao de las pginas web ASP.NET sea el mnimo. Asimismo, puede aprovechar las eficaces caractersticas AJAX de ASP.NET.Entre estas caractersticas AJAX se incluye un completo marco de trabajo que admite lo siguiente: Programacin orientada a objetos en JavaScript. Postbacks asincrnicos. Servicios Web de aplicacin para autenticacin y perfiles. Controles de servidor que administran los scripts de cliente con compatibilidad ampliada para depuracin y seguimiento de traza.
Las caractersticas AJAX de ASP.NET permiten aprovechar las ventajas de la funcionalidad de JavaScript con menos codificacin manual.Esta proporciona la funcionalidad de JavaScript ampliada, adems de un marco de trabajo para crear la funcionalidad de cliente que se integra en ASP.NET. En este tema se proporciona informacin general sobre las opciones para agregar script de cliente a las pginas web ASP.NET.Contiene las siguientes secciones: Escenarios Incluir script de cliente personalizado en pginas ASP.NET Ampliar JavaScript con caractersticas AJAX de ASP.NET Controles de servidor ASP.NET que dependen de scripts de cliente Agregar eventos del script de cliente a los controles de servidor ASP.NET Hacer referencia a controles de servidor en scripts de cliente Provocar eventos Click de cliente para los controles de servidor Comunicacin entre scripts de cliente y cdigo de servidor Crear componentes de script de cliente Agregar funcionalidad de cliente a los controles de servidor
Escenarios
Use los scripts de cliente cuando desee hacer lo siguiente: Mejorar la experiencia del usuario con pginas web ms enriquecidas, que son ms receptivas a las acciones del usuario y presentan un comportamiento similar a las aplicaciones cliente tradicionales.Por ejemplo, puede usar scripts de cliente para comprobar los datos proporcionados con el teclado en un cuadro de texto a medida que se escribe cada uno de los caracteres. Agregar funcionalidad AJAX a las pginas web ASP.NET, lo que le permite hacer lo siguiente: Reducir las actualizaciones de pgina completa y evitar el parpadeo de la pgina mediante la manipulacin dinmica de los elementos DOM de la pgina. Actualizar y administrar la interfaz de usuario sin necesidad de un postback al servidor. Organizar el cdigo en componentes de cliente.Los componentes de cliente son objetos reutilizables que encapsulan JavaScript basado en Microsoft Ajax Library.Los componentes de cliente tambin se pueden administrar mediante controles del lado servidor personalizados o asociar a controles de servidor existentes para agregar funcionalidad de cliente.
Se pueden agregar bloques de script a una pgina ASP.NET del mismo modo que se hara en cualquier pgina HTML. Tambin se pueden utilizar scripts de cliente para escribir controladores de eventos para eventos de cliente como el evento onload de la pgina. Cuando una pgina ASP.NET se ejecuta en el explorador, los elementos de marcado de la pgina son direccionables en el script de cliente.Estos generan los mismos eventos de cliente que en una pgina HTML. Nota Puede hacer referencia a los controles de servidor ASP.NET en el script de cliente.Para obtener ms informacin, vea Hacer referencia a controles de servidor en scripts de cliente ms adelante en este tema. Una pgina web ASP.NET tambin puede tener acceso a un archivo de script al hacer referencia a este en el atributosrc de una etiqueta <script>, como en el ejemplo siguiente:
Imprimir
<script type="text/javascript" src="MyScript.js"></script> Mantener los scripts de cliente en archivos .js externos en lugar de mantenerlos en las pginas en s puede ayudar a organizarlos.Tambin puede facilitar su administracin por parte del control de versiones y hacer que sea ms fcil compartirlos entre pginas. El explorador almacena en cach los archivos .js externos, de forma similar a como se almacenan en cach las imgenes y las pginas web.Una vez que el explorador carga el script como archivo externo, este est disponible en la memoria cach para cualquier otra pgina web que lo necesite.Esto puede ayudar a aumentar el rendimiento de la aplicacin web.
Crear script de cliente de forma dinmica
En muchos casos, el script de cliente para la pgina se puede crear mediante declaracin, normalmente como un bloque de script.Sin embargo, tambin se puede crear script de cliente de forma dinmica.Esto resulta til si el script depende de informacin que solo est disponible en tiempo de ejecucin.Por ejemplo, puede insertar el script de cliente en una pgina que direcciona un control de servidor cuyo nombre (identificador) no se conoce hasta que se ejecuta la aplicacin, o puede crear un script que depende de los valores recibidos de un usuario. Para crear e insertar script de cliente de forma dinmica en una pgina presentada, llame a los mtodos de la claseClientScriptManager, como los siguientes: RegisterClientScriptBlock, que inserta un bloque de script en la parte superior de la pgina presentada. RegisterStartupScript, que inserta un bloque de script al final de la pgina presentada.
En el ejemplo siguiente se muestra cmo agregar a la pgina el script de cliente generado dinmicamente.El cdigo comprueba si est activada la casilla denominada checkDisplayCount. En caso afirmativo, el cdigo realiza las siguientes tareas:
Crea una funcin de script de cliente que usa un elemento span para mostrar el recuento de caracteres en un control TextBox denominado TextBox1. Agrega un evento de cliente al control TextBox. Genera el elemento span.
El cdigo supone que la pgina contiene una casilla denominada checkDisplayCount cuya propiedadAutoPostBack est establecida en true y un control PlaceHolder denominado PlaceHolder1.
VB C# C++ F# JScript Imprimir
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) If checkDisplayCount.Checked Then Dim scriptText As String = "" scriptText &= "function DisplayCharCount(){" scriptText &= " getElementByID("spanCounter").innerText = " & _ "document.forms[0].TextBox1.value.length" scriptText &= "}" ClientScriptManager.RegisterClientScriptBlock(Me.GetType(), _ "CounterScript", scriptText, True) TextBox1.Attributes.Add("onkeyup", "DisplayCharCount()") Dim spanLiteral As New LiteralControl() spanLiteral.Text = "<span id=""spanCounter""></span>" PlaceHolder1.Controls.Add(spanLiteral) End If End Sub Para obtener ms informacin, vea Cmo: Agregar script de cliente a las pginas Web ASP.NET dinmicamente. Para los mtodos de la clase ClientScriptManager, se proporciona un tipo al que est asociado el bloque de script y se asigna una clave a este bloque. Al proporcionar un tipo resulta ms fcil evitar colisiones si tanto la pgina como los controles (controles personalizados o controles de usuario) agregan bloques de script a la misma pgina.El uso de una clave permite evitar la duplicacin.Si llama a uno de los mtodos para agregar el script y ya existe un script con la misma clave y el mismo tipo, el script no se vuelve a agregar. El tipo y la clave proporcionados permiten evitar una duplicacin innecesaria.Por lo tanto, generalmente no tendr que determinar de forma explcita si ya existe un bloque de script.Sin embargo, si es til en la aplicacin comprobar si ya existe un bloque de script, puede llamar a los mtodos siguientes: IsClientScriptBlockRegistered IsClientScriptIncludeRegistered IsOnSubmitStatementRegistered
IsStartupScriptRegistered
Si usa las caractersticas AJAX de ASP.NET, el control ScriptManager ofrece una forma de agregar archivos de script a una pgina. Esto incluye los archivos de script estticos (archivos .js) del disco y los archivos de script incrustados como recursos en un ensamblado.Los archivos de script se pueden especificar mediante declaracin en el control.Como alternativa, puede usar los mtodos de registro del control ScriptManager que permiten administrar los archivos de script de cliente existentes mediante programacin y trabajar con scripts para admitir la actualizacin parcial de la pgina. Para obtener informacin general sobre el control ScriptManager, vea Informacin general sobre el control ScriptManager. Para obtener informacin sobre cmo incrustar un archivo JavaScript como recurso en un ensamblado y cmo usarlo en una pgina web, vea Tutorial: Incrustar un archivo JavaScript como recurso en un ensamblado. Nota Si usa las caractersticas AJAX de cliente de ASP.NET, pero no las caractersticas basadas en servidor, use los mtodos de la clase ClientScriptManager para insertar scripts en una pgina web ASP.NET. Por ejemplo, si no usa el control UpdatePanel ni las caractersticas de localizacin de scripts, no necesita el controlScriptManager. Por consiguiente, no puede llamar a sus mtodos para insertar el script de cliente en la pgina.El uso de los mtodos de la clase ClientScriptManager suele ser ms eficaz que usar los mtodos del control ScriptManager. Esto se debe a que los mtodos de la clase ClientScriptManager no requieren el procesamiento adicional de las caractersticas basadas en servidor admitidas por el control ScriptManager. Si tiene que crear el script de forma dinmica (en lugar de simplemente administrar el script existente), use la clase ClientScriptManager para insertar el script de cliente en una pgina. Por ejemplo, use la claseClientScriptManager si desea crear el script de cliente mediante programacin en funcin de la informacin a la que un archivo de script ya existente no puede hacer referencia.
Interfaces Enumeraciones Reflexin Aplicaciones auxiliares de depuracin Traza Control de excepciones con tipo Mtodos auxiliares para cadenas y matrices. Nota Puede usar Microsoft Ajax Library aunque no tenga previsto usar las caractersticas AJAX para servidores de ASP.NET.
Para obtener ms informacin sobre la forma en que Microsoft Ajax Library ampla JavaScript, consulte los siguientes temas: Crear un script de cliente personalizado mediante Microsoft Ajax Library. Extensiones de tipo base de JavaScript Informacin general sobre la depuracin y la traza de aplicaciones habilitadas para AJAX Extensiones de tipo de error
El nivel de compatibilidad con exploradores de Microsoft Ajax Library proporciona compatibilidad con scripting de Ajax para los exploradores que se usan con ms frecuencia (incluidos Microsoft Internet Explorer, Mozilla Firefox y Apple Safari).Esto permite escribir el mismo script independientemente del explorador compatible al que est destinado.Para obtener ms informacin, vea Informacin general sobre Microsoft Ajax.
Los controles ASP.NET se presentan como elementos en la pgina.(Los elementos exactos presentados por un control dependen del lenguaje de marcado de la pgina, que puede incluir HTML, XHTML u otro lenguaje). Por lo tanto, puede agregar el control de eventos del script de cliente a los controles del mismo modo que lo hara con cualquier elemento de la pgina.Sin embargo, en algunos casos, debe saber cmo presenta el control su resultado y qu atributos se reserva para s mismo. Para obtener ms informacin, vea Cmo: Agregar eventos de script de cliente a los controles de servidor Web ASP.NET
Agregar controladores de eventos de cliente mediante declaracin
En el formato de los controles de servidor ASP.NET, los valores de las propiedades se establecen mediante atributos.Por ejemplo, para establecer la propiedad Text de un control TextBox, puede crear un marcado como el siguiente:
Imprimir
<asp:textbox id="TextBox1" runat="server" text="Sample Text" /> Nota sobre la seguridad TextBox acepta los datos proporcionados por el usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, las pginas web ASP.NET validan los datos escritos por el usuario para comprobar que no incluyen script ni elementos HTML.Para obtener ms informacin, vea Informacin general sobre los ataques mediante scripts. Si se incluye un atributo que no est asignado a ninguna propiedad del control, ASP.NET omite el atributo durante el procesamiento del servidor.Lo pasa al explorador tal cual, como parte del marcado generado por el control.Por ejemplo, el control TextBox no tiene ninguna propiedad denominada onkeyup. Por consiguiente, si incluye un atributo onkeyup en el marcado de un control TextBox, el atributo se pasa a travs del explorador. Este comportamiento permite agregar enlaces de eventos a los controles de servidor declarndolos en el marcado.Por ejemplo, el formato siguiente de un control TextBox hace que el cuadro de texto muestre la longitud del texto actual en un elemento span denominado spanCounter cada vez que el usuario presiona una tecla en el cuadro de texto:
Imprimir
<asp:textbox id="TextBox1" runat="server" text="Sample Text" onkeyup="spanCounter.innerText=this.value.length;" /> Opcionalmente, el evento podra llamar a un mtodo definido en un script de cliente situado en otra parte de la pgina:
Imprimir
<asp:textbox id="TextBox1" runat="server" text="Sample Text" onkeyup="DisplayCount(this);" /> Recuerde que el lenguaje empleado para el cdigo de servidor (Visual Basic o C#) no afecta al script de cliente, que siempre se escribe en ECMAScript (JavaScript or JScript). Para obtener ms informacin, vea Cmo: Agregar eventos de script de cliente a los controles de servidor Web ASP.NET.
Adems de agregar atributos de paso a travs a un control mediante declaracin, tambin se pueden agregar atributos mediante programacin utilizando el cdigo de servidor.Esto resulta til si el valor del atributo que se va a agregar se conoce solo en tiempo de ejecucin.Para obtener informacin detallada, vea Cmo: Establecer atributos HTML de controles en pginas web ASP.NET.
<asp:textbox id="TextBox1" runat="server" text="Sample Text" /> La propiedad ClientID se establece en TextBox1 y el elemento resultante tendra la apariencia siguiente en un explorador basado en HTML:
Imprimir
<input name="TextBox1" type="text" value="Sample Text" id="TextBox1" /> Por consiguiente, puede hacer referencia al control de servidor en el script de cliente mediante estos atributos.Normalmente, el control se direcciona utilizando una referencia completa en el script de cliente.Si el control es un elemento secundario del elemento form de la pgina, normalmente se hace referencia a l en el script de cliente mediante sintaxis, como se muestra en el siguiente ejemplo:
Imprimir
var tb1 = document.getElementById("TextBox1"); tb1.value = "New value"; En el ejemplo siguiente se supone que, para el elemento form de la pgina, el atributo id se ha establecido enform1.
Imprimir
document.form1.TextBox1.value = "New value"; El atributo id que se generar para un control de servidor depende del control que se est usando y de si es un elemento secundario de otro control. Cuando un control est incluido en un control de repeticin, como el controlGridView, ListView o Repeater, un solo control definido en el marcado suele crear varias instancias del control en el HTML presentado. El marco de las pgina ASP.NET proporciona un mecanismo para asegurarse de que cada control en el HTML presentado de una pgina tiene un identificador nico.Para obtener ms informacin sobre los algoritmos que ASP.NET usa para asignar los valores de ClientID, vea la propiedad ClientIDMode y los siguientes temas: Identificacin de controles de servidor web ASP.NET. Cmo: Obtener acceso a controles de JavaScript por identificador Tutorial: Facilitar el acceso a los controles enlazados a datos desde JavaScript
Tutorial: Facilitar el acceso a los controles situados en controles de usuario web desde JavaScript
El script de cliente puede llamar directamente al cdigo de servidor si se implementa una devolucin de llamada de cliente.En una secuencia normal de pginas web ASP.NET, cada accin del
usuario que ejecuta cdigo de servidor requiere un postback.Sin embargo, tambin puede invocar el procesamiento del servidor desde el explorador sin un postback completo.En este caso, el explorador no enva la pgina entera al servidor y la recarga posteriormente cuando el servidor responde.En su lugar, el explorador enva una cantidad pequea de datos al servidor.Cuando el servidor enva una respuesta, el script de cliente en el explorador procesa los datos devueltos sin recargar la pgina.Durante el procesamiento del servidor, se mantiene todo el estado del cliente, como las variables locales.Este proceso se conoce como postback asincrnico y es clave para la representacin parcial de la pgina. Puede llamar a los mtodos de servidor desde el script de cliente sin un postback de las siguientes maneras: Use el control de servidor ASP.NET UpdatePanel. Este control forma parte de la funcionalidad AJAX de ASP.NET.Permite definir una regin de una pgina que se actualizar con una actualizacin parcial de la pgina.Cuando use el control UpdatePanel, no es necesario que escriba ningn script de cliente para invocar las actualizaciones asincrnicas parciales de la pgina. Para obtener ms informacin, vea Informacin general sobre la representacin parcial de pginas y Informacin general sobre el control UpdatePanel. Use la compatibilidad con AJAX de ASP.NET para la comunicacin de servicios Web para escribir scripts de cliente que invoquen un mtodo de servidor web.Este enfoque es conceptualmente similar a escribir su propia devolucin de llamada del script de cliente para llamar a un mtodo de servidor web.Sin embargo, Microsoft Ajax Library administra los detalles de la invocacin del mtodo de servidor y proporciona una biblioteca de scripts de cliente ms slida para realizar y procesar la llamada.Para obtener ms informacin, vea ASP.NET AJAX and Web Services. Implemente una devolucin de llamada de cliente.En este caso, se escribe el cdigo de cliente que enva la solicitud y procesa el resultado.El enfoque ms comn es crear una funcin de llamada en el script de cliente y una funcin de devolucin de llamada que se invoca cuando el servidor devuelve los resultados.Para obtener ms informacin, vea Implementar mediante programacin devoluciones de llamada de cliente sin devoluciones de datos en pginas web de ASP.NET
Cada enfoque tiene sus ventajas.Crear una devolucin de llamada de cliente propia suele ofrecer menos sobrecarga y un tamao de pgina ms pequeo.Usar el control de servidor UpdatePanel permite implementar actualizaciones parciales de la pgina sin necesidad de escribir ningn script de cliente. Usar AJAX para llamar a los servicios Web tambin elimina la mayora de los scripts de cliente que debera escribir para realizar llamadas asincrnicas a los servicios Web.
Compartir datos mediante un control HiddenField
Puede compartir informacin entre el script de cliente y el cdigo de servidor si agrega un control HiddenField a la pgina. Puede hacer referencia al campo oculto en el script de cliente mediante su identificador.Tambin puede hacer referencia al campo oculto en el cdigo de servidor.Esto permite almacenar los valores en cualquiera de los bloques de cdigo y leerlos en el otro.Para pasar informacin del cdigo de servidor al script de cliente, puede crear un campo oculto mediante programacin con el mtodo RegisterHiddenField. Este mtodo permite especificar un
identificador y un valor para el campo.Puede usar el campo para almacenar valores dinmicos en la pgina de manera que ese script de cliente pueda leerlos.
Compartir datos mediante cookies
Tambin puede compartir valores entre el cdigo de servidor y el cdigo de cliente mediante cookies.Para obtener ms informacin sobre cmo escribir y leer cookies en el cdigo de servidor, vea Cmo: Escribir una cookie y Cmo: Leer una cookie. Para obtener informacin detallada sobre cmo usar JavaScript para leer y escribir cookies, vea JavaScript and cookies en el sitio web de MSDN.
Compartir datos durante postbacks asincrnicos
Si usa las caractersticas AJAX de ASP.NET, puede enviar datos personalizados como una cadena desde el servidor al cliente durante los postbacks asincrnicos (representacin parcial de la pgina) con el mtodo RegisterDataItem. El mtodo RegisterDataItem permite usar el cdigo de servidor para registrar un campo asociado a un control. Puede obtener acceso al valor del campo del script de cliente en el explorador a travs de los objetos AJAX de ASP.NETSys.WebForms.PageLoadingEventArgs y Sys.WebForms.PageLoadedEventArgs. Solo se puede llamar al mtodoRegisterDataItem durante un postback asincrnico. Para obtener informacin sobre cmo usar el mtodo RegisterDataItem para compartir datos entre el servidor y el cliente, consulte los temas siguientes: RegisterDataItem Trabajar con eventos de representacin de pgina parcial
Para obtener ms informacin, vea los temas siguientes: Crear componentes de cliente no visuales personalizados Crear controles de cliente de AJAX personalizados Crear una clase de componente de cliente utilizando el modelo de prototipo
Cualquier control de servidor ASP.NET existente o personalizado se puede convertir en un control extensor AJAX de ASP.NET. Un control extensor es un control de servidor web que usa las capacidades de ECMAScript (JavaScript), DHTML y AJAX del explorador web para agregar caractersticas como la interactividad y la comunicacin asincrnica con el servidor. Para obtener ms informacin, vea los temas siguientes: Agregar funcionalidad de cliente a un control de servidor web Agregar la funcionalidad de Ajax a los controles ASP.NET
Vea tambin
Conceptos
Scripting de cliente con ASP.NET Controles de servidor web ASP.NET y funciones del explorador Modelo de eventos de control de servidor Web ASP.NET Identificacin de controles de servidor web ASP.NET
Los formularios Windows Forms proporcionan varias opciones para simular mediante programacin las entradas del mouse y del teclado.En este tema se proporciona informacin general sobre estas opciones.
Para hacer clic con el botn secundario del mouse mediante programacin
1. 2. Cree un MouseEventArgs cuya propiedad Button se establezca en el valorMouseButtons .Right . Llame al mtodo OnMouseClick con este MouseEventArgs como argumento.
Para obtener ms informacin sobre controles personalizados, vea Desarrollar controles de formularios Windows Forms en tiempo de diseo. Hay otras maneras de simular las entradas del mouse.Por ejemplo, se puede establecer mediante programacin una propiedad de control que representa un estado que se establece normalmente mediante las entradas del mouse (como la propiedad Checked del control CheckBox), o se puede llamar directamente al delegado asociado al evento que desea simular.
La clase SendKeys se ha actualizado para que .NET Framework 3.0 pueda habilitar su uso en aquellas aplicaciones que se ejecuten en Windows Vista. La seguridad mejorada de Windows Vista (conocida como Control de cuenta de usuario o UAC) evita que la implementacin anterior funcione como se esperaba. La clase SendKeys es susceptible a problemas de tiempo, a lo que algunos programadores se han tenido que acomodar. La implementacin actualizada todava es susceptible a problemas de tiempo, pero es ligeramente ms rpida y puede requerir cambios en las soluciones.La clase SendKeys intenta utilizar primero la implementacin anterior y, si esto no tiene xito, utiliza la nueva implementacin.Como consecuencia, la clase SendKeys puede comportarse de manera distinta en sistemas operativos distintos. Adems, cuando la clase SendKeys utiliza la nueva implementacin, el mtodo SendWait no esperar a que se procesen los mensajes cuando se envan a otro proceso. Si la aplicacin confa en un comportamiento coherente sin tener en cuenta el sistema operativo, puede forzar que la clase SendKeys utilice la nueva implementacin agregando la configuracin de aplicacin siguiente al archivo app.config.
' Send a key to the button when the user double-clicks anywhere ' on the form. Private Sub Form1_DoubleClick(ByVal sender As Object, _
ByVal e As EventArgs) Handles Me.DoubleClick ' Send the enter key to the button, which raises the click ' event for the button. This works because the tab stop of ' the button is 0. SendKeys.Send("{ENTER}") End Sub
' Get a handle to an application window. Declare Auto Function FindWindow Lib "USER32.DLL" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As IntPtr ' Activate an application window. Declare Auto Function SetForegroundWindow Lib "USER32.DLL" _ (ByVal hWnd As IntPtr) As Boolean ' Send a series of key presses to the Calculator application. Private Sub button1_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles button1.Click ' Get a handle to the Calculator application. The window class ' and window name were obtained using the Spy++ tool. Dim calculatorHandle As IntPtr = FindWindow("CalcFrame", "Calculator") ' Verify that Calculator is a running process. If calculatorHandle = IntPtr.Zero Then
MsgBox("Calculator is not running.") Return End If ' Make Calculator the foreground application and send it ' a set of calculations. SetForegroundWindow(calculatorHandle) SendKeys.SendWait("111") SendKeys.SendWait("*") SendKeys.SendWait("11") SendKeys.SendWait("=") End Sub
Ejemplo
En el siguiente cdigo de ejemplo se muestra la aplicacin completa de los ejemplos de cdigo anteriores.
VB C# C++ F# JScript Imprimir
Namespace SimulateKeyPress Class Form1 Inherits Form Private WithEvents button1 As New Button() <STAThread()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub Public Sub New() button1.Location = New Point(10, 10) button1.TabIndex = 0 button1.Text = "Click to automate Calculator" button1.AutoSize = True Me.Controls.Add(button1) End Sub ' Get a handle to an application window.
Declare Auto Function FindWindow Lib "USER32.DLL" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As IntPtr ' Activate an application window. Declare Auto Function SetForegroundWindow Lib "USER32.DLL" _ (ByVal hWnd As IntPtr) As Boolean ' Send a series of key presses to the Calculator application. Private Sub button1_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles button1.Click ' Get a handle to the Calculator application. The window class ' and window name were obtained using the Spy++ tool. Dim calculatorHandle As IntPtr = FindWindow("CalcFrame", "Calculator") ' Verify that Calculator is a running process. If calculatorHandle = IntPtr.Zero Then MsgBox("Calculator is not running.") Return End If ' Make Calculator the foreground application and send it ' a set of calculations. SetForegroundWindow(calculatorHandle) SendKeys.SendWait("111") SendKeys.SendWait("*") SendKeys.SendWait("11") SendKeys.SendWait("=") End Sub ' Send a key to the button when the user double-clicks anywhere ' on the form. Private Sub Form1_DoubleClick(ByVal sender As Object, _ ByVal e As EventArgs) Handles Me.DoubleClick ' Send the enter key to the button, which raises the click ' event for the button. This works because the tab stop of ' the button is 0. SendKeys.Send("{ENTER}") End Sub End Class End Namespace