おそらく、バグのあるバックグラウンドタスクによってフォーカスが奪われます。フォーカスを奪うウィンドウを開き、非常にすばやく閉じますが、フォーカスは戻りません。最近、Microsoft Officeにはこのようなバグがありました。
このようなプロセスを検出するには、使用することができますツールのようなウィンドウフォーカスロガー(ミラー)またはに似た独自のC#プログラムプロセスモニタを:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ProcessMonitor
{
class Program
{
const int pollDelay = 100;
static void Main(string[] args)
{
var lastProcesses = GetDescriptions();
while (true)
{
System.Threading.Thread.Sleep(pollDelay);
var now = DateTime.Now;
var processes = GetDescriptions();
var started = processes.Except(lastProcesses);
var stopped = lastProcesses.Except(processes);
foreach (var p in started)
{
Print(now, p, ConsoleColor.Green);
}
foreach (var p in stopped)
{
Print(now, p, ConsoleColor.Red);
}
lastProcesses = processes;
}
}
static void Print(DateTime dateTime, ProcessDescription process,
ConsoleColor color)
{
Console.ForegroundColor = color;
Console.WriteLine("{0:hh\\:mm\\:ss\\.ff}\tPID {1}\t{2}",
dateTime.TimeOfDay, process.Id, process.Description);
Console.ResetColor();
}
static List<ProcessDescription> GetDescriptions()
{
return Process.GetProcesses().Select(x => GetDescription(x)).ToList();
}
static ProcessDescription GetDescription(Process p)
{
int pid = -1;
string description;
try
{
pid = p.Id;
description = p.ProcessName;
}
catch (Exception e)
{
description = "Hit exception " + e;
}
return new ProcessDescription { Id = pid, Description = description };
}
struct ProcessDescription
{
public int Id;
public string Description;
public override bool Equals(object obj)
{
return obj != null && Id == ((ProcessDescription)obj).Id;
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
}
}
Omar Alshakerが提供するコードの洗練されたバグ修正バージョン。C#6も必要ありません。.NET3.5以降が必要です。
csc.exe
.NET Frameworkインストールに付属するC#コンパイラー()を使用してコンパイルし、結果の実行可能ファイルを実行して、開始(緑)または終了(赤)するプロセスのリアルタイムログを取得できます。Ctrl+ Cを使用して終了します。
コンパイラを見つけるには、を実行しwhere /R %windir%\Microsoft.NET csc.exe
ます。32bまたは64bに関係なく、インストールされている最新の.NETバージョンから1つを選択します。C#コードを保存しProgram.cs
てコンパイルしますProgram.exe
:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Program.cs
msconfig
、[ スタートアップ ]タブを選択します。どんなプログラムがありますか?