LockWorkStation для NT
- From
- Igor Vartanov (2:5025/38.70)
- To
- Oleg Bekhter
- Date
- 2002-03-11T14:42:12Z
- Area
- SU.WINDOWS.NT.PROG
Здравствуй, Oleg!
Thursday March 07 2002 Oleg Bekhter сообщил Алексей Мамонов:
OB> Как сделать это на NT я в старые добрые времена так и не нашел...
OB> Пришлось делать через ScreenSaver с паролем.
На самом деле все просто нужно делать руками - создать десктоп, переключиться на него и ждать правильного события (напр. горячей клавиши или правильного пароля :)), после чего отыграть назад.
────────────────────[ Begin of Windows Clipboard ]────────────────────
BOOL CALLBACK LockedDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
static ATOM aUnlock = GlobalAddAtom( _T("IV_UnlockDesktop") );
switch(msg)
{
case WM_INITDIALOG:
RegisterHotKey( hDlg, aUnlock, MOD_CONTROL | MOD_SHIFT, 'V' );
break;
case WM_HOTKEY:
UnregisterHotKey( hDlg, aUnlock );
GlobalDeleteAtom( aUnlock );
EndDialog( hDlg, 0 );
break;
}
return 0;
}
typedef struct tagDESKS
{
HDESK deskGetBack;
HDESK deskSwitchTo;
} DESKS, *PDESKS;
UINT WINAPI LockWStaThread( LPVOID pParam )
{
PDESKS pdesks = (PDESKS)pParam;
if( !SetThreadDesktop( pdesks->deskSwitchTo ) ||
!SwitchDesktop( pdesks->deskSwitchTo ) )
{
CLastErrCodeMsg err;
MessageBox( NULL, err.GetString(), _T("SwitchDesktop"), MB_OK );
}
else
{
DialogBox(GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDD_UNLOCK ),
HWND_DESKTOP,
(DLGPROC)LockedDlgProc );
SwitchDesktop( pdesks->deskGetBack );
}
CloseDesktop( pdesks->deskSwitchTo );
delete pdesks;
return 0;
}
void LockWorkstation()
{
PDESKS pdesks = new DESKS;
pdesks->deskGetBack = GetThreadDesktop( GetCurrentThreadId() );
pdesks->deskSwitchTo = CreateDesktop(
_T("IV_LockedDesktop"),
NULL, NULL, 0,
DESKTOP_CREATEWINDOW |
DESKTOP_SWITCHDESKTOP |
DESKTOP_READOBJECTS |
DESKTOP_WRITEOBJECTS,
NULL );
if( !pdesks->deskSwitchTo )
{
CLastErrCodeMsg err;
MessageBox( NULL, err.GetString(), _T("CreateDesktop"), MB_OK );
}
else
{
UINT thrId;
CloseHandle( (HANDLE) _beginthreadex(
NULL, 0, LockWStaThread,
pdesks, NULL, &thrId ) );
}
}
────────────────────[ End of Windows Clipboard ]────────────────────
С уважением.
Игорь
--- mailto: ivartanov@rsdn.ru ( http://www.rsdn.ru )
* Origin: Uh? (2:5025/38.70)