コード例 #1
0
        public void StopIdle()
        {
            try
            {
                LblGameName.Visible    = false;
                PbxApp.Image           = null;
                PbxApp.Visible         = false;
                LvwGamesState.Visible  = false;
                BtnPause.Visible       = false;
                BtnSkip.Visible        = false;
                LblCurrentStatus.Text  = localization.strings.not_ingame;
                LblHoursPlayed.Visible = false;
                PbxIdleStatus.Image    = null;

                // Stop the card drop check timer
                TmrCardDropCheck.Enabled = false;

                // Stop the statistics timer
                TmrStatistics.Stop();
                TmrStatistics.Enabled = false;

                // Hide the status bar
                SstFooter.Visible = false;

                // Resize the form
                var graphics = CreateGraphics();
                var scale    = graphics.DpiY * 1.9583;
                Height = Convert.ToInt32(scale);

                // Kill the idling process
                foreach (var badge in AllBadges.Where(b => b.InIdle))
                {
                    badge.StopIdle();
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex, "frmMain -> StopIdle");
            }
        }
コード例 #2
0
        private void StartIdle()
        {
            // Kill all existing processes before starting any new ones
            // This prevents rogue processes from interfering with idling time and slowing card drops
            try
            {
                String username = WindowsIdentity.GetCurrent().Name;
                foreach (var process in Process.GetProcessesByName("steam-idle"))
                {
                    ManagementObjectSearcher   searcher    = new ManagementObjectSearcher("Select * From Win32_Process Where ProcessID = " + process.Id);
                    ManagementObjectCollection processList = searcher.Get();

                    foreach (ManagementObject obj in processList)
                    {
                        string[] argList   = new string[] { string.Empty, string.Empty };
                        int      returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
                        if (returnVal == 0)
                        {
                            if (argList[1] + "\\" + argList[0] == username)
                            {
                                process.Kill();
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
            }

            // Check if user is authenticated and if any badge left to idle
            // There should be check for IsCookieReady, but property is set in timer tick, so it could take some time to be set.
            if (string.IsNullOrWhiteSpace(Settings.Default.sessionid) || !IsSteamReady)
            {
                ResetClientStatus();
            }
            else
            {
                if (ReloadCount != 0)
                {
                    return;
                }

                if (CanIdleBadges.Any())
                {
                    statistics.SetRemainingCards((uint)CardsRemaining);
                    TmrStatistics.Enabled = true;
                    TmrStatistics.Start();
                    if (Settings.Default.OnlyOneGameIdle)
                    {
                        StartSoloIdle(CanIdleBadges.First());
                    }
                    else
                    {
                        if (Settings.Default.OneThenMany)
                        {
                            var multi = CanIdleBadges.Where(b => b.HoursPlayed >= 2);
                            if (multi.Count() >= 1)
                            {
                                StartSoloIdle(multi.First());
                            }
                            else
                            {
                                StartMultipleIdle();
                            }
                        }
                        else
                        {
                            var multi = CanIdleBadges.Where(b => b.HoursPlayed < 2);
                            if (multi.Count() >= 2)
                            {
                                StartMultipleIdle();
                            }
                            else
                            {
                                StartSoloIdle(CanIdleBadges.First());
                            }
                        }
                    }
                }
                else
                {
                    IdleComplete();
                }

                UpdateStateInfo();
            }
        }