[英]How can I check which program is in focus?
我正在嘗試讓計時器每250毫秒檢查一次特定程序是否在焦點上,但我只是不知道如何...
當前代碼:
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Hearthstone_Test
{
public partial class Main : Form
{
private void timer1_Tick(object sender, EventArgs e)
{
var activatedHandle = GetForegroundWindow();
if (GetForegroundWindow() == Process.GetProcessesByName("Hearthstone"));
{
Console.WriteLine("Not Focused"); // No window is currently activated
}
else
{
Console.WriteLine("Focused");
}
var procId = Process.GetCurrentProcess().Id;
int activeProcId;
GetWindowThreadProcessId(activatedHandle, out activeProcId);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId);
}
}
錯誤在第11行:
Operator '==' cannot be applied to operands of type 'Process[]' and 'IntPtr'
我做錯了什么?
這對我有用,因為它返回活動窗口名稱,所以略有不同:
public string getActiveWindowName()
{
try
{
var activatedHandle = GetForegroundWindow();
Process[] processes = Process.GetProcesses();
foreach (Process clsProcess in processes)
{
if(activatedHandle == clsProcess.MainWindowHandle)
{
string processName = clsProcess.ProcessName;
return processName;
}
}
}
catch { }
return null;
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern IntPtr GetForegroundWindow();
以下將為您提供實際的窗口標題文本:
string processName = clsProcess.MainWindowTitle;
您正在將GetForegroundWindow()
返回的IntPtr
與Process[]
。 顧名思義, Process.GetProcessesByName
可以返回多個進程,因此您需要將其視為數組。
將Process.GetProcessesByName("Hearthstone")
保存到一個變量中,並遍歷每個條目以查看它是否是重點突出的條目。 另外,您假定該句柄是進程ID。 情況可能並非如此。 以下代碼未經測試。
...
var processes = Process.GetProcessesByName("Hearthstone");
foreach(Process p in processes) {
if(activedHandle == p.Handle) {
//A instance of the process Hearthstone is currently focused.
...
} else {
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.