Laden...

PC Sperren. Was ist am Code falsch?

Erstellt von Blogscreen vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.281 Views
Blogscreen Themenstarter:in
344 Beiträge seit 2007
vor 16 Jahren
PC Sperren. Was ist am Code falsch?

Hallo, ganz einfaches Problem,
nur finde ich die Lösung nicht.

Möchte gerne den PC Sperren (Windowstaste + L)

CODE:



System.Diagnostics.Process.Start(@"C:\WINDOWS\system32\rundll32.exe user32.dll,LockWorkStation");


Kommt beim anfrufen jedoch Fehlermeldung "Datei nicht gefunden"

Liegt es am "System.Diagnostics.Process.Start" ?

Schöne Grüße

👶-> :]-> 8o-> 🙂

F
722 Beiträge seit 2005
vor 16 Jahren

das liegt daran dass die datei nicht gefunden wurde...
versuch mal anführungsstriche um den pfad von rundll.exe zu setzten.

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo RPlaner,

wird eine Exception geworfen? Oder wird eine Fehlermeldung von rundll32.exe angezeigt?

Was passiert, wenn du das ganze per Start-Ausführen ausführst?

Zum Sperren des PCs solltest du lieber die WinAPI nutzen: http://www.pinvoke.net/default.aspx/user32.LockWorkStation

Ansonsten ist auch der hardgecodete Pfad zum Windows-Verzeichnis nicht gerade ellegant.

L
770 Beiträge seit 2006
vor 16 Jahren

Guck dir mal an, welche Konstruktor du verwendest und welche Möglichkeiten es gibt 🙂 Dann, denke ich, wirst du die Lösung selbst finden 😉

lg Lion

lg Lion

Blogscreen Themenstarter:in
344 Beiträge seit 2007
vor 16 Jahren

Hallo, also vorweg möchte ich API gerne NICHT nutzen. (Systembedingt)

Es kommt eine direkte Ausnahmemeldung beim Klicken auf den Button.
("Datei nicht gefunden")

Konstruktor hab ich mir angeschaut, leider komme ich nicht selber drauf, sonst hätte ich hier nich gepostet 😉

👶-> :]-> 8o-> 🙂

D
89 Beiträge seit 2008
vor 16 Jahren

wäre euch / dir sehr verbunden wenn eine Code-Lösung gepostet wird, danke !

[edit]

kleiner hinweis:

der Pfad , den du mit dem oberen Befehl ausrufst sähe im moment folgendermaßen aus :"C:\WINDOWS\system32\rundll32.exe user32.dll,LockWorkStation"

sollte der befehl nicht eher so aussehen:



System.Diagnostics.Process.Start(@"C:\WINDOWS\system32\rundll32.exe", user32.dll,LockWorkStation);


! REINE VERMUTUNG !

Blogscreen Themenstarter:in
344 Beiträge seit 2007
vor 16 Jahren

Also die API Lösung funktioniert.

Werde mal weiter googeln 🙂

@Dexter: Habe ich auch schon probiert. Gleicher Fehler

👶-> :]-> 8o-> 🙂

D
89 Beiträge seit 2008
vor 16 Jahren

wie sieht denn die API lösung im c# code aus ?

F
722 Beiträge seit 2005
vor 16 Jahren

hallo Dexter323,

deine vermutung war richtig, du hast aber die anführungszeichen vergessen =)


Process.Start("rundll32.exe", "user32.dll, LockWorkStation"); 

Blogscreen Themenstarter:in
344 Beiträge seit 2007
vor 16 Jahren

API LÖSUNG

Hier was gutes:



ProcessStartInfo proc = new ProcessStartInfo();
        proc.FileName = "cmd";
        proc.WindowStyle = ProcessWindowStyle.Hidden;
        proc.Arguments = "/C shutdown " + param;
        Process.Start(proc);





"Param" enthält hier die Parameter was passieren soll:
also z.B. Herunterfahren, Neustarten ...

Suche grad noch die Parameter zum sperren

👶-> :]-> 8o-> 🙂

D
89 Beiträge seit 2008
vor 16 Jahren

danke feadur,

wie gesagt war nu spekuliert^^.... aber fast richtig =)

L
770 Beiträge seit 2006
vor 16 Jahren

Konstruktor hab ich mir angeschaut, leider komme ich nicht selber drauf, sonst hätte ich hier nich gepostet

Dann Tippe mal:

System.Diagnostics.Process.Start(

Und drücke mit den Pfeiltasten rauf und runter.. dann wirst du sehen, dass es ene Überladung gibt, welche lautet (string filename, string parameters). Dann hätte dir wohl klar sein müssen, dass Parameter wohl, wie erwähnt, extra übergeben werden 😉

Sorry, aber das hätte man mit F1 lösen können 😉 Aber jetzt hast du es ja.

lg Lion

lg Lion

871 Beiträge seit 2005
vor 16 Jahren

Hallo,

ich würd das ganze nicht über das starten eines Prozesses machen, sondern mittels P/Invoke:


using System;
using System.Runtime.InteropServices;

public class Locker
{
	[DllImport( "user32.dll" )]
	public static extern void LockWorkStation();
	
	public static void Main()
	{
		LockWorkStation();
	}
}

Ist imho wesentlich eleganter.

Grüsse,
Egon