It still loses focus though, and will not continue. This will be my next test. I don't want to have to add in code that puts the focus on the calling Acad window, but that may be the only way.
New code.
namespace Test
{
/// <summary>
/// Description of GetSystemVariablescs.
/// </summary>
public class GetSystemVariablescs
{
[DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedUsrBrk")]
private static extern int acedUsrBrk();
private StringBuilder UpStringLetters (StringBuilder sbStr, int Location) {
if (Location.Equals(0))
return sbStr.Insert(0, 'A');
else if (sbStr[Location - 1].Equals('Z')) {
sbStr[Location - 1] = 'A';
return UpStringLetters (sbStr, (Location - 1));
}
else if (sbStr.Length.Equals(1)) {
char tempChar = sbStr[0];
tempChar = ++tempChar;
sbStr[0] = tempChar;
return sbStr;
}
else {
char tempChar = sbStr[Location - 1];
tempChar = ++tempChar;
sbStr[Location - 1] = tempChar;
return sbStr;
}
}
[CommandMethod("PrintVariables")]
public void Main () {
PromptResult pr = AcadApp.DocumentManager.MdiActiveDocument.Editor.GetString("\n Enter value to start at: ");
string TestString = pr.StringResult;
if (string.Compare(TestString, string.Empty).Equals(0))
return;
StringBuilder sbString = new StringBuilder(TestString.ToUpper(), 30);
object VarValue;
int i = 0;
using (StreamWriter sw = new StreamWriter("C:/MyCustom/VariableList-CSharp.txt", true)) {
while (acedUsrBrk().Equals(0)) {
try {
VarValue = AcadApp.GetSystemVariable(sbString.ToString());
if (VarValue != null) {
sw.WriteLine(sbString + "," + VarValue.ToString());
sw.Flush();
}
}
catch {}
try {
VarValue = AcadApp.GetSystemVariable(sbString.Insert(0,'_').ToString());
if (VarValue != null) {
sw.WriteLine(sbString + "," + VarValue.ToString());
sw.Flush();
}
}
catch {}
if (sbString[0].Equals('_'))
sbString.Remove(0,1);
sbString = UpStringLetters (sbString, sbString.Length);
++i;
if (i > 20000) {
AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n Test string = " + sbString.ToString());
//System.GC.Collect();
i = 0;
}
}
sw.WriteLine("** Canceled at [ " + sbString + " ]");
}
AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage(sbString.ToString());
}
}
}