Laden...

Tastatur/Maus Sperre

Erstellt von Frisch12 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.538 Views
F
Frisch12 Themenstarter:in
96 Beiträge seit 2009
vor 14 Jahren
Tastatur/Maus Sperre

Hi Leute,

Habe mir ein kleines Programm geschreiben um die eingaben auf einem Anderen Rechner zu unterbinden.

Hier Der Code:


[DllImport("user32.dll")]
public static extern bool BlockInput(bool fBlockIt);
public void lockMouse()
{
Form1 frm = new Form1();
((Form1)frm).Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(Cursor.Position.X - 0, Cursor.Position.Y - 0);
Cursor.Clip = new Rectangle(Cursor.Position, new Size(1, 1));
}
public void unlockMouse()
{
Form1 frm = new Form1();
((Form1)frm).Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(Cursor.Position.X - 0, Cursor.Position.Y - 0);
Cursor.Clip = new Rectangle(new Point(0,0), new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
}
public void lockKeyboard()
{
BlockInput(false);
}
public void unlockKeyboard()
{
BlockInput(true);
}
public void lockAll()
{
lockMouse();
lockKeyboard();
}
public void unlockAll()
{
unlockMouse();
unlockKeyboard();
}


//in einem Anderen Programm wird dieser Code bei einem knopfdruck ausgeführt.
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan, false);
IService service = (IService)Activator.GetObject(typeof(IService), "tcp://localhost:21402/LL/S");
service.lockKeyboard();
service.lockMouse();
ChannelServices.UnregisterChannel(chan);

nur wenn ich versuche auf die funktion lockMouse() zuzugreifen gekomme ich diesen Fehler:

Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden Wie kann ich das Beheben???PS: die funktionen liegen unter einem Anderen Namespace der eingebunden wird und auf dem Entfertem rechner ist ebenfalls ein Server Instaliert mit diesen Funktionen und dem TCP channel 21402 mit der TCP-Adresse "tcp://localhost:21402/LL/S". (Hier Localhost da ich es noch Teste)Gruß Frisch12

3.728 Beiträge seit 2005
vor 14 Jahren
Kanalregistrierung

Hallo Frisch12,

Du darfst den Kanal nicht bei jedem Knopfdruck registrieren. Der Kanal wird bei Programmstart oder bei der Ersten Verwendung nur EIN Mal registriert.

Hier findest Du eine funktionierende Remoting-Implementierung, die Dir nützlich sein könnte: Remoting-Helfer

F
Frisch12 Themenstarter:in
96 Beiträge seit 2009
vor 14 Jahren

Okay hab ihn jetzt außerhalb registriert und gleicher Fehler.

Kannst du mir Helfen der Fehler kommt übrigens beim funktionsaufruf service.lockMouse()

Gruß Frisch12

3.728 Beiträge seit 2005
vor 14 Jahren
Remoting-Konfiguration

Damit ich Dir helfen kann, brauche ich die Remoting-Konfiguration des Servers. Wie sieht die aus?

F
Frisch12 Themenstarter:in
96 Beiträge seit 2009
vor 14 Jahren

Was, Wie, Wer, Wo??

Ich versteh nur bahnhof meinst du das villeicht???


int can = 0;
can = 21402;
TcpChannel chan = new TcpChannel(can);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
RemotingConfiguration.ApplicationName = "LL";
RemotingConfiguration.RegisterWellKnownServiceType(typeof(LLRemote), "S", WellKnownObjectMode.SingleCall);

Gruß Frisch12

3.728 Beiträge seit 2005
vor 14 Jahren
Sicherheit

Die Fehlermeldung deutet aber darauf hin, dass der TCP-Port 21402 bereits durch eine andere Anwendung belegt ist. Du kannst das durch Eingabe von netstat an der Konsole überprüfen. Probier aber mal eine andere Portnummer aus.

Du hast am Server vergessen, die Sicherheit auszuschalten. Bei RegisterChannel musst Du dazu im zweiten Parameter (secure) den Wert false übergeben. Damit würde die Anwendung als nächstes auf die Nase fallen.

F
Frisch12 Themenstarter:in
96 Beiträge seit 2009
vor 14 Jahren

So habe alles so abgeändert wie du gesagt hast und es geht leider immer noch nicht.

Habe mal als anhang ein screenshot drangehängt.

Die Funktion bei der das Passier ist diese Hier:


public void lockMouse()
{
Form1 frm = new Form1();
((Form1)frm).Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(Cursor.Position.X - 0, Cursor.Position.Y - 0);
Cursor.Clip = new Rectangle(Cursor.Position, new Size(1, 1));
}

Gruß Frisch12

643 Beiträge seit 2006
vor 14 Jahren

Das hatte ich auf mal. Der Port war frei und bekam trozdem die Fehlermeldung. Habe mein Projekt und Namespace unbenannt sodas ich beim Server und Client den selben Namen haben. Dannach hatte es funktioniert.