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!
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
@Adrian Das Referenzieren einer Assembly ist nicht das Gleiche wie das Hinzufügen einer 'using'-Direktive zu einer .cs-Datei. –
@EdPlunkett True, obwohl dies eine PowerShell-Datei ist, keine C# -Datei. Ich habe eine Antwort mit ein paar besseren Informationen hinzugefügt. – Adrian