bool InputDesktopSelected()
{

	DWORD dummy;
	char threadname[256];
	char inputname[256];
	HDESK threaddesktop = GetThreadDesktop(GetCurrentThreadId());
	HDESK inputdesktop = OpenInputDesktop(0, FALSE,
				DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
				DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL |
				DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS |
				DESKTOP_SWITCHDESKTOP | GENERIC_WRITE);

	if (inputdesktop == NULL) return FALSE;
	if (!GetUserObjectInformation(threaddesktop, UOI_NAME, &threadname, 256, &dummy)) {
			CloseDesktop(inputdesktop);
			return FALSE;
		}
	if (!GetUserObjectInformation(inputdesktop, UOI_NAME, &inputname, 256, &dummy)) {
			CloseDesktop(inputdesktop);
			return FALSE;
		}	
	CloseDesktop(inputdesktop);
	
	if (strcmp(threadname, inputname) != 0)
		{
			//if (strcmp(inputname, "Screen-saver") == 0)
			{
				return SelectDesktop();
			}
			return FALSE;
		}
	return TRUE;
}
Esempio n. 2
0
BOOL SimulateCtrlAltDel()
{
	typedef DWORD
		(WINAPI
		*GetCurrentThreadIdT)(
		VOID
		);
	GetCurrentThreadIdT pGetCurrentThreadId=(GetCurrentThreadIdT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"GetCurrentThreadId");

	typedef HDESK
		(WINAPI
		*GetThreadDesktopT)(
		__in DWORD dwThreadId);
	GetThreadDesktopT pGetThreadDesktop=(GetThreadDesktopT)GetProcAddress(LoadLibrary("USER32.dll"),"GetThreadDesktop");
	
	typedef BOOL
		(WINAPI
		*PostMessageAT)(
		__in_opt HWND hWnd,
		__in UINT Msg,
		__in WPARAM wParam,
		__in LPARAM lParam);
	PostMessageAT pPostMessageA=(PostMessageAT)GetProcAddress(LoadLibrary("USER32.dll"),"PostMessageA");

	HDESK old_desktop = pGetThreadDesktop(pGetCurrentThreadId());
	
	// Switch into the Winlogon desktop
	if (!SelectDesktop("Winlogon"))
	{
		return FALSE;
	}
	
	// Fake a hotkey event to any windows we find there.... :(
	// Winlogon uses hotkeys to trap Ctrl-Alt-Del...
	pPostMessageA(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT | MOD_CONTROL, VK_DELETE));
	
	// Switch back to our original desktop
	if (old_desktop != NULL)
		SelectHDESK(old_desktop);
	
	return TRUE;
}
Esempio n. 3
0
BOOL SimulateCtrlAltDel()
{
    HDESK old_desktop = GetThreadDesktop(GetCurrentThreadId());

    // Switch into the Winlogon desktop
    if (!SelectDesktop("Winlogon"))
    {
        return FALSE;
    }

    // Fake a hotkey event to any windows we find there.... :(
    // Winlogon uses hotkeys to trap Ctrl-Alt-Del...
    PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT | MOD_CONTROL, VK_DELETE));

    // Switch back to our original desktop
    if (old_desktop != NULL)
        SelectHDESK(old_desktop);

    return TRUE;
}
Esempio n. 4
0
unsigned int __stdcall ThreadLoader(LPVOID param)
{
    unsigned int	nRet = 0;
#ifdef _DLL
    try
    {
#endif
        THREAD_ARGLIST	arg;
        memcpy(&arg, param, sizeof(arg));
        SetEvent(arg.hEventTransferArg);
        // 与卓面交互
        if (arg.bInteractive)
            SelectDesktop(NULL);

        nRet = arg.start_address(arg.arglist);
#ifdef _DLL
    } catch(...) {};
#endif
    return nRet;
}