package require twapi
package require registry
# service name
set servicename TkCon
# registry for actual service
set reg "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\$servicename"
# create service
twapi::create_service $servicename \
C:\\tcl\\bin\\srvany.exe \
-interactive 1 -starttype demand_start \
-displayname "Tk Console"
# set up parameters for srvany
registry set "$reg\\Parameters" Application \
"C:\\tcl\\bin\\wish.exe"
registry set "$reg\\Parameters" AppParameters \
"C:/tcl/bin/tkcon.tcl"
# start TkCon service
twapi::start_service $servicename
exit 0
% package require twapi ; puts [::twapi::get_current_user]
SYSTEM
package require Thread
set tid [thread::create -desktop Winlogon]
thread::send $tid {::twapi::lock_workstation
after 1000
set h [twapi::find_windows -toplevel 1 -visible 1 -single]
twapi::hide_window $h
after 1000
twapi::show_window $h
}
thread::send $tid {
package require Tk ; wm withdraw .
::twapi::lock_workstation
after 100
set ::h [twapi::find_windows -toplevel 1 -visible 1 -single]
twapi::hide_window $h
while {[tk_messageBox -message "Do you want to unlock your computer?" \
-type yesno] != "yes"} {}
twapi::show_window $h
proc randommove {} {
catch {
twapi::move_window $::h \
[expr {(([winfo pointerx .] + 400) % [winfo screenwidth .])}] \
[expr {(([winfo pointery .] + 400) % [winfo screenheight .])}]
after 500 randommove
}
}
randommove
}