葛藤プログラマの一日

2007-12-13

.NETでのLOGFONTの使い方

例えば、TextBox.Font

private LogFont _logFont = new LogFont();


public override Font Font {
get {
return base.Font;
}
set {
value.ToLogFont(_logFont);
_logFont.lfEscapement = 2700; // 文字列の傾き。反時計回りの角度
_logFont.lfFaceName = "@" + value.Name;
base.Font = Font.FromLogFont(_logFont);
}
}


// CharSetをUnicodeで指定すること!
//(そうしないと、lfFaceNameが正しく取得されない)
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
internal class LogFont
{
internal int lfHeight;
internal int lfWidth;
internal int lfEscapement;
internal int lfOrientation;
internal int lfWeight;
internal byte lfItalic;
internal byte lfUnderline;
internal byte lfStrikeOut;
internal byte lfCharSet;
internal byte lfOutPrecision;
internal byte lfClipPrecision;
internal byte lfQuality;
internal byte lfPitchAndFamily;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
internal string lfFaceName;
}



2007-12-05

USBメモリのドライブの確認方法

private bool CheckDriveLetterUsbAndRemovable(string drive) {
if (!drive.Contains(":")) {
drive += ":";
}

string[] partitionInfoArray;
string driveNumber = null;
string driveLetter = null;
string physicalDiskPartitionInfo = null;
string logicalDiskPartitionInfo = null;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");

foreach (ManagementObject mo in searcher.Get()) {
// 論理ドライブ
logicalDiskPartitionInfo = mo["Dependent"].ToString();
// Win32_LogicalDisk
ManagementObject dm = new ManagementObject(logicalDiskPartitionInfo);
driveLetter = dm["DeviceID"].ToString();
UInt32 driveType = (UInt32)dm["DriveType"];
//string caption = dm["Caption"].ToString();
//string description = dm["Description"].ToString();

if (driveLetter != drive)
continue;
// リムーバブルドライブか確認
if (driveType != 2)
continue;

// 物理ドライブ
physicalDiskPartitionInfo = mo["Antecedent"].ToString();
// Win32_DiskPartition
ManagementObject pd = new ManagementObject(physicalDiskPartitionInfo);
driveNumber = pd["DiskIndex"].ToString();
//string dIndex = pd["Index"].ToString();
//string dDviceId = pd["DeviceID"].ToString();

ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject disk in disks.Get()) {
string disk_InterfaceType = disk["InterfaceType"].ToString();
string disk_Name = disk["Name"].ToString();
//string disk_MediaType = disk["MediaType"].ToString();
// USBインターフェースで、物理ドライブが一致したらOK
if ((disk_InterfaceType == "USB") & (disk_Name == "\\\\.\\PHYSICALDRIVE" + driveNumber)) {
return true;
}
}
}
return false;
}