• EnglishSpanishGermanFrenchPolishChinese (Traditional)


EnglishSpanishGermanFrenchPolishChinese (Traditional)

Operating systems, scripting, PowerShell and security

Operating systems, software development, scripting, PowerShell tips, network and security

Menú principal
  • Categorías
  • Cursos
  • Libro de PowerShell (nivel medio)
  • Libro de PowerShell (nivel avanzado)
  • Lo mejor
  • Lo último
  • Proyectos
  • Contactar
Ir al contenido

Buscar el nombre de una clase de un formulario en PowerShell con Microsoft Spy++ y escribir un mensaje en una caja de texto sin conocer el identificador de ventana en concreto del proceso desde PowerShell

Contenidos

  • Crear el formulario en PowerShell
  • Código en PowerShell que sirve para escribir de forma automática un texto en la caja de texto del formulario creado en PowerShell sin conocer el identificador de ventana del PowerShell que ejecuta el formulario

Crear el formulario en PowerShell

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#Crear un formulario, añadir una etiqueta, dos botones y una caja de texto
#Funcionalidad para el formulario:
#Pulsar la tecla Enter almacena en una variable el contenido de la caja de texto y se muestra
#Pulsar la tecla Escape sale del formulario
 
#Formulario
$Form = New-Object System.Windows.Forms.Form
$Form.Text="Formulario"
$Form.Size=New-Object System.Drawing.Size(500,500)
$Form.StartPosition="CenterScreen"
 
#Etiqueta
$Label=New-Object System.Windows.Forms.Label
$Label.Text="Etiqueta de ejemplo"
$Label.AutoSize=$True
$Label.Location=New-Object System.Drawing.Size(160,160)
 
#Caja de texto
$TextBox = New-Object System.Windows.Forms.TextBox
$TextBox.Location = New-Object System.Drawing.Size(100,180)
$TextBox.Size = New-Object System.Drawing.Size(260,20)
 
#Botón1
$Button1=New-Object System.Windows.Forms.Button
$Button1.Size=New-Object System.Drawing.Size(75,23)
$Button1.Text="Botón OK"
$Button1.Location=New-Object System.Drawing.Size(120,220)
 
#Botón2
$Button2=New-Object System.Windows.Forms.Button
$Button2.Size=New-Object System.Drawing.Size(75,23)
$Button2.Text="Botón Cancelar"
$Button2.Location=New-Object System.Drawing.Size(220,220)
 
#Funcionalidad para el formulario:
#Pulsar la tecla Enter almacena en una variable el contenido de la caja de texto y se muestra
#Pulsar la tecla Escape sale del formulario
$Form.KeyPreview = $True
$Form.Add_KeyDown({if ($_.KeyCode -eq "Enter"){$Var=$TextBox.Text;Write-Host $Var;$Form.Close()}})
$Form.Add_KeyDown({if ($_.KeyCode -eq "Escape"){$Form.Close()}})
 
#Funcionalidad para el botón:
#Pulsar Enter almacena en una variable el contenido de la caja de texto y se muestra
#Pulsar Escape sale del formulario
$Button1.Add_Click({$Var=$TextBox.Text;Write-Host $Var})
$Button2.Add_Click({$Form.Close()})
 
#Añadir etiqueta
$Form.Controls.Add($Label)
 
#Añadir botones
$Form.Controls.Add($Button1)
$Form.Controls.Add($Button2)
 
#Añadir caja de texto
$Form.Controls.Add($TextBox)
 
$Form.ShowDialog()

 

Código en PowerShell que sirve para escribir de forma automática un texto en la caja de texto del formulario creado en PowerShell sin conocer el identificador de ventana del PowerShell que ejecuta el formulario

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$codigo='
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll")]public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
'
 
# Localizar el proceso de PowerShell_ISE que tiene abierto el formulario, en el siguiente caso hay que utilizar el primer PowerShell_ISE abiero, es decir $proceso[0]
$proceso = Get-Process powershell_ise
 
$acciones = Add-Type -MemberDefinition $codigo -Name TextoNotepad -PassThru
 
# FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow)
# SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam)
 
# Tenemos que localizar la clase mediante Microsoft Spy++
$clase = "WindowsForms10.EDIT.app.0.141b42a_r6_ad1"
 
$proceso.MainWindowHandle | %{
    $acciones::SendMessage([IntPtr]$acciones::FindWindowEx($_, [IntPtr]::Zero, $clase, $null), 0x000C, 0, "Texto escribir3")
}
Publicado el día 31 de enero de 2021

CATEGORÍAS

Automatización, PowerShell

ETIQUETAS

Add-Type, App, AutoSize, Bot, Center, Código, Drawing, find, FindWindowEx, Get-Process, Jesús Niño, Jesús Niño Camazón, Log, Mac, MainWindowHandle, Microsoft, Microsoft Spy++, MSG, ndc, New-Object, powershell_ise, Screen, SendMessage, showdialog, size, System.Drawing, System.Windows.Forms, System.Windows.Forms.Form, System.Windows.Forms.Label, user32.dll, Windows, Windows.Forms.Form, Write-Host

MÁS

  • Crear una aplicación mediante en PowerShell que incremente y disminuya la frecuencia de sonido
  • 13. Interfaces de usuario gráficas en PowerShell (nivel intermedio)
  • Añadir botones a un formulario en PowerShell de forma automática
  • Buscar el nombre de una clase de un formulario en PowerShell con Microsoft Spy++
  • Buscar el nombre de una clase de un formulario en PowerShell con Microsoft Spy++ y escribir un mensaje en una caja de texto desde PowerShell
  • Convertir un script de PowerShell en un ejecutable de Windows (convertir un formulario en PowerShell)
Jesusninoc utiliza cookies: saber más aquí.