先前也寫過一篇 監控 USB 插拔的文章,見 http://kuomingwang.blogspot.com/2010/09/c-usb.html
但是那是監控已知的 USB 儲存設備,最近又有類似的需求,這算是另一種寫法。
//using System.Management;
ManagementEventWatcher mew = null;
private void Form1_Load(object sender, EventArgs e)
{
mew = new ManagementEventWatcher("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA \"Win32_DiskDrive\"");
mew.Start();
mew.EventArrived += new EventArrivedEventHandler(mew_go);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mew.Stop();
}
private void mew_go(object sender, System.Management.EventArrivedEventArgs e)
{
ManagementBaseObject newEvent = e.NewEvent, newEventTarget = (newEvent["TargetInstance"] as ManagementBaseObject);
if (newEventTarget["InterfaceType"].ToString() == "USB")
{
switch (newEvent.ClassPath.ClassName)
{
case "__InstanceCreationEvent":
Listbox_text_Update(listBox1, Convert.ToString(newEventTarget["Caption"])+" 裝置已插入");
break;
case "__InstanceDeletionEvent":
Listbox_text_Update(listBox1, Convert.ToString(newEventTarget["Caption"])+" 裝置已退出");
break;
}
}
}
public static void Listbox_text_Update(ListBox lbox, string s)
{
if (lbox.InvokeRequired)
{
lbox.BeginInvoke(new MethodInvoker(() => Listbox_text_Update(lbox, s)));
}
else
{
lbox.Items.Add(s);
}
}
2011年8月31日 星期三
2011年8月17日 星期三
[C#] 如何變更本機電腦日期、變更本機電腦時間,來作 時間同步校正
主要需求是因為 有些 Client 端 PC 都是服役多年的老 PC 所以 BIOS 電池都沒力了,又懶得一台一台換。
所以直接從 SQL Server 端 作時間的校正。
[DllImport("Kernel32.dll")]
private extern static uint SetLocalTime(ref SYSTEMTIME lpSystemTime);
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
public void SetTime(DateTime SqlServerTime)
{
SYSTEMTIME st = new SYSTEMTIME();
st.wYear = Convert.ToUInt16(SqlServerTime.Year);
st.wMonth = Convert.ToUInt16(SqlServerTime.Month);
st.wDay = Convert.ToUInt16(SqlServerTime.Day);
st.wHour = Convert.ToUInt16(SqlServerTime.Hour);
st.wMilliseconds = Convert.ToUInt16(SqlServerTime.Millisecond);
st.wMinute = Convert.ToUInt16(SqlServerTime.Minute);
st.wSecond = Convert.ToUInt16(SqlServerTime.Second);
SetLocalTime(ref st);
}
//使用時
ChangeLocalDateTime CLDT = new ChangeLocalDateTime();
CLDT.SetTime(db_dt); //db_dt 是指從 SQL Server 取回來的 GETDATE()
所以直接從 SQL Server 端 作時間的校正。
[DllImport("Kernel32.dll")]
private extern static uint SetLocalTime(ref SYSTEMTIME lpSystemTime);
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
public void SetTime(DateTime SqlServerTime)
{
SYSTEMTIME st = new SYSTEMTIME();
st.wYear = Convert.ToUInt16(SqlServerTime.Year);
st.wMonth = Convert.ToUInt16(SqlServerTime.Month);
st.wDay = Convert.ToUInt16(SqlServerTime.Day);
st.wHour = Convert.ToUInt16(SqlServerTime.Hour);
st.wMilliseconds = Convert.ToUInt16(SqlServerTime.Millisecond);
st.wMinute = Convert.ToUInt16(SqlServerTime.Minute);
st.wSecond = Convert.ToUInt16(SqlServerTime.Second);
SetLocalTime(ref st);
}
//使用時
ChangeLocalDateTime CLDT = new ChangeLocalDateTime();
CLDT.SetTime(db_dt); //db_dt 是指從 SQL Server 取回來的 GETDATE()
標籤:
C#
2011年6月3日 星期五
[C#] 取得本機 網路介面卡名稱、網路名稱
作業上有用到 作個筆記
//取得 網路名稱 例如:中華電信
private void dd()
{
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in interfaces)
{
comboBox2.Items.Add(adapter.Name.ToString());
}
}
//取得 網路介面卡名稱
private void GetAdtInfo()
{
string strQry = "Select * from Win32_NetworkAdapterConfiguration";
ManagementObjectSearcher objSc = new ManagementObjectSearcher(strQry);
ArrayList ar = new ArrayList();
foreach (ManagementObject objQry in objSc.Get())
{
comboBox1.Items.Add(objQry["Description"]);
}
}
//取得 網路名稱 例如:中華電信
private void dd()
{
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in interfaces)
{
comboBox2.Items.Add(adapter.Name.ToString());
}
}
//取得 網路介面卡名稱
private void GetAdtInfo()
{
string strQry = "Select * from Win32_NetworkAdapterConfiguration";
ManagementObjectSearcher objSc = new ManagementObjectSearcher(strQry);
ArrayList ar = new ArrayList();
foreach (ManagementObject objQry in objSc.Get())
{
comboBox1.Items.Add(objQry["Description"]);
}
}
標籤:
C#
2011年5月16日 星期一
[C#] String 處理, 簡體 轉 繁體
有兩種作法 , 第一種 是引用 Microsoft.VisualBasic ,第二種 是引用 作業系統 Dll
但是第一種 有時候轉完 會出現?號,原因不明 (時間關係 所以沒繼續追 下去)
1.)
Microsoft.VisualBasic 加入參考
private string CHT_TO_BIG5(string str)
{
return Microsoft.VisualBasic.Strings.StrConv(str, Microsoft.VisualBasic.VbStrConv.TraditionalChinese, 0);
}
2.)
//字串轉 繁體 使用
internal const int LOCALE_SYSTEM_DEFAULT = 0x0800;
internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest);
private string String_To_BIG5(string str)
{
String tTarget = new String(' ', str.Length);
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, str, str.Length, tTarget, str.Length);
return tTarget;
}
但是第一種 有時候轉完 會出現?號,原因不明 (時間關係 所以沒繼續追 下去)
1.)
Microsoft.VisualBasic 加入參考
private string CHT_TO_BIG5(string str)
{
return Microsoft.VisualBasic.Strings.StrConv(str, Microsoft.VisualBasic.VbStrConv.TraditionalChinese, 0);
}
2.)
//字串轉 繁體 使用
internal const int LOCALE_SYSTEM_DEFAULT = 0x0800;
internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest);
private string String_To_BIG5(string str)
{
String tTarget = new String(' ', str.Length);
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, str, str.Length, tTarget, str.Length);
return tTarget;
}
標籤:
C#
[Other] 利用Reg.exe 快速開啟/關閉 螢幕保護程式
因為工作上的需求 需要能夠 快速開啟/關閉 螢幕保護程式
//這一行是將 螢幕保護 指定開啟 C:\Windows\system32\scrnsave.scr
reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t reg_sz /d C:\Windows\system32\scrnsave.scr /f
//指定系統閒置 300秒 開啟螢幕保護啟動
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t reg_sz /d 300 /f
//開啟 若設為0 表示關閉
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t reg_sz /d 1 /f
//這一行是將 螢幕保護 指定開啟 C:\Windows\system32\scrnsave.scr
reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t reg_sz /d C:\Windows\system32\scrnsave.scr /f
//指定系統閒置 300秒 開啟螢幕保護啟動
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t reg_sz /d 300 /f
//開啟 若設為0 表示關閉
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t reg_sz /d 1 /f
標籤:
Other
訂閱:
文章 (Atom)