C#活动程序识别

C#活动程序识别,c#,C#,我目前正在开发基于Arduino的可编程键盘。C#程序通过USB获取按下哪个键的信息。到目前为止,我能够打开程序,使用快捷方式 另外,我希望为不同的程序提供不同的键绑定。 要使其工作,我必须从活动程序中获取特定的详细信息,如exe文件的名称 在搜索时,我发现,我可以使用GetActiveWindow函数获取活动窗口,并且我知道,我必须使用另一个Windows函数,但我还没有找到哪一个 我能够得到窗口的标题文本,但是这个文本对于每个打开的Word文档来说是不同的,所以我不能使用它 任何人都知道我可

我目前正在开发基于Arduino的可编程键盘。C#程序通过USB获取按下哪个键的信息。到目前为止,我能够打开程序,使用快捷方式

另外,我希望为不同的程序提供不同的键绑定。 要使其工作,我必须从活动程序中获取特定的详细信息,如exe文件的名称

在搜索时,我发现,我可以使用
GetActiveWindow
函数获取活动窗口,并且我知道,我必须使用另一个Windows函数,但我还没有找到哪一个

我能够得到窗口的标题文本,但是这个文本对于每个打开的Word文档来说是不同的,所以我不能使用它

任何人都知道我可以使用哪一个函数,以获得与if语句比较的特定内容,如:

string activeProgram;
...
if(activeProgram=="Word"){...}
else if(activeProgram=="Chrome"){...}
由于您使用的是窗口句柄(hWnd)

您可以使用它通过调用获取进程Id

这是p/Invoke声明:

[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
一旦有了进程Id,就需要找到可执行文件

如果要继续使用windows API。。。你可以用,或者。您需要使用来获取进程句柄(hProcess)

尽管如此,没有必要这样做。一旦您有了进程Id,就可以使用以下方法获取可执行文件:

注意:安全限制仍然适用。您的程序需要具有读取其他进程和获取文件名所需的权限



这样,您就可以获得创建活动窗口的进程的主可执行文件。但是,如果恶意用户将可执行文件重命名为其他名称以欺骗您的程序,该怎么办额外的闲聊:。

代码到目前为止还在运行,我得到了文件的完整路径(这是我可以很好地处理的,谢谢),但问题是,当我想获得另一个窗口的名称时,我得到了Win32异常,因为我无法使用32位进程访问64位进程。我能把自己的文件变成64位程序吗?或者还有其他方法吗?@Schiep首先确保你不是在IntPtr和int之间施放。你需要声明。其次,您可能需要为32位和64位配置编译目标(在Build->configurationmanager下)。请参阅msdn上的。这篇文章可能会有帮助。
var process = Process.GetProcessById((int)processId);
var fileName = process.MainModule.FileName;