我正在为Revit创建一个插件,在它的应用程序中注册几个事件。
对于每次发生事件,都会在txt文件上写入一行,告诉我有关该事件的信息,例如:
用户在Autodesk Revit 2019 (.)上打开一份文档
通过获取应用程序的MainWindowTitle名称(如:Process.GetCurrentProcess().MainWindowTitle ),我将获得“AutoDeskRevit2019”(应用程序名称)
public static string originalString = Process.GetCurrentProcess().MainWindowTitle;(...)
Trace.WriteLine("O utilizador " + Environment.UserName + " abriu o " + originalString + " a " + DateTime.Now + " (ApplicationInitializedEventArgs)");它写入txt文件:
rita.aguiar abriu o a 20/09/2018 10:36:42 (ApplicationInitializedEventArgs)
正如你所读的,它没有写在txt文件"Autodesk Revit 2019 - Home“之间的单词"o”和"a“之间,正如我所希望的那样。
如果我将Process.GetCurrentProcess().MainWindowTitle直接写在Trace.WriteLine上,我会得到“AutoDeskRevit2019- Home",但我希望写一个指定的名称。
如何通过给Process.GetCurrentProcess().MainWindowTitle指定一个名称来成功地编写"Autodesk Revit 2019 - Home“
稍后,我想通过使用Autodesk Revit 2019来获得这个名称,如下所示:
public static string originalString = Process.GetCurrentProcess().MainWindowTitle;
public static string[] splittedString = originalString.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
public static string AppName = splittedString[0];任何帮助都会得到认可!
发布于 2018-11-05 14:13:45
为了能够将主窗口标题存储在string类型的名称中,我必须首先声明我正在使用的方法的每个:
string originalString;
string[] splittedString;
string AppName;在声明每个字符串名称之后,我通过在第一个私有方法中包含每个定义获得了应用程序名"Autodesk Revit 2019“,该方法是在打开Revit应用程序时创建的,用于注册。这必须在方法中完成,因为只有在应用程序启动后,我们才能访问MainWindowTitle。这就是为什么在应用程序开始启动时,在尝试获取MainWindowTitle时,我得到了一个空字符串"“,但在它完全启动并因此打开了一个具有这样标题的窗口之前。
private void DumpEventArgs(ApplicationInitializedEventArgs args_initialized)
{
originalString = Process.GetCurrentProcess().MainWindowTitle;
splittedString = originalString.Split(new[] { " -" }, StringSplitOptions.RemoveEmptyEntries);
AppName = splittedString[0];
//StreamWriter file = new StreamWriter("C://Users//" + Environment.UserName + "//AppData//Roaming//Autodesk//" + Environment.UserName + ".txt", append: true);
//MessageBox.Show($"O utilizador {Environment.UserName} iniciou o {AppName} a {DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}");
file.WriteLine($"{Environment.UserName},{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")},{AppName},iniciar");
}当需要时,我可以使用这个字符串,因为它是在方法之外声明的,例如,这里我需要再次编写AppName:
private void DumpEventArgs(DocumentSavedEventArgs args_saved)
{
//StreamWriter file = new StreamWriter("C://Users//" + Environment.UserName + "//AppData//Roaming//Autodesk//" + Environment.UserName + ".txt", append: true);
//MessageBox.Show($"O utilizador {Environment.UserName} guardou um documento no {AppName} a {DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}");
file.WriteLine($"{Environment.UserName},{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")},{AppName},guardar");
}最后,AppName检索了我想要的内容:“AutoDeskRevit2019”。
发布于 2018-09-21 06:07:59
正如我建议在Revit讨论论坛上回答您关于为字符串C#分配名称的类似问题一样,我将查看调试器中一步一步执行的代码。
然后你就可以亲眼看到到底是怎么回事了。
还可以添加更多中间行和变量,以达到绝对清晰的目的:
string originalString = Process
.GetCurrentProcess()
.MainWindowTitle;
string s2 = "O utilizador "
+ Environment.UserName
+ " abriu um documento no "
+ originalString + " a " + DateTime.Now;
//or use string interpolation:
//https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
string s3 = $"O utilizador {Environment.UserName} abriu um documento no {originalString} a {DateTime.Now}";
Trace.WriteLine( s2 );
Trace.WriteLine( s3 );调试器很好!
事实上是无价的。
发布于 2018-10-02 13:45:45
关于如何使用确定Revit演示模式的讨论中的一些注释显示了如何访问Revit主窗口标题。
https://stackoverflow.com/questions/52424242
复制相似问题