Process.GetCurrentProcess().Revit 的 MainWindowTitle 检索空字符串 ""
Process.GetCurrentProcess().MainWindowTitle of Revit retrieves empty string ""
我正在为 Revit 创建一个插件,在其应用程序中注册多个事件。
每次发生事件时,都会在 txt 文件上写一行,告诉我有关该事件的信息,例如:
用户在 Autodesk Revit 2019 上打开了文档 (...)
我通过获取应用程序的 MainWindowTitle 名称来获取 "Autodesk Revit 2019"(应用程序名称),如下所示:Process.GetCurrentProcess().MainWindowTitle
public static string originalString = Process.GetCurrentProcess().MainWindowTitle;
(...)
Trace.WriteLine("O utilizador " + Environment.UserName + " abriu o " + originalString + " a " + DateTime.Now + " (ApplicationInitializedEventArgs)");
在txt文件中写入:
O utilizador rita.aguiar abriu o a 20/09/2018 10:36:42 (ApplicationInitializedEventArgs)
如您所见,它并没有像我希望的那样在 "o" 和 "a" 之间写入 txt 文件 "Autodesk Revit 2019 - [Home]"。
如果我直接在 Trace.WriteLine
上写 Process.GetCurrentProcess().MainWindowTitle
我会得到 "Autodesk Revit 2019 - [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];
如有任何帮助,我们将不胜感激!
正如我建议在 Revit API 论坛中回答您关于 assigning a name to a string 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://docs.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 );
调试器不错!
事实上,无价之宝。
关于如何 determine Revit demo mode 的讨论的一些评论显示了如何访问 Revit 主 window 标题。
为了能够将主 Window 标题存储在字符串类型的名称中,我必须首先在我正在使用的方法之外声明每个字符串:
string originalString;
string[] splittedString;
string AppName;
在声明每个字符串名称后,我通过将每个定义包含在第一个私有方法中来获得应用程序名称 "Autodesk Revit 2019",该方法是为在 Revit 应用程序打开时注册而创建的。这必须在方法内部完成,因为只有在应用程序启动后我们才能访问 MainWindowTitle。这就是为什么我在应用程序开始启动时尝试获取 MainWindowTitle 时得到一个空字符串 "" 的原因,但在它完全启动并因此打开 Window 之前这样的标题。
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
取回了我想要的:"Autodesk Revit 2019".
我正在为 Revit 创建一个插件,在其应用程序中注册多个事件。
每次发生事件时,都会在 txt 文件上写一行,告诉我有关该事件的信息,例如:
用户在 Autodesk Revit 2019 上打开了文档 (...)
我通过获取应用程序的 MainWindowTitle 名称来获取 "Autodesk Revit 2019"(应用程序名称),如下所示:Process.GetCurrentProcess().MainWindowTitle
public static string originalString = Process.GetCurrentProcess().MainWindowTitle;
(...)
Trace.WriteLine("O utilizador " + Environment.UserName + " abriu o " + originalString + " a " + DateTime.Now + " (ApplicationInitializedEventArgs)");
在txt文件中写入:
O utilizador rita.aguiar abriu o a 20/09/2018 10:36:42 (ApplicationInitializedEventArgs)
如您所见,它并没有像我希望的那样在 "o" 和 "a" 之间写入 txt 文件 "Autodesk Revit 2019 - [Home]"。
如果我直接在 Trace.WriteLine
上写 Process.GetCurrentProcess().MainWindowTitle
我会得到 "Autodesk Revit 2019 - [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];
如有任何帮助,我们将不胜感激!
正如我建议在 Revit API 论坛中回答您关于 assigning a name to a string 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://docs.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 );
调试器不错!
事实上,无价之宝。
关于如何 determine Revit demo mode 的讨论的一些评论显示了如何访问 Revit 主 window 标题。
为了能够将主 Window 标题存储在字符串类型的名称中,我必须首先在我正在使用的方法之外声明每个字符串:
string originalString;
string[] splittedString;
string AppName;
在声明每个字符串名称后,我通过将每个定义包含在第一个私有方法中来获得应用程序名称 "Autodesk Revit 2019",该方法是为在 Revit 应用程序打开时注册而创建的。这必须在方法内部完成,因为只有在应用程序启动后我们才能访问 MainWindowTitle。这就是为什么我在应用程序开始启动时尝试获取 MainWindowTitle 时得到一个空字符串 "" 的原因,但在它完全启动并因此打开 Window 之前这样的标题。
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
取回了我想要的:"Autodesk Revit 2019".