BOOL CVNetCafeDlg::LaunchSteam(LPCTSTR pszSteamDir, LPCTSTR pszLaunchPath, LPCTSTR pszUserName, LPCTSTR pszPassword, int nGuid)
{
CString csCommandLine;
BOOL fRC = FALSE;
CString csTemp;
csCommandLine = pszLaunchPath;
csCommandLine += _STEAM_LOGIN; //" -login ";
csCommandLine += pszUserName;
csCommandLine += " ";
csCommandLine += pszPassword;
csCommandLine += _STEAM_SILENT; //" -silent";
csCommandLine += _STEAM_DEV; //" -dev";
if ( nGuid >= 0 )
{
csTemp.Format( "%s %d ", _STEAM_APPLAUNCH, nGuid );
// csCommandLine += _STEAM_APPLAUNCH;
// csCommandLine += " ";
csCommandLine += csTemp;
}
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
// Try to load our process
fRC = CreateProcess(NULL, //pszExe, //STEAM_EXE, //NULL,
(char *)(LPCTSTR)csCommandLine, //pszCommand, //STEAM_PARAMS, //exeString,
NULL,
NULL,
FALSE,
0, //CREATE_SUSPENDED,
NULL,
(LPCTSTR)pszSteamDir, //pszDirectory, //STEAM_DIR, //workingDir,
&si,
&pi);
if (!fRC)
{
DWORD dwError = GetLastError();
dwError = dwError;
MessageBox( _STEAM_NOT_LOADING, "Error", MB_ICONERROR);
}
return fRC;
}
Also if you didn't know you can login to Steam using API calls to steam.dll. This way you don't have to use -login or deal with the GUi. If you're interested I'll get you the link to the topic that shows all the things you can API calls.
typedef int (*SteamStartEngine)( TSteamError &rtSteamErr );
typedef int (*SteamShutdownEngine)(TSteamError &rtSteamErr );
typedef int (*SteamStartup)(UINT uUsingMask, TSteamError &rtSteamErr );
typedef UINT (*SteamLogin)( char *pszUsername, char* pszPassword, int isSecureComputer, TSteamError &rtSteamErr);
typedef int (*SteamIsLoggedIn)( int &rnIsLoggedIn, TSteamError &rtSteamErr );
typedef UINT (*SteamSetUser)( char *pszUsername, int &rnUserSet, TSteamError &rtSteamErr);
typedef UINT (*SteamLogout)( TSteamError &rtSteamErr );
typedef int (*SteamCleanup)( TSteamError &rtSteamErr );
typedef int (*SteamProcessCall)(UINT nSteamHandle, TSteamProgress &rtProgress, TSteamError &rtSteamErr );
typedef int (*SteamIsAppSubscribed)(UINT uAppID, UINT &ruIsAppSubscribed, UINT &ruIsAppReady, TSteamError &rtSteamErr);
typedef UINT (*SteamLaunchApp)(UINT uAppId, UINT uOpt, char *pszArgs, TSteamError &rtSteamErr);
static SteamStartEngine pfnSteamStartEngine;
static SteamStartup pfnSteamStartup;
static SteamLogin pfnSteamLogin;
static SteamIsLoggedIn pfnSteamIsLoggedIn;
static SteamSetUser pfnSteamSetUser;
static SteamLogout pfnSteamLogout;
static SteamCleanup pfnSteamCleanup;
static SteamShutdownEngine pfnSteamShutdownEngine;
static SteamProcessCall pfnSteamProcessCall;
static SteamIsAppSubscribed pfnSteamIsAppSubscribed;
static SteamLaunchApp pfnSteamLaunchApp;
//extern int SteamStartEngine(TSteamError &rtSteamErr);
void CSteamTesterDlg::OnButtonLogin()
{
CString csLaunchPath;
CString csSteamDir;
CString csTemp;
TSteamError tSteamError;
TSteamProgress tSteamProgress;
UINT hSteam;
UINT uStartOptions = 15; // 0x000F
int nIsLoggedIn;
int nUserSet;
int nRet;
CString csCommandLine;
BOOL fRC = FALSE;
UpdateData( TRUE );
HINSTANCE hInstSteam;
DWORD dwError;
if ( m_ptSteamWatch->IsSteamPathReady() )
{
int nCount = m_ptSteamWatch->GetSteamPathCount();
if ( nCount )
{
STEAM_PATH_DATA tData;
m_ptSteamWatch->GetSteamPathData( 0, tData );
csLaunchPath = tData.csLaunchPath;
csSteamDir = tData.csSteamDir;
}
}
csTemp = csSteamDir;
csTemp += "steam.dll";
hInstSteam = LoadLibrary( csTemp );
if (!hInstSteam)
{
dwError = GetLastError();
//m_sCriticalSection.Unlock();
//if (!m_bFailureSent)
//{
// m_bFailureSent=TRUE;
// DoLayerCallback(LAYERCALLBACK_LAYERSPECIFIC, SSL_FAILURE, SSL_FAILURE_LOADDLLS);
//}
return;
}
pfnSteamStartEngine = (SteamStartEngine)GetProcAddress( hInstSteam, "SteamStartEngine" );
pfnSteamStartup = (SteamStartup)GetProcAddress( hInstSteam, "SteamStartup" );
pfnSteamLogin = (SteamLogin)GetProcAddress( hInstSteam, "SteamLogin" );
pfnSteamIsLoggedIn = (SteamIsLoggedIn)GetProcAddress( hInstSteam, "SteamIsLoggedIn" );
pfnSteamSetUser = (SteamSetUser)GetProcAddress( hInstSteam, "SteamSetUser" );
pfnSteamLogout = (SteamLogout)GetProcAddress( hInstSteam, "SteamLogout" );
pfnSteamCleanup = (SteamCleanup)GetProcAddress( hInstSteam, "SteamCleanup" );
pfnSteamShutdownEngine = (SteamShutdownEngine)GetProcAddress( hInstSteam, "SteamShutdownEngine" );
pfnSteamProcessCall = (SteamProcessCall)GetProcAddress( hInstSteam, "SteamProcessCall" );
pfnSteamIsAppSubscribed = (SteamIsAppSubscribed)GetProcAddress( hInstSteam, "SteamIsAppSubscribed" );
pfnSteamLaunchApp = (SteamLaunchApp)GetProcAddress( hInstSteam, "SteamLaunchApp" );
// Start up
dwError = pfnSteamStartEngine( tSteamError );
dwError = pfnSteamStartup( uStartOptions, tSteamError );
// Login
hSteam = pfnSteamLogin( (char *)(LPCTSTR)m_csUsername, (char *)(LPCTSTR)m_csPassword, 1, tSteamError );
tSteamProgress.Valid = 1;
while ( pfnSteamProcessCall( hSteam, tSteamProgress, tSteamError ) == 0)
{
Sleep( 100 ); //Application.DoEvents();
}
// Check if logged in
nIsLoggedIn = 0;
nRet = pfnSteamIsLoggedIn( nIsLoggedIn, tSteamError );
if ( nIsLoggedIn )
{
nUserSet = 0;
hSteam = pfnSteamSetUser((char *)(LPCTSTR)m_csUsername, nUserSet, tSteamError );
tSteamProgress.Valid = 1;
while ( pfnSteamProcessCall( hSteam, tSteamProgress, tSteamError ) == 0)
{
Sleep( 100 ); //Application.DoEvents();
}
if ( nUserSet )
{
// sHandle = SteamLaunchApp(AppID, 0, sArgs, SErr)
hSteam = pfnSteamLaunchApp( 1250, 0, "-console", tSteamError );
tSteamProgress.Valid = 1;
while ( pfnSteamProcessCall( hSteam, tSteamProgress, tSteamError ) == 0)
{
Sleep( 100 ); //Application.DoEvents();
}
TRACE0( "Terror\n" );
}
}
// Logout
tSteamProgress.Valid = 1;
hSteam = pfnSteamLogout( tSteamError );
while ( pfnSteamProcessCall( hSteam, tSteamProgress, tSteamError ) == 0)
{
Sleep( 100 ); //Application.DoEvents();
}
// Shut down
dwError = pfnSteamCleanup( tSteamError );
dwError = pfnSteamShutdownEngine( tSteamError );
if (hInstSteam)
{
FreeLibrary(hInstSteam);
}
hInstSteam = NULL;
Glad I could help.
Public Shared Sub queryAccountInfo() ' 4
Try
Dim SErr As New TSteamError()
games = ""
Dim iBuffSize As UInteger = 512
Dim iSteamReturn As Integer = 0
Dim AppStats As New TSteamAppStats()
iSteamReturn = SteamGetAppStats(AppStats, SErr)
Dim SubscriptionStats As New TSteamSubscriptionStats()
iSteamReturn = SteamGetSubscriptionStats(SubscriptionStats, SErr)
If SubscriptionStats.uNumSubscriptions > 0 Then
Dim RawSubscriptionIDs As UInteger()
RawSubscriptionIDs = New UInteger(SubscriptionStats.uNumSubscriptions - 1) {}
iSteamReturn = SteamGetSubscriptionIds(RawSubscriptionIDs, SubscriptionStats.uNumSubscriptions, SErr)
Dim tAppIDs = New UInteger(AppStats.uNumApps) {} 'set the array to the maximum amount of Steam(Apps)
' Here we are creating a pointer to the tAppIDs array and allocating the correct amount of memory for manual marshaling
Dim arraytype As Object = tAppIDs.GetValue(0)
Dim arraysize As Integer = Marshal.SizeOf(arraytype)
Dim buffer As Integer = arraysize * tAppIDs.Length
Dim intPtr As IntPtr = Marshal.AllocHGlobal(buffer)
Dim isSubSubscribed As UInteger = 0
Dim isSubReady As UInteger = 0
For Each RawSubscriptionID As UInteger In RawSubscriptionIDs
iSteamReturn = SteamIsSubscribed(RawSubscriptionID, isSubSubscribed, isSubReady, SErr)
If isSubSubscribed = 1 Then
Dim SubNFO As New TSteamSubscription()
SubNFO.Name = New String(" "c, 255)
SubNFO.MaxNameChars = 255
SubNFO.AppIDs = intPtr
SubNFO.MaxAppIDs = AppStats.uNumApps
iSteamReturn = SteamEnumerateSubscription(RawSubscriptionID, SubNFO, SErr)
If Not RawSubscriptionID = 0 Then
If Not SubNFO.Name = "" Then
If Not games = "" Then
games = games & "," & SubNFO.Name
Else
games = SubNFO.Name
End If
End If
End If
Dim ofs As Integer = 0
Dim uLoop As Integer
For uLoop = 0 To SubNFO.NumApps - 1 'populate our app array from marshaled memory
tAppIDs(uLoop) = Marshal.ReadInt32(intPtr, ofs)
ofs = ofs + arraysize
Next
For uLoop = 0 To SubNFO.NumApps - 1 'Clear the relevant array indexes for the next subscription
tAppIDs(uLoop) = 0
Next
End If
Next
Marshal.FreeHGlobal(intPtr) 'free the marshaled memory
End If
Catch ex As Exception
MsgBox("Error at 4: " & ex.Message)
End Try
End Sub
hi afaik it's not possible as the auth ticket is bound to an IP
and the login packet is based on IP and timestamp
but maybe there's a way i don't know
SteamEnumerateSubscription( UINT SubscriptionID,
TSteamSubscription &rtSubscription,
TSteamError &rtSteamError);
// [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
struct TSteamSubscription
{
LPCTSTR pszName;
UINT uMaxNameChars;
UINT *puAppIDs;
// UINT puAppIDs;
UINT uMaxAppIDs;
UINT uID;
UINT uNumApps;
UINT uDurationInSeconds;
UINT uCostInCents;
UINT uIsAutoRenewing;
// Requires approx additional 0x120 bytes
UINT auFiller[ 128 ];
};
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?