获取当前进程会话ID的代码:
function GetCurrentSessionID: Integer;
type
  TProcessIdToSessionId = function(dwProcessId: DWORD; pSessionId: DWORD): BOOL; stdcall; 
var 
  ProcessIdToSessionId: TProcessIdToSessionId;
  Lib : THandle;
  pSessionId : DWord; 
begin
  Result := 0; 
  Lib := GetModuleHandle('kernel32'); 
  if Lib <> 0 then 
  begin 
    ProcessIdToSessionId := GetProcAddress(Lib, 'ProcessIdToSessionId');
    if Assigned(ProcessIdToSessionId) then 
    begin 
      ProcessIdToSessionId(GetCurrentProcessId(), DWORD(@pSessionId)); 
      Result:= pSessionId; 
    end; 
  end; 
end; 这段代码贴到远程登录的机器中,执行,返回总是零,什么原因,如果解决,知道的朋友,给个Delphi代码的解决方案,谢谢,解决在加100分,分不够可以再加

解决方案 »

  1.   

    远程桌面属于微软终端服务(Windows Terminal Services),需要使用由其提供的API(封装在WtsApi32.dll中),你可以搜索一下。有个Delphi版本的pas文件。加分最好不过了,哈哈!
      

  2.   

    不是这个WtsApi32.dll的api只能操作当前SessionId(本机直接登录的通常为0)的进程!
      

  3.   

    谢谢楼上的回答,请问:  远程桌面登录机器中获取当前进程的会话ID为什么是零? 请给出Delphi代码,WTSAPI JEDI有PAS Header的声明,但我不需要这个,这个似乎和我的问题无关
      

  4.   

    经过试验,我理解的是错误的!可以获取到 正确的 SessionId !楼主如果还有疑问,希望能进一步探讨你的使用方式!
      

  5.   

    A是我机器,B是被登录机器,A中打开远程桌面,输入B机器的地址,输入管理员和密码登录,B中运行写的程序,弹出SessionID是0,说的很明白了吧?你经过试验,可以获取,请贴出你的Delphi代码,谢谢
      

  6.   

    我就是用的你的代码!procedure TForm1.Button1Click(Sender: TObject);
    var
      ASessionId: DWORD;  function GetCurrentSessionID: Integer;
      type
        TProcessIdToSessionId = function(dwProcessId: DWORD; pSessionId: DWORD): BOOL; stdcall;
      var
        ProcessIdToSessionId: TProcessIdToSessionId;
        Lib : THandle;
        pSessionId : DWord;
      begin
        Result := 0;
        Lib := GetModuleHandle('kernel32');
        if Lib <> 0 then
        begin
          ProcessIdToSessionId := GetProcAddress(Lib, 'ProcessIdToSessionId');
          if Assigned(ProcessIdToSessionId) then
          begin
            ProcessIdToSessionId(GetCurrentProcessId(), DWORD(@pSessionId));
            Result:= pSessionId;
          end;
        end;
      end;
    begin
      ASessionId := GetCurrentSessionID ;
      ShowMessage(format('GetCurrentSessionID : %x',[ASessionId]));
    end;
      

  7.   

    B中运行写的程序?是不是指B服务器上运行着一个程序,当A登录后获取SessionID?
    不是通过远程桌面登录后运行程序吗?
    你是不是要监视登录情况?
      

  8.   

    我使用的方式,程序在B服务器上放着,A登录B然后在远程桌面中运行这个程序!能够成功获取当前我这个用户登录的SessionID,非0
      

  9.   

    真是奇怪了,首先B处于开机状态A登录到B, 然后从A复制程序C到B,然后在B里面打开程序C,然后点C上的按钮,SessionID居然是0,郁闷
      

  10.   

    ‘在B里面打开程序C’:是通过远程桌面还是直接在B中运行?如果是后者,肯定是0