Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何找到外部进程任务窗口exe文件位置?_C#_.net_Winforms - Fatal编程技术网

C# 如何找到外部进程任务窗口exe文件位置?

C# 如何找到外部进程任务窗口exe文件位置?,c#,.net,winforms,C#,.net,Winforms,当CaptureApplication获取MainWindowTitle时(本例中为GrADS 2.0.2.oga.2),它应该捕获窗口并将其粘贴到form1上的pictureBox中。 但事实并非如此 CaptureApplication(process.MainWindowTitle); public void CaptureApplication(字符串\u标题) { 字符串_wndcls=“ConsoleWindowClass”; STARTUPINFO si=新的STARTUPINF

当CaptureApplication获取MainWindowTitle时(本例中为GrADS 2.0.2.oga.2),它应该捕获窗口并将其粘贴到form1上的pictureBox中。 但事实并非如此

CaptureApplication(process.MainWindowTitle);
public void CaptureApplication(字符串\u标题)
{
字符串_wndcls=“ConsoleWindowClass”;
STARTUPINFO si=新的STARTUPINFO();
流程信息pi=新流程信息();
CreateProcess(_title,null,IntPtr.Zero,IntPtr.Zero,false,0,IntPtr.Zero,null,ref-si,out-pi);
IntPtr _wndConsole=IntPtr.Zero;
对于(int i=0;i<30;i++)
{
_wndConsole=FindWindow(wndcls,标题);
如果(_wndConsole==IntPtr.Zero)
{
系统线程线程睡眠(10);
继续;
}
打破
}    
IntPtr value=SetParent(_wndConsole,this.pictureBox1.Handle);
int style=GetWindowLong(_wndConsole,-16);
样式&=-12582913;
SetWindowLong(_wndConsole,-16,样式);
SendMessage(_wndConsole,WM_SYSCOMMAND,SC_max,0);
}
也许GrADS 2.0.2.oga.2不是exe文件不是进程?我不知道如何捕捉它

我需要捕捉左边的这个窗口。
也许毕业生2.0.2.oga.2不是一个自我过程?它在Xming运行后显示

Xming不是进程名吗?在这种情况下,也是MainWindowTitle吗?GrADS 2.0.2.oga.2不是exe,只是子窗口标题。Tim可能是,但我想捕获子窗口标题GrADS 2.0.2.oga.2,而不是Xming.exe,如果我尝试创建Xming进程。Name或MainWindowTitle,它不会在pictureBox中显示GrADS 2.0.2.oga.2。我想捕捉GrADS 2.0.2.oga.2如果它是一个儿童窗口,并且您试图获取窗口句柄,那么您可能必须使用这种方法:您可能需要阅读Raymond Chen的文章,然后再进一步。“是的,在技术上是合法的。在技术上也是合法的。如果所涉及的一个或两个窗口不知道它正在参与跨进程窗口树,那么就几乎不可能管理链锯。”
CaptureApplication(process.MainWindowTitle);
public void CaptureApplication(string _title)
{
    string _wndcls = "ConsoleWindowClass";
    STARTUPINFO si = new STARTUPINFO();
    PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
    CreateProcess(_title, null, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref si, out pi);
    IntPtr _wndConsole = IntPtr.Zero;

    for (int i = 0; i < 30; i++)
    {
        _wndConsole = FindWindow(_wndcls, _title);
        if (_wndConsole == IntPtr.Zero)
        {
            System.Threading.Thread.Sleep(10);
            continue;
        }
        break; 
    }    

    IntPtr value = SetParent(_wndConsole, this.pictureBox1.Handle);
    int style = GetWindowLong(_wndConsole, -16);
    style &= -12582913;
    SetWindowLong(_wndConsole, -16, style);
    SendMessage(_wndConsole, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}