• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 490
  • Last Modified:

Lock the workstation on a windows machine

hi,

i'm trying to come by some code to help me lock the workstation from the program i'm developing for windows machines (2000 and xp)

i know there is an API, but i think i don't have it, for example i tried this:
#include <windows.h>
#include <stdio.h>
int main()
{
                        if(!LockWorkStation())
                                  printf ("error: could not lock workstation:  %d\n", GetLastError());
                        return 0;
}

according to msdn LockWorkStation() is included on windows.h, but not VC 5, nor GCC (mingw or cygwin) can find it.

another thing i tried is to find something similar to this:

SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);

that will lock the workstation by activating the screensaver. everything is fine, only i just want to lock the computer without the screensaver. so maybe there is a parameter other than SC_SCREENSAVE that i can pass onto SendMessage.

the last thing i know of is the rundll trick of locking the Workstation by calling user32.dll or something, but again, there must be a better way

any ideas?

any help will be appreciated.
0
urif
Asked:
urif
  • 3
1 Solution
 
Mic77Commented:
To make the work, you need a newer SDK which contains the header and lib-files.
You need install VC7 or try this one

http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
0
 
urifAuthor Commented:
hmmm, thanks but i dont think that installing a 266mb sdk for one function is a solution. at least not at this point.

thanks so much anyway

any other ideas?
0
 
jkrCommented:
>>any other ideas?

Load the entrypoint dynamically:

typedef BOOL (*FPTR_LockWorkStation)(VOID);

HINSTANCE hDll = LoadLibrary( "user32.dll");

FPTR_LockWorkStation pLockWorkStation = (FPTR_LockWorkStation) GetProcAddress (hDll,"LockWorkStation");

_LockWorkStation();

FreeLibrary (hDll);
0
 
urifAuthor Commented:
it still returns as undeclared identifier: _LockWorkStation();
0
 
urifAuthor Commented:
ok for anyone that searched the solution:

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <winuser.h>

so you only have to add winuser.h


cheers!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Has Powershell sent you back into the Stone Age?

If managing Active Directory using Windows Powershell┬« is making you feel like you stepped back in time, you are not alone.  For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now