When sometime, you need to spend so much time to figure out the actual problem and the solution to fix that. Your process will need special privileges to do this I'm not sure that even running as Administrator is enough.Possible Solutions to Troubleshoot Lock Screen Errorīeing a popular operating system among more than 70 million people of this world, Windows 10 is started showing some errors those can be handled smoothly sometime. Since you don't have control over threads or over process initialization, you will probably have to create a new process in the other desktop (you can do this using the CreateProcess API, which appears to have a wrapper available for AHK to which you can supply a desktop name: ). Unfortunately, this is already difficult for a regular privileged application, and using AutoHotkey complicates it even more. SetThreadDesktop would probably be the easiest way to do that in C, as long as the desktop isn't on a different window station. In order to access a desktop, you will need to use the regular windows api's from a thread that is on that desktop. The MSDN section on window stations should hopefully be useful: I don't know the details, but I believe the lock screen constitutes a separate "desktop" and maybe also a separate "window station" (as I understand it a window station is merely a container for desktops). This is one way to create a "connected" session with an active desktop, but one that no-one can interfere with, because it's protected behind the locked desktop of the Main machine. Now the cool part: you can minimize that TSC window, or even lock the Main machine (or let the screensaver kick in), and that virtual session will continue working, thinking that it is still active - it's just that nobody is paying it any attention. One solution is to use two PCs: let's call them Main and Test: from Main, open a remote terminal services client onto the Test machine, and then run the automated test on the test machine, but from a terminal services client window on the Main machine. A similar issue happens if the screensaver kicks in: the desktop switches, and the automation fails. Once you lock the PC, the desktop is inactive, and so the automation stops working. One issue that I've run into in the past with desktops and automation is: how to I leave a long-running test that's using some form of user input automation (mouse, keyboard simulation), but still lock my PC so that someone can't just walk by and interfere with it. This won't work at all for keyboard input when a desktop is inactive.įor a reasonable overview of how desktops work and how they relate to winstations, the locked desktop, and so on, check out the Desktop article on MSDN. I'm not super familiar with AutoHotKey, but the name and description of functionality suggests that it's heavily reliant on the underlying Win32 SendInput API. In short, the UI is still there: you can do certain queries against it, but you can no longer automate it as you could on a regular desktop by sending input, and some other functions that relate to focus or input may fail. (This can be problematic for controls that set up some sort of input context in WM_SETFOCUS and clear it up in WM_KILLFOCUS, for example.) Note that sending keypress messages to a control that doesn't have focus can sometimes cause unexpected behavior, since the app or control generally never expects to receive keyboard input without getting the focus first. GetForegroundWindow will return NULL (IIRC), and you can't use SendInput any longer, since input now belongs to a different desktop no controls on that inactive desktop can receive focus. However, since the desktop is now inactive, it cannot receive input. You can still send messages to windows on this desktop, so long as the thread sending the message is also on that desktop. The old desktop remains where it was: all the HWNDs on the desktop are still there, and any thread attached to that desktop can still access those HWNDs, get their location, and so on. Basically what happens is that Windows switches to the secure desktop, makes it the current one, so input is now associated with it.
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |