当我们以编程方式获取应用程序的名称时如何使用FindWindow

时间:2016-05-27 09:22:09

标签: c# string

我是一个很新手,也许我根本没有正确使用方法。 我想同时启动不同的收购软件。

为此我有一个前景应用程序窗口,它模拟空格键点击或模拟Mouseclick按下"播放按钮"。然后我最小化它,并将另一个应用程序放到前台并执行相同的操作。它实际上非常快,效果很好。

但我有一个软件问题。它的名字变化很大(它取了文件夹的名称,保存了视频。

要查找此应用程序的名称,我使用enumwindow并使用过滤器获取该名称。

但在我的问题中,应用程序的名称保存为string

使用前台应用程序,我必须使用FindWindow找到它,并且我必须在引号中添加应用程序的名称。当然,如果我将string放入引号,它就不起作用。

这是我的代码:

//[Lot of Dllimport]
public void namewindow()
{
    string[] strWindowsTitles = GetDesktopWindowsTitles();
    //all the name of open applications
    foreach (string strTitle in strWindowsTitles)
    {
        if (strTitle.Contains("Motive"))
        {
            string Motive = strTitle;
            //Here if I put a MessageBox.Show(Motive),
            //I have a name like:
            //Motive:Body 1.10.0 Beta 1 (C:\Users\Public\Documents\OptiTrack\
        }
    }
}

public void openwindow()
{
    IntPtr splashwindow = FindWindowByCaption(IntPtr.Zero, "Motive");
    FindWindow;
    SetForegroundWindow(splashwindow);
    ShowWindowAsync(splashwindow, SW_SHOWNORMAL);
}

这项工作与

完全吻合
IntPtr splashwindow = FindWindowByCaption(IntPtr.Zero, "Kinovea");
FindWindow;
SetForegroundWindow(splashwindow);
ShowWindowAsync(splashwindow, SW_SHOWNORMAL);

例如。

因此,如果我在引号之间放置应用程序的名称,它可以正常工作,但是如果我将string放在引号之间,则没有任何反应。你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

继续you also posted in this question,我觉得你的代码应该是这样的:

public string nameWindow(string searchFor)
{
    string[] strWindowsTitles = GetDesktopWindowsTitles();
    //all the names of open applications
    foreach (string strTitle in strWindowsTitles)
    {
        if (strTitle.Contains(searchFor))
        {
            return strTitle;
        }
    }
    else
        return null;
}
public void openwindow()
{
    string motiveWindow = nameWindow("Motive");
    if (motiveWindow != null){
        IntPtr splashwindow = FindWindowByCaption(IntPtr.Zero, motiveWindow);
        //FindWindow;//Not sure what this does?
        SetForegroundWindow(splashwindow);
        ShowWindowAsync(splashwindow, SW_SHOWNORMAL);
    }
}

这会改变它,所以你的nameWindow()方法会找到一个窗口(它遇到的第一个窗口),带有你传递的单词,方法,searchFor变量。在这种情况下," Motive"。然后,如果变量motiveWindow不为null(因此找到了一个窗口),它将运行您期望的代码并显示窗口。

您需要注意如何设置变量以及返回什么变量。目前你的nameWindow()似乎做得不多,可能会设置一个名为' Motive'的变量,这是我从未见过的声明,但你从来没有使用过变量在别处。在这里,我们返回一个变量并根据返回的数据进行操作。您可能会发现要使openWindow()方法获取变量,尝试打开同名窗口,如果找不到,则调用方法nameWindow()并搜索它。这样,您就可以使用您提供的两种方案。