更新完整代码
我正在尝试一个简单的代码示例,它返回聚焦窗口的窗口句柄,但似乎无法取回文本框中的值。
class ApplicationExecution
{
public static bool MyWindow()
{
var activatedHandle = GetForegroundWindow();
if (activatedHandle == IntPtr.Zero)
{
return false; // No window is currently activated
}
var procId = Process.GetCurrentProcess().Id;
int activeProcId;
GetWindowThreadProcessId(activatedHandle, out activeProcId);
return activeProcId == procId;
}
[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);
}
我试图像这样访问它
ApplicationExecution esma = new ApplicationExecution();
textbox1.text = esma;
以及
textBox1.Text = Convert.ToString(ApplicationsWPF.ApplicationExecution.MyWindow());
我得到true或false,而不是函数假设返回的GetForegroundWindow值
答案 0 :(得分:4)
您已将MyWindow
定义为static
方法,因此您需要通过该类访问它:
textbox1.Text = ApplicationExecution.MyWindow().ToString();
答案 1 :(得分:2)
让MyWindow变为非静态,并且:
textbox1.Text =esma.MyWindow();
或:
textbox1.Text=ApplicationExecution.MyWindow();
但正如您现在解释的那样,您需要具有Window名称的字符串。
删除你的漏洞MyWindow()方法并将其替换为私有字符串GetActiveWindowTitle()方法,该方法可以在适用的答案中找到here
然后写:
textbox1.Text=esma.GetActiveWindowTitle();
答案 2 :(得分:1)
因为您已将方法标记为static
。
您不需要创建实例。
textbox1.Text = ApplicationExecution.MyWindow().ToString();
答案 3 :(得分:0)
鉴于对原始问题的更新,您只需更改MyWindow
的签名即可返回int
,然后返回activeProcId
的值:
class ApplicationExecution
{
public static int MyWindow()
{
....
return activeProcId;
}
....
}
您可能还希望在进行此更改后将方法重命名为MyProcessId,但我知道您说这只是您尝试的示例。