从另一个进程调用方法

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 你) 是的,我就是这个意思

以上是关于从另一个进程调用方法的主要内容,如果未能解决你的问题,请参考以下文章

从另一个异步方法调用的 Spring 异步方法

从另一个同步方法调用同步方法是不是安全?

如何使用参数从另一个方法调用方法

如何从另一个类调用@selector 方法

静态方法 - 如何从另一个方法调用一个方法?

如何从另一个方法调用异步方法