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
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
Okay hab ihn jetzt außerhalb registriert und gleicher Fehler.
Kannst du mir Helfen der Fehler kommt übrigens beim funktionsaufruf service.lockMouse()
Gruß Frisch12
Damit ich Dir helfen kann, brauche ich die Remoting-Konfiguration des Servers. Wie sieht die aus?
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
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.
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
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.