【问题标题】: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?。
  • 我想这样做,唯一的问题是我要按下的按钮在另一个进程中,由这个应用程序创建。打开的时候,在任务管理器中可以看到这两个,但是第二种形式只能通过上下文菜单打开。
  • 是的,所以首先发送一条消息,指示您要调用该菜单。

标签: c# button methods process gettype


【解决方案1】:

如果您试图从外部世界调用应用程序中的方法,一种方法是在该应用程序中创建远程线程,并从该应用程序内部使用该 dll,使用反射来完成工作。 我对一个应用程序做了这个,它起作用了。 如果您想了解详细信息,请评论我的答案。

【讨论】:

  • 你的意思是注入一个dll吗? (PS 不是我 -1 你)
  • 是的,我就是这个意思
猜你喜欢
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多