2017-06-01 3 views
-1

Versuchen zu fangen, wenn der Bildschirm gesperrt ist und einen Ausschnitt von C# gefunden, der das scheinbar erreicht, aber jedes Mal, wenn ich versuche, in PowerShell zu integrieren, bekomme ich ein paar verschiedene Fehler:Fehler beim Versuch, C# von PowerShell auszuführen: Ungültiges Token "Verwendung" in

$Assemblies = @('System', 'System.Messaging') 

$type = @" 
using System; 
using System.Messaging; 

public class Win32Session 
{ 
    private const int NOTIFY_FOR_THIS_SESSION = 0; 
    private const int WM_WTSSESSION_CHANGE = 0x2b1; 
    private const int WTS_SESSION_LOCK = 0x7; 
    private const int WTS_SESSION_UNLOCK = 0x8; 

    public event EventHandler MachineLocked; 
    public event EventHandler MachineUnlocked; 

    public Win32Session() 
    { 
     ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage; 
    } 

    void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled) 
    { 
     if (msg.message == WM_WTSSESSION_CHANGE) 
     { 
      int value = msg.wParam.ToInt32(); 
      if (value == WTS_SESSION_LOCK) 
      { 
       OnMachineLocked(EventArgs.Empty); 
      } 
      else if (value == WTS_SESSION_UNLOCK) 
      { 
       OnMachineUnlocked(EventArgs.Empty); 
      } 
     } 
    } 

    protected virtual void OnMachineLocked(EventArgs e) 
    { 
     EventHandler temp = MachineLocked; 
     if (temp != null) 
     { 
      temp(this, e); 
     } 
    } 

    protected virtual void OnMachineUnlocked(EventArgs e) 
    { 
     EventHandler temp = MachineUnlocked; 
     if (temp != null) 
     { 
      temp(this, e); 
     } 
    } 
} 
"@ 

Add-Type -MemberDefinition $type -Name 'Eventing' -ReferencedAssemblies $Assemblies 

... wenn ich die ‚Verwendung‘ Aussagen im Heredoc verlassen, erhalte ich eine Fehlermeldung über ‚mit‘ ist ein ungültiges Token. Wenn ich die 'using'-Anweisungen entferne und erneut laufe, beschwert sich der Compiler darüber, dass er nicht weiß, was der MSG-Typ ist. Kann jemand helfen? Danke!

+0

Die Verwendung ist ungültig (dafür gibt es "-ReferencedAssemblies"). Ich weiß auch nicht, was der MSG-Typ ist - es ist in keiner der referenzierten Assemblys definiert. – Adrian

+0

@Adrian Das Referenzieren einer Assembly ist nicht das Gleiche wie das Hinzufügen einer 'using'-Direktive zu einer .cs-Datei. –

+0

@EdPlunkett True, obwohl dies eine PowerShell-Datei ist, keine C# -Datei. Ich habe eine Antwort mit ein paar besseren Informationen hinzugefügt. – Adrian

Antwort

2

Sie können die -UsingNamespace parameter verwenden, um den Zweck, den eine using Direktive in einer C# -Datei wäre. Der Typ MSG scheint jedoch in den referenzierten Namespaces nicht definiert zu sein.

Verwandte Themen