WshShell sl = new WshShell(); string dtpath = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)+"\\wxk.lnk"; IWshShortcut sc = (IWshShortcut)sl.CreateShortcut(dtpath); sc.TargetPath = exePath; sc.Description = "新增應用程式的捷徑方式"; sc.Save();
2015年8月31日 星期一
建立應用程式捷徑
工具:Windows Script Host Object Model ( 協力廠商 COM 元件 )
處理序(Process)資訊
1. 取得進程資訊
private void getProcessInfo()
{
try
{
listView1.Items.Clear();
Process[] MyProcesses = Process.GetProcesses(); //取得所有處理程式
tsslInfo.Text = "進程總數:" + MyProcesses.Length.ToString() //顯示處理程序總數
string[] Minfo = new string[6];
foreach(Process MyProcess in Myprocesses)
{
Minfo[0] = MyProcess.ProcessName; //程式名稱
Minfo[1] = MyProcess.MainModule.ModualName; //程式模組
Minfo[2] = MyProcess.Threads.Count.ToString(); //程式執行緒數
Minfo[3] = MyProcess.BasePriority.ToString(); //程式優先順序
Minfo[4] = Convert.ToString(MyProcess.WorkingSet / 1024 ) + "K"; //實體記憶體
Minfo[5] = Convert.ToString(MyProcess.VirtualMemorySize / 1024 ) + "K"; //虛擬記憶體
ListViewItem lvi = new ListViewItem(Minfo, "process"); //新增 ListViewItem 物件
listView1.Items.Add(lvi);
}
}
catch{}
}
2. 結束進程
private void endProcess()
{
try
{
string ProcessName = listView1.SelectItems[0].Text;
Process[] MyProcess = Process.GetProcessesByName(ProcessName); //根據程式名稱構建程式陣列
MyProcess[0].Kill(); //結束程式
}
catch
{
string ProcessName = listView1.SelectItems[0].Text;
Process[] MyProcess1 = Process.GetProcessesByName(ProcessName); //根據程式名稱構建程式陣列
MyProcess1[0].StartInfo.FileName = "cmd.exe"; //設定程式名
MyProcess1[0].StartInfo.UserShellExecute = false; //關閉Shell的使用
MyProcess1[0].StartInfo.RedirectStandardInput = ture; //重定向標準輸入
MyProcess1[0].StartInfo.RedircetStandardOutput = true; //重定向標準輸出
MyProcess1[0].StartInfo.RedirectStardardError = true; //重定向錯誤輸出
MyProcess1[0].StartInfo.CreateNoWindows = true; //設定不顯示視窗
MyProcess1[0].Start();
}
}
3. 設定優先權
private void SetBasePriority()
{
string ProcessName = listView1.SelectItems[0].Text;
Process[] MyProcess = Process.GetProcessesByName(ProcessName); //根據程式名稱構建程式陣列
switch(i)
{
case 0: MyProcess[0].PriorityClass = ProcessPriorityClass.Idle; break; //低優先順序
case 1: MyProcess[0].PriorityClass = ProcessPriorityClass.Normal; break; //標準優先順序
case 2: MyProcess[0].PriorityClass = ProcessPriorityClass.High; break; //高優先順序
case 3: MyProcess[0].PriorityClass = ProcessPriorityClass.RealTime; break; //即時優先順序
case 4: MyProcess[0].PriorityClass = ProcessPriorityClass.AboveNormal; break; //標準以上優先順序
case 5: MyProcess[0].PriorityClass = ProcessPriorityClass.BelowNormal; break; //標準以下優先順序
}
}
設定系統僅能執行的程式
e.g. 僅能執行登入編輯程式
//為註冊表新增鍵值
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","RestrictRun",1)
//向新增的鍵值中寫入資料
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\RestrictRun","1","RegEdit.exe");
清除資源回收筒
const int SHERB_NOCONFIRMATION = 0x000001; //整型常數在API中表示刪除時沒有確認對話方塊
const int SHERB_NOPROGRESSUI = 0x000002; //在API中表示不顯示刪除進度條
const int SHERB_NOSOUND = 0x00004; //在API中表示刪除完畢時不播放聲音
[DllImportAttribute("shell32.dll")] //宣告API函式
private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falge);
private void button1_click(object sender, EventArgs e)
{
//清空資源回收筒
SHEeptyRecycleBin(this.Handle, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND);
}
鍵盤事件偵測遮蔽熱鍵
事件偵測(hook)是Windows消息處理機制的一個平台,應用程式可以在上面設定子進程以監視指定視窗的某種消息,
而且所監視的視窗可以是其他進程所新增的,當消息到達後,在目標視窗處理函式之前處理它。
事件偵測機制允許應用程式截獲處理Windows消息或特定事件。
本範例透過事件偵測來遮蔽指定的系統快速鍵(如 Alt+F4 等)。
private IntPtr pKeyboardHook = IntPtr.Zero; //鍵盤事件偵測控制碼
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); //事件偵測委託宣告
private HookProc KeyboardHookProcedure; //鍵盤事件偵測委託範例不能省略變數
public const int idHook = 13; //底層鍵盤事件偵測
[DllImport("user32.dll",CallingConvention = CallingConvention.StdCall)] //安裝事件偵測函數
public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr pInstance, int threadId);
[DllImport("user32.dll",CallingConvention = CallingConvention.StdCall)] //卸載事件偵測函數
public static extern bool UnhookWindowsHookEx(IntPtr pHookHandle);
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) //鍵盤事件偵測處理函數
{
KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));
if(pKeyboardHook != IntPtr.Zero)
{
switch(((Keys)m.vkCode))
{
case Keys.LWin:
case Keys.RWin:
case Keys.Delete:
case Keys.Alt:
case Keys.Escape:
case Keys.F4:
case Keys.Control:
case Keys.Tab:
return 1;
}
}
return 0;
}
public bool InsertHook() //自訂一個安裝事件偵測的方法
{
IntPtr pIn = (IntPtr)4194304;
if(this.pKeyboardHook == IntPtr.Zero) //如果沒有安裝偵測事件
{
this.KeyboardHookProcedure = new HookProc(KeyboardHookProc);
this.pKeyboardHook = SetWindowHookEx(idHook, KeyboardHookProcedure, pIn, 0); //安裝事件偵測
if(this.pKeyboardHook == IntPtr.Zero) //如果安裝事件偵測失敗
{
this.UnInsertHook(); //卸載事件偵測
return false;
}
}
return true; //如果安裝成功則返回true
}
public bool UnInsertHook() //自訂一個卸載事件偵測的方法
{
bool result = true;
if(this.pKeyboardHook != IntPtr.Zero) //如果存在鍵盤事件偵測
{
result = (UnhookWindowsHookEx(this.pKeyboardHook) && result); //卸載事件偵測
this.pKeyboardHook = IntPtr.Zero;
}
return result;
}
如何製作背景透明
1. 首先設定表單的背景色透明
Bitmap bit;
private void Form1_Load(object sender, EventArgs e)
{
bit = new Bitmap("heart.bmp");
bit.MakeTransparent(Color.Blue);
}
2. 透過OnPaint方法來載入要在表單中顯示的圖片
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage((Image)bit, new Point(0,0));
}
2015年8月28日 星期五
取得網路資訊
取得本機網路IP:
System.Net.IPAddress[] addressList = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName( )).AddressList; string s=""; for ( int i = 0; i < addressList.Length; i++ ) { s += addressList[i].ToString( ) + "\n"; } textBox1.Text = s ; //顯示 IP
取得網卡序號:
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstance();
string str="";
foreach( ManagementObject mo in moc )
{
if((bool)mo["IPEnabled"] == true) str = mo["MacAddress"].ToString();
}
return str ; //返回網卡序號
是否存在網路:
SystemInformation.Network == true //已連上網路
== false //未連上網路
網路連線狀態:
SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.OffLine //離線
== PowerLineStatus.OnLine //連線
== PowerLineStatus.Unknown //未知
2015年8月27日 星期四
取得目錄路徑
Environment.CurrentDirectory; //現在執行目錄
Environment.GetFolderPath(Environment.SpecialFolder.Programs); // ProgramFiles目錄 Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // 邏輯桌面 Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); // 實體桌面 Environment.GetFolderPath(Environment.SpecialFolder.Startup); // 啟動程式目錄 Environment.GetFolderPath(Environment.SpecialFolder.StartMenu); // 開始功能表 Environment.GetFolderPath(Environment.SpecialFolder.Cookies); // Internet Cookies Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); // 我的電腦 Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); // 我的文件 Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); // 我的圖片 Environment.GetFolderPath(Environment.SpecialFolder.MyMusic); // 我的音樂 Environment.GetFolderPath(Environment.SpecialFolder.System); // System 目錄
Application.ExecutablePath; // EXE檔案路徑
取得電腦資訊
取得CPU資訊
private void Form_Load(object sender, EventArgs e)
{
ManagementClass mc = new ManagementClass("win32_processor"); //新增ManagementClass物件
ManagementObjectCollection moc = mc.GetInstances(); //取得CPU資訊
foreach( ManagementObject mo in moc )
{
textBox1.Text = mo["processorid"].ToString(); //取得CPU編號
}
ManagementObjectSearcher driveID = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
foreach ( ManagementObject MyXianKa in driveID.Get())
{
textBox2.Text = MyXianKa["Manufacturer"].ToString(); //取得CPU製造商名稱
textBox3.Text = MyXianKa["Version"].ToString(); //取得CPU版本號
textBox4.Text = MyXianKa["Name"].ToString(); //取得CPU產品名稱
}
}
取得磁碟機資訊
private void Form_Load(object sender, EventArgs e)
{
listBox1.Items.Clear();
SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk"); //從 WMI 中查詢資訊
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);//新增 WMI 管理物件
foreach( ManagementObject disk in searcher.Get())
{
string DriveType;
DriveType = disk["DriveType"].ToString(); //取得磁碟類型
if(DriveType=="4") //判斷磁碟機類型
listBox1.Items.Add(disk["Name"].ToString();
}
}
常用的WMI語詢語句及說明
| WMI 查詢語句 | 說明 |
| SELECT * FROM Win32_UserAccount | 取得 Windows 使用者資訊 |
| SELECT * FROM Win32_Group | 取得使用者組別資訊 |
| SELECT * FROM Win32_Process | 取得目前進程資訊 |
| SELECT * FROM Win32_Service | 取得系統服務資訊 |
| SELECT * FROM Win32_SystemDriver | 取得系統驅動資訊 |
| SELECT * FROM Win32_Processor | 取得中央處理器資訊 |
| SELECT * FROM Win32_BaseBoard | 取得主機板資訊 |
| SELECT * FROM Win32_BIOS | 取得BIOS資訊 |
| SELECT * FROM Win32_VideoController | 取得顯卡資訊 |
| SELECT * FROM Win32_SoundDevice | 取得音訊設備資訊 |
| SELECT * FROM Win32_PhysicalMemory | 取得實體記憶體資訊 |
| SELECT * FROM Win32_LogicalDisk | 取得磁碟資訊 |
| SELECT * FROM Win32_NetworkAdapter | 取得網路介面卡資訊 |
| SELECT * FROM Win32_NetworkProtocol | 取得網路通訊協定資訊 |
| SELECT * FROM Win32_Printer | 取得列印與傳真資訊 |
| SELECT * FROM Win32_Keyboard | 取得鍵盤資訊 |
| SELECT * FROM Win32_PointingDevice | 取得滑鼠資訊 |
| SELECT * FROM Win32_SerialPort | 取得串列埠資訊 |
| SELECT * FROM Win32_IDEController | 取得IDE控制器資訊 |
| SELECT * FROM Win32_FloppyController | 取得軟碟控制機資訊 |
| SELECT * FROM Win32_USBController | 取得USB控制器資訊 |
| SELECT * FROM Win32_SCSIController | 取得SCSI控制器資訊 |
| SELECT * FROM Win32_1394Controller | 取得1394控制器資訊 |
| SELECT * FROM Win32_PnPEnity | 取得隨插即用設備資訊 |
特定磁碟資訊
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:""); //查詢磁碟資訊
disk.Get(); //取得磁碟資訊
return disk.GetPropertyValue("VolumeSerialNumber").ToString(); //返回磁碟標籤
取得螢幕解析度
SystemInformation.VirtualScreen
================= 以下為 機碼操作 ====================
| NoDrives | 隱藏磁碟 | ... |
| NoThemesTab | 隱藏「主題」設定頁面 | 1 (DWORD) |
| NoPropertiesMyComputer | 禁用「我的電腦 -> 屬性」功能 | 1 (DWORD) |
| NoClose | 隱藏「關機」功能 | 1 |
| notraycontextmenu | 隱藏「右鍵功能表」功能 | 1 |
| LockTaskbar | 禁止「開始功能表」改變位置 | 1 |
機碼:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
| NoDispScrSavPage | 隱藏「螢幕保護」設定頁面 | 1 |
| NoDispAppearancePage | 隱藏「外觀」設定頁面 | 1 |
| DisableRegistryTools | 禁用「開始」功能表的「執行」 | 1 (DWORD) |
| NoRun | 隱藏「開始」功能表的「執行」 | 1 |
| DisableTaskMgr | 禁用「工作管理員」 | 1 |
| DisableCMD | 禁用命令提示字元 | 1 |
隱藏磁碟
| 鍵值項 | 鍵值 |
| NoDrives(二進位值) | |
| 00000000 (不隱藏任何磁碟) | |
| 04000000 (隱藏 C 碟) | |
| 10000000 (隱藏 F 碟) | |
| FFFFFFFF (隱藏 所有 磁碟) | |
| 21000000 (隱藏 A、F 碟) |
try
{
RegistryKey reK = Registry.CurrentUser.CreateSubKey(@"Software"\Microsoft\Windows\CurrentVersion\Policies\Explorer");
reK.SetValue("NoDrives",new byte[]{ 04, 00, 00, 00}, RegistryValueKind.Binary); //隱藏 C 碟
}
catch{}
2012年12月27日 星期四
DataGridView 事件順序
「DataGridView」當中的「Cell」事件,
真是被搞的頭大,
觸發時機點很多,
要寫不少code去控制住,
而「Cell」也讓我很痛在心裡口難開,
順手記下幾個常用的Cell事件及順序。
- CellEnter-發生於 DataGridView 控制項中的目前儲存格變更時,或是當控制項收到輸入焦點時。
- CellBeginEdit -發生於選定的儲存格開始編輯模式時。
- CellEndEdit-發生於目前所選的儲存格停止編輯模式時。
- CellValidating-發生於儲存格失去輸入焦點、啟用內容驗證時。
- CellValueChanged-發生於儲存格的值變更時。
- CellValidated -發生在儲存格完成驗證之後。
- CellLeave-發生於儲存格失去輸入焦點,且不再是目前儲存格時。
正則表示法
^ : 表示一行文字的『開始位置』。如:"^Cat", 匹配的單詞Cat出現在行的開始處。
$ : 表示一行文字的『結束位置』。如:"Cat$" 匹配的單詞Cat出現來一行的結尾處。
[]:表示匹配括弧中字元『其中一個』。如:"[0123456789]"將匹配數位0到9的任何一個。
[]中的"^"符號:不再是前面說的位置符號,這裏它是『否定符號』
".":點字元出現在運算式中,表示匹配『任何字元』。
"|":某些字元中『可選擇』,我們可以採用選項字元。
"()":圓括號在運算式中也是被作『?』元字元使用
================================================================
例:
html中的<H1><H2><H3><H4><H5><H6>的標簽 :可寫成 "<H[123456]>" 或 "<H[1-6]>"
例:
匹配數位字元、小寫26個字母和大寫26個字母中的一個:可寫成 "[0-9a-zA-Z]"
例:
表示不包含數位0到9的字元。:"[^0-9]"
例:
"07.04.76":將匹配形如:07/04/76, 07-04-76,07.04.76。
例:
"[Bob|Robert]":則表示Bob或者Robert將被匹配。
例:
"^(From|Subject|Data): ":在電子郵件中查找所有以「From:」或者「Subject:」或者「Date:」開頭的行
例:
"q[^u]":
Iraqi
Iraqian
miqra
qasida
qintar
qoph
zaqqum
訂閱:
文章 (Atom)