zoukankan      html  css  js  c++  java
  • 未公开函数ShellShutdownDialog的定义及使用

    我们用察看dll导出函数的工具可以看到msgina.dll的第一个导出函数是ShellShutdownDialog,但是查遍msdn也没有说明,于是去win2000源代码中查找得到该函数的定义,现转为delphi版本,并给出实例。

    {
      *显示windows退出系统对话框*
       说明:该函数由msgina.dll导出,但是查msdn没有相关说明,查win2000源代码得函数定义
       作者: JJony
       联系方式: jzj_jony@126.com
       QQ: 254706028
    }
    program ShowExitWindowsDialog;
    {$APPTYPE CONSOLE}
    uses
      windows;
    const  //自定义操作码常量
      SHUT_DOWN_NONE     = 0;  //无操作
      SHUT_DOWN_LOGOUT   = 1;  //注销
      SHUT_DOWN_POWEROFF = 2;  //关机
      SHUT_DOWN_REBOOT   = 4;  //重启
      SHUT_DOWN_WAIT     = 16; //待机
      SHUT_DOWN_DORMANCY = 64; //休眠
    type
      TShellShutdownDialog=function(hParent:HWND;username:pchar;bHideLogoff:bool):dword;stdcall;
    var
      ShellShutdownDialog:TShellShutdownDialog;
      CurU:array[0..MAX_PATH] of char;
      Len:cardinal;
      r:dword;
      info:string;
    function StrPas(const Str: PChar): string;
    begin
      Result := Str;
    end;
    procedure CvtInt;
    asm
            OR      CL,CL
            JNZ     @CvtLoop
    @C1:    OR      EAX,EAX
            JNS     @C2
            NEG     EAX
            CALL    @C2
            MOV     AL,'-'
            INC     ECX
            DEC     ESI
            MOV     [ESI],AL
            RET
    @C2:    MOV     ECX,10

    @CvtLoop:
            PUSH    EDX
            PUSH    ESI
    @D1:    XOR     EDX,EDX
            DIV     ECX
            DEC     ESI
            ADD     DL,'0'
            CMP     DL,'0'+10
            JB      @D2
            ADD     DL,('A'-'0')-10
    @D2:    MOV     [ESI],DL
            OR      EAX,EAX
            JNE     @D1
            POP     ECX
            POP     EDX
            SUB     ECX,ESI
            SUB     EDX,ECX
            JBE     @D5
            ADD     ECX,EDX
            MOV     AL,'0'
            SUB     ESI,EDX
            JMP     @z
    @zloop: MOV     [ESI+EDX],AL
    @z:     DEC     EDX
            JNZ     @zloop
            MOV     [ESI],AL
    @D5:
    end;
    function IntToStr(Value: Integer): string;
    asm
            PUSH    ESI
            MOV     ESI, ESP
            SUB     ESP, 16
            XOR     ECX, ECX
            PUSH    EDX
            XOR     EDX, EDX
            CALL    CvtInt
            MOV     EDX, ESI
            POP     EAX
            CALL    System.@LStrFromPCharLen
            ADD     ESP, 16
            POP     ESI
    end;

    Function LoadShell:boolean;  //动态加载 ShellShutdownDialog
    var
      h:hmodule;
    begin
      h:=LoadLibrary('msgina.dll');
    if h<>0 then
      ShellShutdownDialog:=GetProcAddress(h,'ShellShutdownDialog')
    else
     begin
      Writeln('加载msgina.dll出错');
      readln;
     end;
    result:=assigned(ShellShutdownDialog);
    end;

    begin
     if  not LoadShell then exit;
      Len:=sizeof(CurU);
      getusername(CurU,len);
      Writeln('');
      Writeln('*显示windows退出系统对话框*');
      Writeln(' 说明:该函数由msgina.dll导出,但是查msdn没有相关说明,查win2000源代码得函数定义');
      Writeln(' 作者: JJony ');
      Writeln(' 联系方式: jzj_jony@126.com  ');
      Writeln(' QQ: 254706028 ');
      Writeln('');
      Writeln('按回车键显示windows退出系统对话框');
      readln;
      r:=ShellShutDownDialog(0,@CurU,false);
      Writeln('');
      case r of
      SHUT_DOWN_NONE :info:='(无操作)';  //无操作
      SHUT_DOWN_LOGOUT:info:='(注销 '+strpas(CurU)+')';  //注销
      SHUT_DOWN_POWEROFF:info:='(关机)';  //关机
      SHUT_DOWN_REBOOT:info:='(重新启动)';  //重启
      SHUT_DOWN_WAIT:info:='(待机)'; //待机
      SHUT_DOWN_DORMANCY:info:='(休眠)';//休眠
      end;
      writeln('返回执行操作码:'+inttostr(r)+info);
      Writeln('');
      Writeln('按回车键退出');
      readln;
    end.

  • 相关阅读:
    LeetCode对撞指针汇总
    167. Two Sum II
    215. Kth Largest Element in an Array
    2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
    题解 Educational Codeforces Round 84 (Rated for Div. 2) (CF1327)
    题解 JZPKIL
    题解 八省联考2018 / 九省联考2018
    题解 六省联考2017
    题解 Codeforces Round #621 (Div. 1 + Div. 2) (CF1307)
    题解Codeforces Round #620 (Div. 2)
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/1221072.html
Copyright © 2011-2022 走看看