das Problem ist, dass dieser in einem Service ausgeführt wird. Unter Windows XP klappt das noch, aber ab Windows 7 läuft das nicht mehr. Hat jemand eine Idee, wie man das lösen könnte?
Das steht ja auch in der Dokumentation...
https://msdn.microsoft.com/de-de/lib...or=-2147217396
Zitat:
The LockWorkStation function is callable only by processes running on the interactive desktop. In addition, the user must be logged on, and the workstation cannot already be locked.
Das wirst du auch nicht umgehen können außer indem du im aktiven Userdesktop einen Prozess startest, der das macht.
Im Dienst funktioniert das nicht, weil es auch mehrere interaktive Desktops parallel geben könnte. Das System wüsste also nicht welche es sperren sollte.
// EDIT:
CreateProcessAsUser kannst du in Delphi einfach aufrufen, das gibt es in der
Unit Windows schon.
Alternativ kannst du evtl. auch alle Sessions enumerieren (WTSEnumerateSessions) und trennen (WTSDisconnectSession), aber ich weiß nicht, ob das auch ohne RDP funktioniert.