\r
#region ExtraIcon関連\r
\r
- [DllImport("shell32.dll")]\r
- private static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);\r
- \r
- [DllImport("user32.dll", SetLastError=true)]\r
- [return: MarshalAs(UnmanagedType.Bool)]\r
- private static extern bool DestroyIcon(IntPtr hIcon);\r
- \r
- /// <summary>\r
- /// アイコンファイル(実行ファイル・DLL)を開いてアイコンを作る\r
- /// </summary>\r
- /// <remarks>内部でコピーされるのでWin32APIのDestroyIconを使わないでいいが、やや遅い動作</remarks>\r
- /// <param name="form">ハンドラ</param>\r
- /// <param name="lpszExeFileName">対象ファイル</param>\r
- /// <param name="nIconIndex">アイコンインデックス</param>\r
- /// <returns>生成されたアイコン</returns>\r
- public static Icon ExtractIcon(Form form, string lpszExeFileName, uint nIconIndex)\r
- {\r
- Icon ico = null;\r
- \r
- if (! File.Exists(lpszExeFileName)) {\r
- ico = Icon.ExtractAssociatedIcon(lpszExeFileName); // ExtractAssociatedIconに例外を吐いてもらう\r
- } else {\r
- IntPtr hInst = (form != null)? form.Handle : IntPtr.Zero;\r
- IntPtr hIcon = IntPtr.Zero;\r
- \r
- try {\r
- hIcon = ExtractIcon(hInst, lpszExeFileName, (int) nIconIndex);\r
- if ((hIcon != IntPtr.Zero) && (hIcon.ToInt32() != 2)) {\r
- ico = (Icon) Icon.FromHandle(hIcon).Clone();\r
- DestroyIcon(hIcon);\r
- }\r
- } catch (System.Runtime.InteropServices.COMException) {\r
- // ExtraIconのP/Invoke失敗時用\r
- }\r
- }\r
- return ico;\r
- }\r
- \r
/// <summary>\r
/// アイコンファイル(実行ファイル・DLL)を開いてアイコンを作る\r
/// </summary>\r
int index = lpszExeFileNameAndIndex.LastIndexOf(',');\r
if (index >= 0) {\r
uint nIconIndex = uint.Parse(lpszExeFileNameAndIndex.Substring(index+1));\r
- return ExtractIcon(form, lpszExeFileNameAndIndex.Substring(0, index), nIconIndex);\r
+ return NativeMethods.ExtractIcon(form, lpszExeFileNameAndIndex.Substring(0, index), nIconIndex);\r
} else {\r
return Icon.ExtractAssociatedIcon(lpszExeFileNameAndIndex);\r
}\r
{\r
// Vista以降ならば、SHGetStockIconInfo(SIID_FOLDER, SHGSI_ICON, &sInfo); をP/Invoke呼び出しするのが王道かと\r
string windir = Environment.GetEnvironmentVariable("windir");\r
- return ExtractIcon(null, Path.Combine(windir, @"system32\shell32.dll"), 3);\r
+ return NativeMethods.ExtractIcon(null, Path.Combine(windir, @"system32\shell32.dll"), 3);\r
}\r
\r
#endregion\r
0, 0, img.Width, img.Height,\r
GraphicsUnit.Pixel, ia);\r
}\r
-\r
+ \r
#endregion\r
\r
#region CheckedListBox関連\r
using System;\r
using System.Runtime.InteropServices;\r
using System.Windows.Forms;\r
+using System.Drawing;\r
\r
namespace AppliStation.Util\r
{\r
\r
#endregion\r
\r
+ #region アイコン関連\r
+ \r
+ [DllImport("shell32.dll")]\r
+ private static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);\r
+ \r
+ [DllImport("user32.dll", SetLastError=true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ private static extern bool DestroyIcon(IntPtr hIcon);\r
+ \r
+ \r
+ /// <summary>\r
+ /// アイコンファイル(実行ファイル・DLL)を開いてアイコンを作る\r
+ /// </summary>\r
+ /// <remarks>内部でコピーされるのでWin32APIのDestroyIconを使わないでいいが、やや遅い動作</remarks>\r
+ /// <param name="form">ハンドラ</param>\r
+ /// <param name="lpszExeFileName">対象ファイル</param>\r
+ /// <param name="nIconIndex">アイコンインデックス</param>\r
+ /// <returns>生成されたアイコン</returns>\r
+ public static Icon ExtractIcon(Form form, string lpszExeFileName, uint nIconIndex)\r
+ {\r
+ Icon ico = null;\r
+ \r
+ if (! System.IO.File.Exists(lpszExeFileName)) {\r
+ ico = Icon.ExtractAssociatedIcon(lpszExeFileName); // ExtractAssociatedIconに例外を吐いてもらう\r
+ } else {\r
+ IntPtr hInst = (form != null)? form.Handle : IntPtr.Zero;\r
+ IntPtr hIcon = IntPtr.Zero;\r
+ \r
+ try {\r
+ hIcon = ExtractIcon(hInst, lpszExeFileName, (int) nIconIndex);\r
+ if ((hIcon != IntPtr.Zero) && (hIcon.ToInt32() != 2)) {\r
+ ico = (Icon) Icon.FromHandle(hIcon).Clone();\r
+ DestroyIcon(hIcon);\r
+ }\r
+ } catch (System.Runtime.InteropServices.COMException) {\r
+ // ExtraIconのP/Invoke失敗時用\r
+ }\r
+ }\r
+ return ico;\r
+ }\r
+ \r
+ /// <summary>\r
+ /// ユーザ昇格が必要か設定し、設定必要なときシールドアイコンを表示する。\r
+ /// </summary>\r
+ /// <param name="button">対象のボタン</param>\r
+ /// <param name="required">ユーザ昇格が必要か否か、すなわちシールドアイコンを表示するか</param> \r
+ public static void Button_SetElevationRequiredState(Button button, bool required)\r
+ {\r
+ if (Environment.OSVersion.Version.Major >= 6) {\r
+ button.FlatStyle = FlatStyle.System;\r
+ // SendMessage(hWnd, BCM_SETSHIELD, 0, required);\r
+ SendMessage(button.Handle, 0x160C, 0, (required)? 1u : 0u);\r
+ } else { // Legacy OS\r
+ // FlatStyle.System に設定されている場合、Image プロパティに割り当てられているイメージは表示されない対策\r
+ if (button.FlatStyle == FlatStyle.System) {\r
+ button.FlatStyle = FlatStyle.Standard;\r
+ }\r
+ \r
+ button.TextImageRelation = TextImageRelation.ImageBeforeText;\r
+ button.ImageAlign = ContentAlignment.MiddleLeft;\r
+ using (Icon ico = new Icon(SystemIcons.Shield, 16, 16)) {\r
+ button.Image = ico.ToBitmap();\r
+ }\r
+ button.AutoSize = true;\r
+ }\r
+ }\r
+ \r
+ #endregion\r
+ \r
[DllImport("user32.dll", CharSet=CharSet.Auto)]\r
internal static extern IntPtr SendMessage( IntPtr hWnd, UInt32 Msg, UInt32 wParam, UInt32 lParam);\r
\r
// \r
this.okButton.AutoSize = true;\r
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;\r
- this.okButton.Image = ((System.Drawing.Image)(resources.GetObject("okButton.Image")));\r
this.okButton.Location = new System.Drawing.Point(135, 3);\r
this.okButton.Name = "okButton";\r
this.okButton.Size = new System.Drawing.Size(86, 23);\r
this.okButton.TabIndex = 0;\r
this.okButton.Text = "インストール";\r
- this.okButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
// \r
// cancelButton\r
// \r
\r
private void updateUseRunas()\r
{\r
- if (UseRunas) {\r
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallationConfirmForm));\r
- okButton.Image = ((System.Drawing.Bitmap)(resources.GetObject("okButton.Image")));\r
- } else {\r
- okButton.Image = null;\r
- }\r
+ AppliStation.Util.NativeMethods.Button_SetElevationRequiredState(okButton, UseRunas);\r
}\r
\r
#endregion\r
<resheader name="writer">\r
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
</resheader>\r
- <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
- <data name="okButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
- <value>\r
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApdJREFUOE+Fk21I\r
- k1EUx61vgRX0wYqc4mi+JOqoD4WV9oJKpC5fM6m1QKdJEpVCTZFCmpl92FaNEicJlWUffGtEy2eS5sbQ\r
- 9mIlFRWIIk60TZuYpPt37mgy6QEf+MPl3P/53XPPc+66IJ5PqVRGBwcHv/B6vSLaXk/fiMfjSVMoFE4+\r
- /0qMEqNaWlpadTrdvNFohM1m84mtGxsbPbTXRp7I/yAULFSr1d9UKpXHZDKBafnDEJaeNaPpkQzlHfmw\r
- WCy+OHnmNRqNneUEnjxhtVq97DT342YsDvRg8XU7FjQ3Uf8wAyVdWSh6KkGe5qivIvKCAO5AwIzdbseP\r
- qmuYuV2Dn1olZq9XwC3Nw+VbeyF5nozM5v1IvbMb+xRRPggB5lYBWHD0ghyTFcWYKMrBZOIeOAUCyKp3\r
- IuZBBBJUYRDf2AFh+WZewDSrYKr0NGZl6ZiKDYUrKAi/SKcUEdhyPxzRd0VIaBAhrHIbL2DM4XDgo7QQ\r
- X9KOwBqyHcMbt+JzaCTOV+3CwdZ4HH8ihkSXgCRlmB8wFniFDqrAmyVrQsGZe8jMrcehjAak5KvRbZDD\r
- 8TURw58OY3goGe9fRsFsNi9TD14FAmoMBsOfpKscQuRGhF7isKGkB5vK3qCvrxxwpwLOE8BoOtAXC71e\r
- P0OA2hVAXV1djFarHWeNFEk7ESfvRPi5TgiLu2B5R4CpY8B4LjBC16NfSN7vBBCuGigK2FgjcyrbIDrb\r
- jQhpF4RFepj6CeDMBsYkcA0c8M+AgW8aBQRxsSqyq/SIL+MgvshhoP8K4CrF3EiBv3nT5BPwvgnaOEn6\r
- zSBsbFNqzRgcrPat/w3PIvOs9aAYZKG3t3flMXEcxyZvYc1kP5mMcSQzaYnEkt+SYvhO/gusfu3mrz6d\r
- pwAAAABJRU5ErkJggg==\r
-</value>\r
- </data>\r
- <metadata name="instListViewContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
- <value>17, 17</value>\r
- </metadata>\r
- <metadata name="instListViewSilentInstallImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
- <value>225, 17</value>\r
- </metadata>\r
<data name="instListViewSilentInstallImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">\r
<value>\r
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w\r
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACo\r
- BAAAAk1TRnQBSQFMAwEBAAEEAQABBAEAAQ4BAAEOAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABOAMA\r
+ BAAAAk1TRnQBSQFMAwEBAAEEAQABBAEAAQ4BAAEOAQAE/wEhARAI/wFCAU0BNgcAATYDAAEoAwABOAMA\r
AQ4DAAEBAQABIAUAAUABDB4AAwIBAwMSARkBIgIhATEDLAFEAVwCUAGwAXkBPAFRAekBewE9AU8B6AF6\r
AUEBTAHkAXkBQwFNAeIBfAFDAU8B4wFVAk4BobAAAw4BEwFRAkwBlgFlAlABwgF1AU0BSgHWAXkCSAHc\r
AVYBIgGQAfsCRAHxAf8CUQHyAf8CJAHvAf8CRgHyAf8CTQHyAf8BfAFDAU8B46wAAwEBAgFbAlEBrQGd\r
AYUBxAHtAf8BeAHAAewB/wFRAa4B5gH/ATEBnwHhAf8BQwJBAXXDAAEBAWQCUQG+AUcBqQHlAf8BUgGv\r
AeYB/wFOAawB5QH/AT4BpQHjAf8BbgJRAc4DBgEIxAADCgENAVMCTAGaAXACUAHQAXICTwHUAVUCTgGh\r
AxEBF7gAAUIBTQE+BwABPgMAASgDAAE4AwABDgMAAQEBAAEBBQABcBcAA/8BAAHgBwABwAcAAYAHAAGA\r
- BwABgAcAAYAHAAHABwABwAEMBgAB4AEcBgAB4AEcBgAB4AEcBgAB4AEcBgAB4AEcBgAB8AE8BgAL\r
+ BwABgAcAAYAHAAHABwABwAEMBgAB4AEcBgAB4AEcBgAB4AEcBgAB4AEcBgAB4AEcBgAB8AE8HAAL\r
</value>\r
</data>\r
+ <metadata name="instListViewContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="instListViewSilentInstallImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>225, 17</value>\r
+ </metadata>\r
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
<value>45</value>\r
</metadata>\r
// \r
this.okButton.AutoSize = true;\r
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;\r
- this.okButton.Image = ((System.Drawing.Image)(resources.GetObject("okButton.Image")));\r
this.okButton.Location = new System.Drawing.Point(135, 3);\r
this.okButton.Name = "okButton";\r
this.okButton.Size = new System.Drawing.Size(104, 23);\r
this.okButton.TabIndex = 0;\r
this.okButton.Text = "アンインストール";\r
- this.okButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
// \r
// cancelButton\r
// \r
\r
private void updateUseRunas()\r
{\r
- if (UseRunas) {\r
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallationConfirmForm));\r
- okButton.Image = ((System.Drawing.Bitmap)(resources.GetObject("okButton.Image")));\r
- } else {\r
- okButton.Image = null;\r
- }\r
+ AppliStation.Util.NativeMethods.Button_SetElevationRequiredState(okButton, UseRunas);\r
}\r
\r
#endregion\r
<resheader name="writer">\r
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
</resheader>\r
- <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
- <data name="okButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
- <value>\r
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
- YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApdJREFUOE+Fk21I\r
- k1EUx61vgRX0wYqc4mi+JOqoD4WV9oJKpC5fM6m1QKdJEpVCTZFCmpl92FaNEicJlWUffGtEy2eS5sbQ\r
- 9mIlFRWIIk60TZuYpPt37mgy6QEf+MPl3P/53XPPc+66IJ5PqVRGBwcHv/B6vSLaXk/fiMfjSVMoFE4+\r
- /0qMEqNaWlpadTrdvNFohM1m84mtGxsbPbTXRp7I/yAULFSr1d9UKpXHZDKBafnDEJaeNaPpkQzlHfmw\r
- WCy+OHnmNRqNneUEnjxhtVq97DT342YsDvRg8XU7FjQ3Uf8wAyVdWSh6KkGe5qivIvKCAO5AwIzdbseP\r
- qmuYuV2Dn1olZq9XwC3Nw+VbeyF5nozM5v1IvbMb+xRRPggB5lYBWHD0ghyTFcWYKMrBZOIeOAUCyKp3\r
- IuZBBBJUYRDf2AFh+WZewDSrYKr0NGZl6ZiKDYUrKAi/SKcUEdhyPxzRd0VIaBAhrHIbL2DM4XDgo7QQ\r
- X9KOwBqyHcMbt+JzaCTOV+3CwdZ4HH8ihkSXgCRlmB8wFniFDqrAmyVrQsGZe8jMrcehjAak5KvRbZDD\r
- 8TURw58OY3goGe9fRsFsNi9TD14FAmoMBsOfpKscQuRGhF7isKGkB5vK3qCvrxxwpwLOE8BoOtAXC71e\r
- P0OA2hVAXV1djFarHWeNFEk7ESfvRPi5TgiLu2B5R4CpY8B4LjBC16NfSN7vBBCuGigK2FgjcyrbIDrb\r
- jQhpF4RFepj6CeDMBsYkcA0c8M+AgW8aBQRxsSqyq/SIL+MgvshhoP8K4CrF3EiBv3nT5BPwvgnaOEn6\r
- zSBsbFNqzRgcrPat/w3PIvOs9aAYZKG3t3flMXEcxyZvYc1kP5mMcSQzaYnEkt+SYvhO/gusfu3mrz6d\r
- pwAAAABJRU5ErkJggg==\r
-</value>\r
- </data>\r
</root>
\ No newline at end of file