Search code examples
c#powershellmultithreadingsta

Convert Keith Hill's PowerShell Get-Clipboard and Set-Clipboard to a PSM1 script


I'd like to convert Keith Hill's C# implementation of Get-Clipboard and Set-Clipboard into pure PowerShell as a .PSM1 file.

Is there a way to spin up an STA thread in PowerShell as he does in his Cmdlet when working with the clipboard?

The Blog Post
The Code


Solution

  • TextBox doesn't require -STA switch.

    function Get-ClipBoard {
        Add-Type -AssemblyName System.Windows.Forms
        $tb = New-Object System.Windows.Forms.TextBox
        $tb.Multiline = $true
        $tb.Paste()
        $tb.Text
    }
    
    
    function Set-ClipBoard() {
        Param(
          [Parameter(ValueFromPipeline=$true)]
          [string] $text
        )
        Add-Type -AssemblyName System.Windows.Forms
        $tb = New-Object System.Windows.Forms.TextBox
        $tb.Multiline = $true
        $tb.Text = $text
        $tb.SelectAll()
        $tb.Copy()
    }