我是一个很新手,也许我根本没有正确使用方法。 我想同时启动不同的收购软件。
为此我有一个前景应用程序窗口,它模拟空格键点击或模拟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
放在引号之间,则没有任何反应。你知道如何解决这个问题吗?
答案 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()
并搜索它。这样,您就可以使用您提供的两种方案。