从另一个进程调用方法
Posted
技术标签:
【中文标题】从另一个进程调用方法【英文标题】:Invoke a method from another process 【发布时间】:2016-02-03 14:17:34 【问题描述】:我有一个工作申请。现在我正在尝试编程自动单击按钮的能力。为此,我需要进入内部。
我可以用反编译器轻松查看源代码,所以我知道所有的类名、方法名等......
我一直在研究类型和 Type.GetMethod() 方法。唯一的问题是我尝试使用应用程序的过程。我捕获了正确的应用程序 (Process.GetProcessByName("WorkProcess")),我可以捕获“类型”,但我不知道如何找到正确的类并调用正确的方法。
我会给你一个反编译器中显示的布局:
WorkApp
> WorkApp.Exe
--> References
--> <Default namespace>
--> WORKAPP
----> frmsomething (Form)
------> _btnsync : Button
------> btnsync : Button
关于如何做到这一点的任何想法?我搜索了谷歌,但找不到答案...
谢谢 安东尼
PS:我无法在工作中访问应用程序的源代码。
PPS:这是我目前的代码:
Process WA = null;
private void Initialize()
Process[] pa = Process.GetProcesses();
foreach (Process p in pa)
if (p.ProcessName.Contains("WorkApp"))
WA = p;
break;
if (WA == null)
Console.WriteLine("App was not found...");
stop = true;
else
Type t = WA.GetType();
t.GetType();
// This is the place I got stuck
【问题讨论】:
WA.GetType()
将返回System.Diagnostics.Process
,而t.GetType()
将返回System.Type
,这两者对于您的目的都是无用的。此外,进程不一定是 CLR 进程。为什么不向相关按钮发送消息?见click on a button in another application from my C# application?。
我想这样做,唯一的问题是我要按下的按钮在另一个进程中,由这个应用程序创建。打开的时候,在任务管理器中可以看到这两个,但是第二种形式只能通过上下文菜单打开。
是的,所以首先发送一条消息,指示您要调用该菜单。
【参考方案1】:
如果您试图从外部世界调用应用程序中的方法,一种方法是在该应用程序中创建远程线程,并从该应用程序内部使用该 dll,使用反射来完成工作。 我对一个应用程序做了这个,它起作用了。 如果您想了解详细信息,请评论我的答案。
【讨论】:
你的意思是注入一个dll吗? (PS 不是我 -1 你) 是的,我就是这个意思以上是关于从另一个进程调用方法的主要内容,如果未能解决你的问题,请参考以下文章