Skip to content

Commit 9e6778b

Browse files
committed
Issue #63 Added an opportunity to set a window working directory for the started process
1 parent 890e018 commit 9e6778b

8 files changed

+66
-34
lines changed

SmartSystemMenu/Forms/MainForm.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,7 @@ private void WindowGetMsg(object sender, WndProcEventArgs e)
727727
var arguments = item.Arguments;
728728
var argumentParameters = arguments.GetParams(item.BeginParameter, item.EndParameter);
729729
var allParametersInputed = true;
730+
var processPath = window.Process?.GetMainModuleFileName() ?? string.Empty;
730731
foreach (var parameter in argumentParameters)
731732
{
732733
var parameterName = parameter.TrimStart(item.BeginParameter).TrimEnd(item.EndParameter);
@@ -738,7 +739,7 @@ private void WindowGetMsg(object sender, WndProcEventArgs e)
738739

739740
if (string.Compare(parameterName, StartProgramMenuItem.PARAMETER_PROCESS_NAME, true) == 0)
740741
{
741-
arguments = arguments.Replace(parameter, Path.GetFileName(window.Process?.GetMainModuleFileName() ?? string.Empty));
742+
arguments = arguments.Replace(parameter, Path.GetFileName(processPath));
742743
continue;
743744
}
744745

@@ -764,7 +765,7 @@ private void WindowGetMsg(object sender, WndProcEventArgs e)
764765

765766
if (allParametersInputed)
766767
{
767-
SystemUtils.RunAs(item.FileName, arguments, item.ShowWindow, item.RunAs);
768+
SystemUtils.RunAs(item.FileName, arguments, item.ShowWindow, item.RunAs, item.UseWindowWorkingDirectory ? Path.GetDirectoryName(processPath) : null);
768769
}
769770
}
770771
catch (Exception ex)

SmartSystemMenu/Forms/StartProgramForm.Designer.cs

+29-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

SmartSystemMenu/Forms/StartProgramForm.cs

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ private void InitializeControls(StartProgramMenuItem menuItem, LanguageSettings
3030
lblBegin.Text = settings.GetValue("start_program_lbl_begin");
3131
lblEnd.Text = settings.GetValue("start_program_lbl_end");
3232
chkShowWindow.Text = settings.GetValue("start_program_show_window");
33+
chkUseWindowWorkingDirectory.Text = settings.GetValue("start_program_use_window_working_directory");
3334
Text = settings.GetValue("start_program_form");
3435
cmbRunAs.Items.Clear();
3536
cmbRunAs.Items.Add(settings.GetValue("start_program_normal"));
@@ -47,6 +48,7 @@ private void InitializeControls(StartProgramMenuItem menuItem, LanguageSettings
4748
txtEnd.Text = menuItem.EndParameter;
4849
txtParameter.Text = $"{menuItem.BeginParameter}{settings.GetValue("start_program_parameter")}{menuItem.EndParameter}";
4950
chkShowWindow.Checked = menuItem.ShowWindow;
51+
chkUseWindowWorkingDirectory.Checked = menuItem.UseWindowWorkingDirectory;
5052
cmbRunAs.SelectedIndex = menuItem.RunAs == UserType.Normal ? 0 : 1;
5153
}
5254
}
@@ -98,6 +100,7 @@ private void ButtonApplyClick(object sender, EventArgs e)
98100
BeginParameter = txtBegin.Text,
99101
EndParameter = txtEnd.Text,
100102
ShowWindow = chkShowWindow.Checked,
103+
UseWindowWorkingDirectory = chkUseWindowWorkingDirectory.Checked,
101104
RunAs = cmbRunAs.SelectedIndex == 0 ? UserType.Normal : UserType.Administrator
102105
};
103106
DialogResult = DialogResult.OK;

SmartSystemMenu/Language.xml

+9
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@
177177
<item name="start_program_lbl_begin" value="Begin:" />
178178
<item name="start_program_lbl_end" value="End:" />
179179
<item name="start_program_show_window" value="Show Window" />
180+
<item name="start_program_use_window_working_directory" value="Use a window working directory" />
180181
<item name="start_program_parameter" value="Parameter" />
181182
<item name="start_program_normal" value="Normal" />
182183
<item name="start_program_administrator" value="Administrator" />
@@ -397,6 +398,7 @@
397398
<item name="start_program_lbl_begin" value="Start:" />
398399
<item name="start_program_lbl_end" value="Ende:" />
399400
<item name="start_program_show_window" value="Schaufenster" />
401+
<item name="start_program_use_window_working_directory" value="Verwenden Sie ein Windows-Arbeitsverzeichnis" />
400402
<item name="start_program_parameter" value="Parameter" />
401403
<item name="start_program_normal" value="Normal" />
402404
<item name="start_program_administrator" value="Administrator" />
@@ -615,6 +617,7 @@
615617
<item name="start_program_lbl_begin" value="开始:" />
616618
<item name="start_program_lbl_end" value="结尾:" />
617619
<item name="start_program_show_window" value="显示窗口" />
620+
<item name="start_program_use_window_working_directory" value="使用窗口工作目錄" />
618621
<item name="start_program_parameter" value="范围" />
619622
<item name="start_program_normal" value="以普通账户运行" />
620623
<item name="start_program_administrator" value="以管理员账户运行" />
@@ -833,6 +836,7 @@
833836
<item name="start_program_lbl_begin" value="開始:" />
834837
<item name="start_program_lbl_end" value="結尾:" />
835838
<item name="start_program_show_window" value="顯示視窗" />
839+
<item name="start_program_use_window_working_directory" value="使用窗口工作目錄" />
836840
<item name="start_program_parameter" value="範圍" />
837841
<item name="start_program_normal" value="使用者" />
838842
<item name="start_program_administrator" value="系統管理員" />
@@ -1051,6 +1055,7 @@
10511055
<item name="start_program_lbl_begin" value="始める:" />
10521056
<item name="start_program_lbl_end" value="終わり:" />
10531057
<item name="start_program_show_window" value="ウィンドウを表示" />
1058+
<item name="start_program_use_window_working_directory" value="ウィンドウの作業ディレクトリを使用する" />
10541059
<item name="start_program_parameter" value="パラメータ" />
10551060
<item name="start_program_normal" value="正常" />
10561061
<item name="start_program_administrator" value="管理者" />
@@ -1269,6 +1274,7 @@
12691274
<item name="start_program_lbl_begin" value="시작하다:" />
12701275
<item name="start_program_lbl_end" value="끝:" />
12711276
<item name="start_program_show_window" value="쇼 윈도우" />
1277+
<item name="start_program_use_window_working_directory" value="창 작업 디렉토리 사용" />
12721278
<item name="start_program_parameter" value="매개변수" />
12731279
<item name="start_program_normal" value="정상" />
12741280
<item name="start_program_administrator" value="관리자" />
@@ -1487,6 +1493,7 @@
14871493
<item name="start_program_lbl_begin" value="Начало:" />
14881494
<item name="start_program_lbl_end" value="Конец:" />
14891495
<item name="start_program_show_window" value="Отображать окно" />
1496+
<item name="start_program_use_window_working_directory" value="Использовать рабочий каталог окна" />
14901497
<item name="start_program_parameter" value="Параметр" />
14911498
<item name="start_program_normal" value="Обычный" />
14921499
<item name="start_program_administrator" value="Администратор" />
@@ -1705,6 +1712,7 @@
17051712
<item name="start_program_lbl_begin" value="Започети:" />
17061713
<item name="start_program_lbl_end" value="Завршити:" />
17071714
<item name="start_program_show_window" value="Изложбени прозор" />
1715+
<item name="start_program_use_window_working_directory" value="Користите радни директоријум прозора" />
17081716
<item name="start_program_parameter" value="Параметар" />
17091717
<item name="start_program_normal" value="Нормалан" />
17101718
<item name="start_program_administrator" value="Администратор" />
@@ -1923,6 +1931,7 @@
19231931
<item name="start_program_lbl_begin" value="Começar:" />
19241932
<item name="start_program_lbl_end" value="Fim:" />
19251933
<item name="start_program_show_window" value="Mostrar janela" />
1934+
<item name="start_program_use_window_working_directory" value="Use um diretório de trabalho da janela" />
19261935
<item name="start_program_parameter" value="Parâmetro" />
19271936
<item name="start_program_normal" value="Normal" />
19281937
<item name="start_program_administrator" value="Administrador" />

SmartSystemMenu/Settings/SmartSystemMenuSettings.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ public bool Equals(SmartSystemMenuSettings other)
168168
string.Compare(MenuItems.StartProgramItems[i].BeginParameter, other.MenuItems.StartProgramItems[i].BeginParameter, StringComparison.CurrentCultureIgnoreCase) != 0 ||
169169
string.Compare(MenuItems.StartProgramItems[i].EndParameter, other.MenuItems.StartProgramItems[i].EndParameter, StringComparison.CurrentCultureIgnoreCase) != 0 ||
170170
MenuItems.StartProgramItems[i].ShowWindow != other.MenuItems.StartProgramItems[i].ShowWindow ||
171-
MenuItems.StartProgramItems[i].RunAs != other.MenuItems.StartProgramItems[i].RunAs)
171+
MenuItems.StartProgramItems[i].RunAs != other.MenuItems.StartProgramItems[i].RunAs ||
172+
MenuItems.StartProgramItems[i].UseWindowWorkingDirectory != other.MenuItems.StartProgramItems[i].UseWindowWorkingDirectory)
172173
{
173174
return false;
174175
}
@@ -249,7 +250,7 @@ public override int GetHashCode()
249250

250251
foreach (var item in MenuItems.StartProgramItems)
251252
{
252-
hashCode ^= item.Title.GetHashCode() ^ item.FileName.GetHashCode() ^ item.Arguments.GetHashCode() ^ item.RunAs.GetHashCode() ^ item.BeginParameter.GetHashCode() ^ item.EndParameter.GetHashCode();
253+
hashCode ^= item.Title.GetHashCode() ^ item.FileName.GetHashCode() ^ item.Arguments.GetHashCode() ^ item.UseWindowWorkingDirectory.GetHashCode() ^ item.RunAs.GetHashCode() ^ item.BeginParameter.GetHashCode() ^ item.EndParameter.GetHashCode();
253254
}
254255

255256
foreach (var item in MenuItems.Items)
@@ -309,7 +310,8 @@ public static SmartSystemMenuSettings Read(string fileName, string languageFileN
309310
BeginParameter = x.Attribute("beginParameter") != null ? x.Attribute("beginParameter").Value : "",
310311
EndParameter = x.Attribute("endParameter") != null ? x.Attribute("endParameter").Value : "",
311312
RunAs = x.Attribute("runAs") != null && !string.IsNullOrEmpty(x.Attribute("runAs").Value) ? (UserType)Enum.Parse(typeof(UserType), x.Attribute("runAs").Value, true) : UserType.Normal,
312-
ShowWindow = x.Attribute("showWindow") != null && !string.IsNullOrEmpty(x.Attribute("showWindow").Value) ? x.Attribute("showWindow").Value.ToLower() == "true" : true
313+
ShowWindow = x.Attribute("showWindow") != null && !string.IsNullOrEmpty(x.Attribute("showWindow").Value) ? x.Attribute("showWindow").Value.ToLower() == "true" : true,
314+
UseWindowWorkingDirectory = x.Attribute("useWindowWorkingDirectory") != null && !string.IsNullOrEmpty(x.Attribute("useWindowWorkingDirectory").Value) ? x.Attribute("useWindowWorkingDirectory").Value.ToLower() == "true" : false
313315
})
314316
.ToList();
315317

@@ -466,6 +468,7 @@ public static void Save(string fileName, SmartSystemMenuSettings settings)
466468
new XAttribute("title", x.Title),
467469
new XAttribute("fileName", x.FileName),
468470
new XAttribute("arguments", x.Arguments),
471+
new XAttribute("useWindowWorkingDirectory", x.UseWindowWorkingDirectory.ToString().ToLower()),
469472
new XAttribute("runAs", x.RunAs.ToString().ToLower()),
470473
new XAttribute("showWindow", x.ShowWindow.ToString().ToLower()),
471474
new XAttribute("beginParameter", x.BeginParameter),

SmartSystemMenu/Settings/StartProgramMenuItem.cs

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class StartProgramMenuItem : ICloneable
1414

1515
public string Arguments { get; set; }
1616

17+
public bool UseWindowWorkingDirectory { get; set; }
18+
1719
public UserType RunAs { get; set; }
1820

1921
public bool ShowWindow { get; set; }
@@ -27,6 +29,7 @@ public StartProgramMenuItem()
2729
Title = string.Empty;
2830
FileName = string.Empty;
2931
Arguments = string.Empty;
32+
UseWindowWorkingDirectory = false;
3033
RunAs = UserType.Normal;
3134
ShowWindow = true;
3235
BeginParameter = string.Empty;

0 commit comments

Comments
 (0)