Archive

Development

<#
.SYNOPSIS
Send a sequence of keys to an application window

.DESCRIPTION
This Send-Keys script send a sequence of keys to an application window.
To have more information about the key representation look at http://msdn.microsoft.com/en-us/library/System.Windows.Forms.SendKeys(v=vs.100).aspx
(C)2013 Massimo A. Santin - Use it at your own risk.

.PARAMETER ApplicationTitle
The title of the application window

.PARAMETER Keys
The sequence of keys to send

.PARAMETER WaitTime
An optional number of seconds to wait after the sending of the keys

.EXAMPLE
Send-Keys "foobar - Notepad" "Hello world"

Send the sequence of keys "Hello world" to the application titled "foobar - Notepad".

.EXAMPLE
Send-Keys "foobar - Notepad" "Hello world" -WaitTime 5

Send the sequence of keys "Hello world" to the application titled "foobar - Notepad" 
and wait 5 seconds.

.EXAMPLE 
    New-Item foobar.txt -ItemType File; notepad foobar.txt ; Send-Keys "foobar - Notepad" "Hello world{ENTER}Ciao mondo{ENTER}" -WaitTime 1; Send-Keys "foobar - Notepad" "^s"

This command sequence creates a new text file called foobar.txt, opens the file using a notepad,
writes some text and saves the file using notepad.

.LINK
http://msdn.microsoft.com/en-us/library/System.Windows.Forms.SendKeys(v=vs.100).aspx
#>

param (
    [Parameter(Mandatory=$True,Position=1)]
    [string]
    $ApplicationTitle,

    [Parameter(Mandatory=$True,Position=2)]
    [string]
    $Keys,

    [Parameter(Mandatory=$false)]
    [int] $WaitTime
    )

# load assembly cotaining class System.Windows.Forms.SendKeys
[void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Add-Type -AssemblyName System.Windows.Forms

# add a C# class to access the WIN32 API SetForegroundWindow
Add-Type @"
    using System;
    using System.Runtime.InteropServices;
    public class StartActivateProgramClass {
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetForegroundWindow(IntPtr hWnd);
    }
"@

# get the applications with the specified title
$p = Get-Process | Where-Object { $_.MainWindowTitle -eq $ApplicationTitle }
if ($p) 
{
    # get the window handle of the first application
    $h = $p[0].MainWindowHandle
    # set the application to foreground
    [void] [StartActivateProgramClass]::SetForegroundWindow($h)

    # send the keys sequence
    # more info on MSDN at http://msdn.microsoft.com/en-us/library/System.Windows.Forms.SendKeys(v=vs.100).aspx
    [System.Windows.Forms.SendKeys]::SendWait($Keys)
    if ($WaitTime) 
    {
        Start-Sleep -Seconds $WaitTime
    }
}
Advertisements

Today I tried to upgrade ODataLib 5.2.0 to ODataLib 5.3.0 in a VisualStudio project.

NuGet complained that this wasn’t possibile because that some versions of some library were not compatible. For example I obtained the message:

Unable to find a version of ‘Nivot.WCFDataServicesToolkit’ that is compatible with ‘Microsoft.Data.Services 5.3.0’.

The solution was very simple: I uninstalled the old version and then I installed the new version.

Stiamo cercando un paio di programmatori (in ambiente Java e .NET) da inserire nell’organico della nostra sede di Padova. E fin qua non c’è niente di strano. Lo strano è che abbiamo ricevuto un mucchio di curriculum di persone che vogliono fare i project manager, gli analisti o altre mansioni del genere. Invece le persone che vogliono fare i programmatori sono ben poche.

Ma è tanto brutto programmare?

Mi domando cosa succederebbe se cercassi un sistemista.

Da un po’ di tempo in azienda utilizziamo spesso per sviluppare macchine virtuali in modo da avere ambienti controllati e fissi nel tempo. Questo sistema, per esempio, ci permette di avere ambienti di sviluppo con vecchi software e garantire un buon livello di supporto ai quei clienti che proprio non voglione sentirne di upgradare le soluzioni (pochi per fortuna).

In questi giorni sto lavorando su alcuni progetti di integrazione che comprendono SAP, IBM WebSphere e tecnologia Microsoft (Biztalk e WCF). Ho quindi creato uno share sul mio PC (con Vista Ultimate) per condivire dei file con alcune macchine virtuali create all’occorrenza in Virtual PC. Nello share avevo messo una copia di un Eclipse (Ganymede) comprensivo di diversi plugin, una versione beta di WAS 7.0 e molte altre cose per poterle copiare su un paio di macchine virtuali.

Ho scoperto poi che Windows Desktop Search 4.0 ha incluso automaticamente la directory appena condivisa tra le locazioni da indicizzare.

Risultato: decine di migliaia di file che il search cercava di indicizzare!

Inutile dire che appena me ne sono accorto (grazie a questo gadget) ho eliminato subito lo share dalle locazioni ricercate.