查找当前关注的应用程序

时间:2017-07-08 20:41:23

标签: c# .net interop

我一直在使用此代码尝试获取正在运行的当前进程(其他我的应用程序)。

在互联网上,它一直在告诉我使用下面的代码,但它似乎给了我一些问题。

[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

private string GetActiveWindowTitle()
{
    const int nChars = 256;
    StringBuilder Buff = new StringBuilder(nChars);
    IntPtr handle = GetForegroundWindow();

    if (GetWindowText(handle, Buff, nChars) > 0)
    {
     return Buff.ToString();
    }
  return null;
}

它给了我两个错误。

  

预期的类,委托,枚举,接口或结构

     

修饰语' extern'对此商品无效

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

  

预期的类,委托,枚举,接口或结构

如果您收到此错误,那么很可能您是在namespace内定义或声明这些方法,而不是在class正文中

答案 1 :(得分:0)

正如Rahul所说,把你的代码放在课堂上:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{

    public partial class Form1 : Form
    {

        [DllImport("user32.dll")]
        static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

        public Form1()
        {
            InitializeComponent();
        }

        private string GetActiveWindowTitle()
        {
            const int nChars = 256;
            StringBuilder Buff = new StringBuilder(nChars);
            IntPtr handle = GetForegroundWindow();

            if (GetWindowText(handle, Buff, nChars) > 0)
            {
                return Buff.ToString();
            }
            return null;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string title = GetActiveWindowTitle();
            label1.Text = title;
        }

    }

}