[Delphi] Определение полного захода в Steam

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
Darth Revan
Майор
Майор
Сообщения: 784
Зарегистрирован: 30.09.2008
Поблагодарили: 1 раз
Контактная информация:

#31 Сообщение 12.07.2010, 13:27

Code

Код: Выделить всё

interface

const
  STEAM_MAX_PATH = 255;

type
  eDetailedPlatformErrorType = (eNoDetailedErrorAvailable, eStandardCerrno,
    eWin32LastError, eWinSockLastError, eDetailedPlatformErrorCount);
  eSteamError = (eSteamErrorNone = 0, eSteamErrorUnknown = 1,
    eSteamErrorLibraryNotInitialized = 2,
    eSteamErrorLibraryAlreadyInitialized = 3, eSteamErrorConfig = 4,
    eSteamErrorContentServerConnect = 5, eSteamErrorBadHandle = 6,
    eSteamErrorHandlesExhausted = 7, eSteamErrorBadArg = 8,
    eSteamErrorNotFound = 9, eSteamErrorRead = 10,
    eSteamErrorEOF = 11, eSteamErrorSeek = 12,
    eSteamErrorCannotWriteNonUserConfigFile = 13, eSteamErrorCacheOpen = 14,
    eSteamErrorCacheRead = 15, eSteamErrorCacheCorrupted = 16,
    eSteamErrorCacheWrite = 17, eSteamErrorCacheSession = 18,
    eSteamErrorCacheInternal = 19, eSteamErrorCacheBadApp = 20,
    eSteamErrorCacheVersion = 21, eSteamErrorCacheBadFingerPrint = 22,
    eSteamErrorNotFinishedProcessing = 23, eSteamErrorNothingToDo = 24,
    eSteamErrorCorruptEncryptedUserIDTicket = 25,
    eSteamErrorSocketLibraryNotInitialized = 26,
    eSteamErrorFailedToConnectToUserIDTicketValidationServer = 27,
    eSteamErrorBadProtocolVersion = 28,
    eSteamErrorReplayedUserIDTicketFromClient = 29,
    eSteamErrorReceiveResultBufferTooSmall = 30, eSteamErrorSendFailed = 31,
    eSteamErrorReceiveFailed = 32,
    eSteamErrorReplayedReplyFromUserIDTicketValidationServer = 33,
    eSteamErrorBadSignatureFromUserIDTicketValidationServer = 34,
    eSteamErrorValidationStalledSoAborted = 35,
    eSteamErrorInvalidUserIDTicket = 36,
    eSteamErrorClientLoginRateTooHigh = 37,
    eSteamErrorClientWasNeverValidated = 38,
    eSteamErrorInternalSendBufferTooSmall = 39,
    eSteamErrorInternalReceiveBufferTooSmall = 40,
    eSteamErrorUserTicketExpired = 41,
    eSteamErrorCDKeyAlreadyInUseOnAnotherClient = 42,
    eSteamErrorNotLoggedIn = 101, eSteamErrorAlreadyExists = 102,
    eSteamErrorAlreadySubscribed = 103, eSteamErrorNotSubscribed = 104,
    eSteamErrorAccessDenied = 105, eSteamErrorFailedToCreateCacheFile = 106,
    eSteamErrorCallStalledSoAborted = 107, eSteamErrorEngineNotRunning = 108,
    eSteamErrorEngineConnectionLost = 109, eSteamErrorLoginFailed = 110,
    eSteamErrorAccountPending = 111, eSteamErrorCacheWasMissingRetry = 112,
    eSteamErrorLocalTimeIncorrect = 113, eSteamErrorNetwork = 200);
  pSteamError = ^TSteamError;

  TSteamError = record
    eSteamError: eSteamError;
    eDetailedErrorType: eDetailedPlatformErrorType;
    nDetailedErrorCode: integer;
    ErrDescription: pChar;
    szDesc: array [0 .. (STEAM_MAX_PATH - 1)] of char;
  end;

function IsSteamLogin: ShortInt;

implementation

function IsSteamLogin: ShortInt;
var
  pbIsLoggedIn: integer;
  pError: TSteamError;
  SteamDll: Hmodule;
  SteamIsLoggedIn: function(pbIsLoggedIn: pInteger;
    pError: pSteamError): integer;
cdecl;
begin
  Result := -1;
  pbIsLoggedIn := 0;
  SteamDll := LoadLibrary('Steam.dll');
  if SteamDll <> 0 then
  begin
    try
      @SteamIsLoggedIn := GetProcAddress(SteamDll, 'SteamIsLoggedIn');
      if @SteamIsLoggedIn <> nil then
      begin
        Result := SteamIsLoggedIn(@pbIsLoggedIn, @pError);
      end;
    finally
      FreeLibrary(SteamDll);
    end;
  end;
end;
Сделал вот так. Но он мне выдаёт 0 с работающим Steam.

Аватара пользователя
zhenya93
Майор
Майор
Сообщения: 529
Зарегистрирован: 24.04.2009
Контактная информация:

#32 Сообщение 26.07.2010, 21:34

По заголовку активного окна
steam - %если тут что-то есть, значит вход выполнен%
Это на крайний случай, самый последний вариант...
А HL3 выйдет (или анонсируют) в 2013. Инфа 99% (2013 содержит число 3) Да и давно пора!
Изображение

Аватара пользователя
Darth Revan
Майор
Майор
Сообщения: 784
Зарегистрирован: 30.09.2008
Поблагодарили: 1 раз
Контактная информация:

#33 Сообщение 26.07.2010, 21:50

zhenya93
Случай уж слишком отчаянный.
Не люблю писать настолько опасно в частных случаях.

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#34 Сообщение 26.07.2010, 23:50

Darth Revan
Ты запускал свой софт отдельно от стима? я имею ввиду стим запустил патом запустил то что выше написал, в отдельном процессе от steam.exe?
Такая тема врядли прокатит, нужно юзать пайпы я в них не шарю, но думаю есть ещё один способ.....

Аватара пользователя
Darth Revan
Майор
Майор
Сообщения: 784
Зарегистрирован: 30.09.2008
Поблагодарили: 1 раз
Контактная информация:

#35 Сообщение 27.07.2010, 00:08

eldest
Отдельно. Я думаю на тем, чтобы сделать в одном процессе.

Ответить