Q&A

  • LAN 에서 다른컴퓨터 종료시킬려면?
안녕하세요 정말종은 사이트 같습니다.

NT4.0을 쓰구요 LAN으로컴퓨터3대를 연결했습니다.

A컴퓨터에서 B컴퓨터를 종료 하거나 리부팅 시킬려고 하는데 어떻게 하면

되나요?

또 한가지 질문 있습니다.

사용하고있는 사용자 ID와 비밀번호(로그오프 할때의) 를 델파이로 불러 오려

면 어떻게 하나요?

좋은 시간되십시오/









1  COMMENTS
  • Profile
    구창민 1999.07.13 08:53
    김도진 께서 말씀하시기를...

    > 안녕하세요 정말종은 사이트 같습니다.

    > NT4.0을 쓰구요 LAN으로컴퓨터3대를 연결했습니다.

    > A컴퓨터에서 B컴퓨터를 종료 하거나 리부팅 시킬려고 하는데 어떻게 하면

    > 되나요?

    > 또 한가지 질문 있습니다.

    > 사용하고있는 사용자 ID와 비밀번호(로그오프 할때의) 를 델파이로 불러 오려

    > 면 어떻게 하나요?

    > 좋은 시간되십시오/

    >

    >

    김도진님 안녕하세요?

    접속해 들어간 PC(Windows95, 98, NT)를 재부팅 시키시려면,

    서버, 즉 통신을 할 모듈이 어떤 형태로든 C/S로 나뉘어 져

    서버측에 상시 대기형태로 실행 되어 있어야 할 거 같습니다.



    사용자가 정의한 시스템 재시작을 요구하는 데이타(문자열)를

    보내면 그때 아래 윈도우 종료함수를 실행하시면 됩니다.

    윈도우 95, 98의 종료 API함수로는 아래 다섯가지가 있으며,



    ExitWindowsEx(EWX_FORCE, 0); //강제종료

    ExitWindowsEx(EWX_LOGOFF, 0); //LOG OFF

    ExitWindowsEx(EWX_POWEROFF,0); //Shut Down & Turn Off

    ExitWindowsEx(EWX_REBOOT, 0); //Shut Down & Reboot

    ExitWindowsEx(EWX_SHUTDOWN, 0); //ShutsDown



    NT에서는 위의 함수가 제대로 수행되지 않으므로

    아래 내용을 사용하시면 NT에서 시스템을 종료

    시키실수 있을 것입니다.

    그럼 즐거운 프로그래밍 되시길~



    var

    PreviosPrivileges : ^TTokenPrivileges;

    TokenPrivileges : TTokenPrivileges;

    ProcessHandle : THandle;

    tmp : Integer;

    begin

    if not OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,ProcessHandle ) then

    Exit;



    LookupPrivilegeValue( '', 'SeShutdownPrivilege', TokenPrivileges.Privileges[0].Luid );

    TokenPrivileges.PrivilegeCount := 1;

    TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

    tmp := 0;

    PreviosPrivileges := nil;

    AdjustTokenPrivileges(ProcessHandle, False, TokenPrivileges, 0, PreviosPrivileges^, tmp);

    if not GetLastError()=ERROR_SUCCESS then

    Exit;

    if not InitiateSystemShutdown( '', '', 0, True, True ) then

    Exit;

    TokenPrivileges.Privileges[0].Attributes := 0;

    AdjustTokenPrivileges( ProcessHandle, False, TokenPrivileges, 0,PreviosPrivileges^, tmp );

    end;