[return: MarshalAs(UnmanagedType.Bool)]\r
static extern bool GetExitCodeProcess(IntPtr hProcess, out int lpExitCode);\r
\r
+ #region 優先度関連\r
+ \r
+ [DllImport("kernel32.dll")]\r
+ static extern uint GetPriorityClass(IntPtr hProcess);\r
+ \r
+ [DllImport("kernel32.dll")]\r
+ static extern bool SetPriorityClass(IntPtr hProcess, uint dwPriorityClass);\r
+ \r
+ #endregion\r
+ \r
#region 権限降格関連\r
\r
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError=true)]\r
}\r
}\r
\r
- private bool _CreateProcessAsNormalUser(string lpApplicationName,\r
+ private static bool _CreateProcessAsNormalUser(string lpApplicationName,\r
string lpCommandLine,\r
/* ref SECURITY_ATTRIBUTES lpProcessAttributes, */\r
IntPtr lpProcessAttributes,\r
\r
lpProcessInformation = new PROCESS_INFORMATION(); /* fake */\r
try {\r
+ uint result;\r
+ \r
IntPtr hwndShell = FindWindow("Progman", null);\r
uint dwProcessId;\r
- GetWindowThreadProcessId(hwndShell, out dwProcessId);\r
+ result = GetWindowThreadProcessId(hwndShell, out dwProcessId);\r
+ if (result == 0) {\r
+ throw new System.ComponentModel.Win32Exception();\r
+ }\r
+ \r
Process procShell = Process.GetProcessById((int) dwProcessId);\r
if (procShell == null) {\r
return false;\r
}\r
\r
/// <summary>\r
+ /// プロセスの優先度を取得または設定します。\r
+ /// </summary>\r
+ public ProcessPriorityClass PriorityClass {\r
+ get {\r
+ return (ProcessPriorityClass) GetPriorityClass(pi.hProcess);\r
+ }\r
+ set {\r
+ SetPriorityClass(pi.hProcess, (uint) value);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
/// プロセスのハンドルを開放する\r
/// </summary>\r
public void Dispose()\r
if (pi.hProcess != IntPtr.Zero) {\r
CloseHandle(pi.hProcess);\r
}\r
+ GC.SuppressFinalize(this);\r
}\r
\r
+ \r
+ \r
}\r
}\r