使用 "效能計數器" 取得 CPU 使用率,但此方法如果有相同名稱,就無法取得所要項目的使用率。
程式碼如下:
using System;
using System.Diagnostics;
namespace Test
{
class Program
{
static void Main(string[] args)
{
UsingProcess("OUTLOOK");
}
static void UsingProcess(string pname)
{
using (var pro = Process.GetProcessesByName(pname)[0])
{
PerformanceCounter pf = new PerformanceCounter(); //性能計數器
pf.CategoryName = "Process";
pf.CounterName = "% Processor Time";
pf.InstanceName = pro.ProcessName;
pf.MachineName = ".";
while (true)
{
Console.WriteLine("RAM:" + (Convert.ToInt64(pro.WorkingSet64.ToString()) / 1024).ToString() + " CPU:" + Math.Round(pf.NextValue(), 2).ToString() + "%");
System.Threading.Thread.Sleep(1000);
}
}
}
}
}.Net 並無法直接取得 Process 的 CPU使用率,所以利用 Process 在某時間區段內,CPU的使用時間來計算,即可得到 CPU 使用率。
CPU使用率 = 某時間取段 CPU 使用時間 / CPU 邏輯數量 程式碼如下:
using System;
using System.Diagnostics;
namespace Test
{
class Program
{
static void Main(string[] args)
{
UsingProcess("taskmgr");
}
static void UsingProcess(string pname)
{
using (var pro = Process.GetProcessesByName(pname)[0])
{
int interval = 1000; //間格時間
while (true)
{
var ProcessorTime = pro.TotalProcessorTime;
System.Threading.Thread.Sleep(interval);
var value = (pro.TotalProcessorTime - ProcessorTime).TotalMilliseconds / interval / Environment.ProcessorCount * 100;
Console.WriteLine(value);
}
}
}
}
}假如要儲存的檔案名稱,包含特殊字元會造成無法儲存,只需透過 Path.InvalidPathChars 即可查出特殊字元,就可去除瞜。
foreach (char c in Path.InvalidPathChars)
DatName = "檔案名稱".Replace(c.ToString(), "").Trim();透過 Graphics 中的 CopyFromScreen 即可達到複製螢幕功能!
全螢幕擷取到檔案:
Bitmap myImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(myImage);
g.CopyFromScreen(new Point(0,0), new Point(0, 0), new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
IntPtr dc1 = g.GetHdc();
g.ReleaseHdc(dc1);
myImage.Save(@"c:\screen.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);帶入 Process ID 取得使用者名稱:
public string GetProcessOwner(int processId)
{
string query = "Select * From Win32_Process Where ProcessID = " + processId;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject obj in processList)
{
string[] argList = new string[] { string.Empty, string.Empty };
int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
{
// return DOMAIN\user
return argList[1] + "\\" + argList[0];
}
}
return "NO OWNER";
}方式一:效率較快!
/// <summary>
/// 加密
/// </summary>
/// <param name="original">字串</param>
/// <returns>回傳加密結果</returns>
public string Encrypt(string Str)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytes = md5.ComputeHash(Encoding.Default.GetBytes(Str));
return BitConverter.ToString(bytes).Replace("-", string.Empty);
}首先下載 FreeImage:
本地下載:FreeImage
官方下載:http://freeimage.sourceforge.net/
將 FreeImageNET.dll 加入參考,即可開始利用 FreeImage 讀寫圖檔。
//讀出PCX圖檔到Image
FREE_IMAGE_FORMAT FIF = FREE_IMAGE_FORMAT.FIF_PCX;
Image IMG = FreeImage.LoadBitmap("檔案路徑", FREE_IMAGE_LOAD_FLAGS.DEFAULT, ref FIF);
//讀出BMP圖檔到Image
FREE_IMAGE_FORMAT FIF = FREE_IMAGE_FORMAT.FIF_BMP;
Image IMG = FreeImage.LoadBitmap("檔案路徑", FREE_IMAGE_LOAD_FLAGS.DEFAULT, ref FIF);官方有提供 Sample 喔,自己研究吧!
.Net 已經內建控制滑鼠位置的指令:
Cursor.Position = new Point(30, 60); //X Y軸位置
如果要點擊滑鼠就需要透過WinAPI才能達到:
首先建立一個Class:
using System.Threading;
using System.Runtime.InteropServices;
using System;
namespace Test
{
static public class Mouse
{
[DllImport("user32.dll", SetLastError = true)]
public static extern Int32 SendInput(Int32 cInputs, ref INPUT pInputs, Int32 cbSize);
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 28)]
public struct INPUT
{
[FieldOffset(0)]
public INPUTTYPE dwType;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public KEYBOARDINPUT ki;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MOUSEINPUT
{
public Int32 dx;
public Int32 dy;
public Int32 mouseData;
public MOUSEFLAG dwFlags;
public Int32 time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct KEYBOARDINPUT
{
public Int16 wVk;
public Int16 wScan;
public KEYBOARDFLAG dwFlags;
public Int32 time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct HARDWAREINPUT
{
public Int32 uMsg;
public Int16 wParamL;
public Int16 wParamH;
}
public enum INPUTTYPE : int
{
Mouse = 0,
Keyboard = 1,
Hardware = 2
}
[Flags()]
public enum MOUSEFLAG : int
{
MOVE = 0x1,
LEFTDOWN = 0x2,
LEFTUP = 0x4,
RIGHTDOWN = 0x8,
RIGHTUP = 0x10,
MIDDLEDOWN = 0x20,
MIDDLEUP = 0x40,
XDOWN = 0x80,
XUP = 0x100,
VIRTUALDESK = 0x400,
WHEEL = 0x800,
ABSOLUTE = 0x8000
}
[Flags()]
public enum KEYBOARDFLAG : int
{
EXTENDEDKEY = 1,
KEYUP = 2,
UNICODE = 4,
SCANCODE = 8
}
}
}利用 SendKeys.Send 即可 輸入文字 或 發送某個按鍵。
SendKeys.Send("文字"); //發送文字
SendKeys.Send("{ENTER}"); //發送Enter按鍵當使用 SevenZipSharp 出現 Can not load 7-zip library or internal COM error
只需加入以下這行,指定 DLL 位置即可!
SevenZipCompressor.SetLibraryPath(Server.MapPath("~/bin/7z.dll"));
