using System; using System.Security.Cryptography;
namespace ArLi.CommonPrj { public sealed class RandomStr {
/******** * Const and Function * ********/
private static readonly int defaultLength = 8;
private static int GetNewSeed(){ byte[] rndBytes = new byte[4]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(rndBytes); return BitConverter.ToInt32(rndBytes,0); }
/******** * getRndCode of all char . * ********/
private static string BuildRndCodeAll(int strLen) { System.Random RandomObj = new System.Random(GetNewSeed()); string buildRndCodeReturn = null; for(int i=0; i<strLen; i++) { buildRndCodeReturn += (char)RandomObj.Next(33,125); } return buildRndCodeReturn; }
public static string GetRndStrOfAll() { return BuildRndCodeAll(defaultLength); }
public static string GetRndStrOfAll(int LenOf) { return BuildRndCodeAll(LenOf); }
/******** * getRndCode of only . * ********/
private static string sCharLow = "abcdefghijklmnopqrstuvwxyz"; private static string sCharUpp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static string sNumber = "0123456789";
private static string BuildRndCodeOnly(string StrOf,int strLen) { System.Random RandomObj = new System.Random(GetNewSeed()); string buildRndCodeReturn = null; for(int i=0; i<strLen; i++) { buildRndCodeReturn += StrOf.Substring(RandomObj.Next(0,StrOf.Length-1),1); } return buildRndCodeReturn; }
public static string GetRndStrOnlyFor() { return BuildRndCodeOnly(sCharLow + sNumber,defaultLength); }
public static string GetRndStrOnlyFor(int LenOf) { return BuildRndCodeOnly(sCharLow + sNumber,LenOf); }
public static string GetRndStrOnlyFor(bool bUseUpper,bool bUseNumber) { string strTmp = sCharLow; if (bUseUpper) strTmp += sCharUpp; if (bUseNumber) strTmp += sNumber;
return BuildRndCodeOnly(strTmp,defaultLength); }
public static string GetRndStrOnlyFor(int LenOf,bool bUseUpper,bool bUseNumber) { string strTmp = sCharLow; if (bUseUpper) strTmp += sCharUpp; if (bUseNumber) strTmp += sNumber;
return BuildRndCodeOnly(strTmp,LenOf); } } }
文件夹选择对话框
using System; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; using System.Collections;
namespace ArLi.CommonPrj {
#region how use this? /* FolderBrowser fbObj = new FolderBrowser(); fbObj.Title = "Select a Folder"; fbObj.Flags = BrowseFlags.BIF_NEWDIALOGSTYLE| BrowseFlags.BIF_EDITBOX| BrowseFlags.BIF_STATUSTEXT ; DialogResult result = fbObj.ShowFolderBrowser(); if (result == DialogResult.OK ) { MessageBox.Show(fbObj.DirectoryPath); } */ #endregion
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] [ComVisible(true)]
public class BROWSEINFO { public IntPtr hwndOwner; public IntPtr pidlRoot; public IntPtr pszDisplayName; public string lpszTitle; public int ulFlags; public IntPtr lpfn; public IntPtr lParam; public int iImage; }
[Flags, Serializable] public enum BrowseFlags { BIF_DEFAULT = 0x0000, BIF_BROWSEFORCOMPUTER = 0x1000, BIF_BROWSEFORPRINTER = 0x2000, BIF_BROWSEINCLUDEFILES = 0x4000, BIF_BROWSEINCLUDEURLS = 0x0080, BIF_DONTGOBELOWDOMAIN = 0x0002, BIF_EDITBOX = 0x0010, BIF_NEWDIALOGSTYLE = 0x0040, BIF_NONEWFOLDERBUTTON = 0x0200, BIF_RETURNFSANCESTORS = 0x0008, BIF_RETURNONLYFSDIRS = 0x0001, BIF_SHAREABLE = 0x8000, BIF_STATUSTEXT = 0x0004, BIF_UAHINT = 0x0100, BIF_VALIDATE = 0x0020, BIF_NOTRANSLATETARGETS = 0x0400, }
public class API { [DllImport("shell32.dll", PreserveSig=true, CharSet=CharSet.Auto)] public static extern IntPtr SHBrowseForFolder(BROWSEINFO bi);
[DllImport("shell32.dll", PreserveSig=true, CharSet=CharSet.Auto)] public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath);
[DllImport("shell32.dll", PreserveSig=true, CharSet=CharSet.Auto)] public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, ref IntPtr ppidl); }
public class FolderBrowser { private string m_strDirectoryPath; private string m_strTitle; private string m_strDisplayName; private BrowseFlags m_Flags; public FolderBrowser() { m_Flags = BrowseFlags.BIF_DEFAULT; m_strTitle = ""; }
public string DirectoryPath { get{return this.m_strDirectoryPath;} }
public string DisplayName { get{return this.m_strDisplayName;} }
public string Title { set{this.m_strTitle = value;} }
public BrowseFlags Flags { set{this.m_Flags = value;} } public DialogResult ShowFolderBrowser() {
BROWSEINFO bi = new BROWSEINFO(); bi.pszDisplayName = IntPtr.Zero; bi.lpfn = IntPtr.Zero; bi.lParam = IntPtr.Zero; bi.lpszTitle = "Select Folder"; IntPtr idListPtr = IntPtr.Zero; IntPtr pszPath = IntPtr.Zero; try { if (this.m_strTitle.Length != 0) { bi.lpszTitle = this.m_strTitle; } bi.ulFlags = (int)this.m_Flags; bi.pszDisplayName = Marshal.AllocHGlobal(256);
idListPtr = API.SHBrowseForFolder(bi);
if (idListPtr == IntPtr.Zero) { return DialogResult.Cancel; }
pszPath = Marshal.AllocHGlobal(256);
bool bRet = API.SHGetPathFromIDList(idListPtr, pszPath);
m_strDirectoryPath = Marshal.PtrToStringAuto(pszPath); this.m_strDisplayName = Marshal.PtrToStringAuto(bi.pszDisplayName); } catch (Exception ex) { Trace.WriteLine(ex.Message); return DialogResult.Abort; } finally {
if (idListPtr != IntPtr.Zero) { Marshal.FreeHGlobal(idListPtr); } if (pszPath != IntPtr.Zero) { Marshal.FreeHGlobal(pszPath); } if (bi != null) { Marshal.FreeHGlobal(bi.pszDisplayName); } } return DialogResult.OK; } } }
获取资源文件内容
using System; using System.Reflection; using System.Resources;
namespace ArLi.CommonPrj { internal class getResPrj { internal static object GetResOf(string resFullName,string resItemName) { Assembly myAssem = Assembly.GetEntryAssembly(); ResourceManager rm = new ResourceManager(resFullName,myAssem); return rm.GetObject(resItemName); } } }
获取硬盘序列号
using System; using System.Runtime.InteropServices;
namespace ArLi.CommonPrj {
#region how use this? /* string sVol = GetVolOf("C"); */ #endregion
public class getvol{
[DllImport("kernel32.dll")] private static extern int GetVolumeInformation( string lpRootPathName, string lpVolumeNameBuffer, int nVolumeNameSize, ref int lpVolumeSerialNumber, int lpMaximumComponentLength, int lpFileSystemFlags, string lpFileSystemNameBuffer, int nFileSystemNameSize );
public static string GetVolOf(string drvID){ const int MAX_FILENAME_LEN = 256; int retVal = 0; int a =0; int b =0; string str1 = null; string str2 = null;
int i = GetVolumeInformation( drvID + @":\", str1, MAX_FILENAME_LEN, ref retVal, a, b, str2, MAX_FILENAME_LEN );
return retVal.ToString("x"); } } }
禁止程序重复运行限制
using System; using System.Runtime.InteropServices; using System.Diagnostics; using System.Reflection;
namespace ArLi.CommonPrj { public class one_instance_Check { public one_instance_Check() { }
#region how use this? /* using ArLi.CommonPrj;
if (one_instance_Check.goCheck("Process Exist !")) { Application.Run (new Form1()); } */ #endregion
[DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
public static bool GoCheck(string waringMessage_ifExist) { Process instance = RunningInstance(); if (instance == null) { return true; } else { if (waringMessage_ifExist != null) {
System.Windows.Forms.MessageBox.Show( null, waringMessage_ifExist, System.Windows.Forms.Application.ProductName.ToString(), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation );
} HandleRunningInstance(instance); return false; } }
private static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName (current.ProcessName);
//Loop through the running processes in with the same name foreach (Process process in processes) { //Ignore the current process if (process.Id != current.Id) { //Make sure that the process is running from the exe file. if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) { //Return the other process instance. return process; } } }
//No other instance was found, return null. return null; }
private static void HandleRunningInstance(Process instance) { //Make sure the window is not minimized or maximized ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);
//Set the real intance to foreground window SetForegroundWindow (instance.MainWindowHandle); } } }
文件操作
using System; using System.IO;
namespace ArLi.CommonPrj { internal class FileOp { internal static string ReadFileOf(string fileFullName) { string fileBody = ""; try{ FileStream ObjFile = new FileStream(fileFullName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite); StreamReader sw = new StreamReader(ObjFile,System.Text.Encoding.Default); fileBody = sw.ReadToEnd(); sw.Close(); ObjFile.Close(); }catch (Exception e){ fileBody = e.Message.ToString(); } return fileBody; } internal static string SaveFileOf(string fileFullName,string fileBody) { try{ FileStream ObjFile = new FileStream(fileFullName,FileMode.Create,FileAccess.Write,FileShare.Read); StreamWriter sw = new StreamWriter(ObjFile,System.Text.Encoding.Default); sw.Write(fileBody); sw.Close(); ObjFile.Close(); return null; }catch (Exception e){ return e.Message.ToString(); } } } }
播放声音
using System; using System.Runtime.InteropServices;
namespace ArLi.CommonPrj { internal class sndPlay {
[DllImport("winmm.dll", EntryPoint="PlaySound")] internal static extern bool PlaySound(ref Byte snd, IntPtr hmod, uint fdwSound);
#region how use this ? /*
//get wav byte[] from ResourceFile to sound ArLi.CommonPrj.sndPlay.sound=(System.Byte[])ArLi.CommonPrj.getResPrj.getResOf("namespace.ResourceFileName","ResourceItemName"); //play of: ArLi.CommonPrj.sndPlay.PlaySound(ref ArLi.CommonPrj.sndPlay.sound[0],IntPtr.Zero,(uint)ArLi.CommonPrj.sndPlay.PlayingFlags.SND_MEMORY | (uint)ArLi.CommonPrj.sndPlay.PlayingFlags.SND_ASYNC); //stop of; ArLi.CommonPrj.sndPlay.sound = new System.Byte[]{0}; ArLi.CommonPrj.sndPlay.PlaySound(ref ArLi.CommonPrj.sndPlay.sound[0],IntPtr.Zero,(uint)ArLi.CommonPrj.sndPlay.PlayingFlags.SND_MEMORY | (uint)ArLi.CommonPrj.sndPlay.PlayingFlags.SND_PURGE | (uint)ArLi.CommonPrj.sndPlay.PlayingFlags.SND_NODEFAULT);
*/ #endregion
[DllImport("winmm.dll", EntryPoint="mciSendString")] internal static extern int mciSendString(string lpstrCommand,string lpstrReturnstring,int uReturnLength,int hwndCallback);
#region how use this ? /*
int i = sndPlay.mciSendString(@"play D:\Media\Midi\bg1.mid",null,0,0); int i = sndPlay.mciSendString(@"close D:\Media\Midi\bg1.mid",null,0,0);
*/ #endregion
internal static System.Byte[] sound = null; internal enum PlayingFlags :uint { SND_SYNC = 0x00, SND_ASYNC = 0x01, SND_NODEFAULT = 0x02, SND_MEMORY = 0x04, SND_ALIAS = 0x010000, SND_FILENAME = 0x020000, SND_RESOURCE = 0x040004, SND_ALIAS_ID = 0x0110000, SND_ALIAS_START = 0, SND_LOOP = 0x08, SND_NOSTOP = 0x010, SND_VALID = 0x01F, SND_NOWAIT = 0x02000, SND_PURGE = 0x40 } } }
补充:SND_PURGE 参数很重要,很多人漏掉了,可以用来中止一些用sndplay 循环播放的声音
加系统菜单
using System; using System.Runtime.InteropServices;
namespace ArLi.CommonPrj {
#region how use this? /* * append this to Form Code body * using ArLi.CommonPrj;
internal const Int32 aboutID = 1000; protected override void WndProc(ref Message m) { if(m.Msg == CommonPrj.sysMenu.WM_SYSCOMMAND) switch(m.WParam.ToInt32()) { case aboutID : fm_About Obj = new fm_About(); Obj.ShowDialog(this); return; default: break; } base.WndProc(ref m); } * * appendmenu on form_load * //add menuLine sysMenu.AddMenu(this.Handle,0,null); //add menuItem sysMenu.AddMenu(this.Handle,IDM_ABOUT,"About ..."); */ #endregion
internal class sysMenu { internal sysMenu(){}
[DllImport("user32.dll")] private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")] private static extern bool AppendMenu (IntPtr hMenu, Int32 wFlags, Int32 wIDNewItem, string lpNewItem);
internal const Int32 WM_SYSCOMMAND = 0x112; internal const Int32 MF_SEPARATOR = 0x800; internal const Int32 MF_STRING = 0x0;
internal static void AddMenu(IntPtr handleOf, Int32 menuID, string menuStrOf) { IntPtr sysMenuHandle = GetSystemMenu(handleOf, false); if (menuStrOf == null){ AppendMenu(sysMenuHandle, MF_SEPARATOR, menuID, string.Empty); }else{ AppendMenu(sysMenuHandle, MF_STRING, menuID, menuStrOf); } }
} }
以下是程序:
此为资源文件生成器,支持二进制
using System; using System.IO; using System.Drawing; using System.Resources; using System.Reflection; using System.Windows.Forms;
[assembly: System.Reflection.AssemblyVersion("1.2.*")]
[assembly: System.Reflection.AssemblyTitle("Resource Build")] [assembly: System.Reflection.AssemblyDescription("Resource with Binary")] [assembly: System.Reflection.AssemblyConfiguration("")] [assembly: System.Reflection.AssemblyCompany("ArLi")] [assembly: System.Reflection.AssemblyProduct("Resource Build")] [assembly: System.Reflection.AssemblyCopyright("ArLi build on C#")] [assembly: System.Reflection.AssemblyTrademark("")] [assembly: System.Reflection.AssemblyCulture("")]
class resAdd {
private static AssemblyCopyrightAttribute objCopyright = (AssemblyCopyrightAttribute)AssemblyCopyrightAttribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),typeof(AssemblyCopyrightAttribute)); private static string myCopyright = objCopyright.Copyright.ToString(); private static string myExeName = new FileInfo(Application.ExecutablePath).Name + " ";
private static string mySwitch = "[Switch]:\n" + "/fn,fileFullName\t\tResource FileName(no Extension)\n" + "/img,itemName,fileFullName\tImage Type Add of Filename \n\t\t\t\t(support gif/png/jpg/bmp/ico)\n" + "/ico,itemName,fileFullName\tIcon Type Add of Filename \n" + "/bin,itemName,fileFullName\tBinary Type Add of FileName"; private static string myExemple = "[Exemple]: Create c:\\tst.resources\n" + myExeName + "/fn,c:\\tst " + "/bin,wav1,wav1.wav " + "/bin,wav2,c:\\wav2.wav " + "/img,img1,bmp1.bmp" + "\n" + myExeName + "/fn,c:\\tst /bin,wav1,\"c:\\winnt\\media\\The Microsoft Sound.wav\"";
[STAThread] public static void Main(string[] args) { if (args.Length>0){ if(args[0] == "/?"){ ShowHelp(null); }else{ string[] filenameOf = args[0].Split(','); if (filenameOf[0] == "/fn" && filenameOf.Length >= 2){ if (filenameOf[1] == ""){ ShowHelp("u must input filename of /fn,fileFullName !"); }else{ string theResourcesFileName = filenameOf[1] + ".resources"; ResourceWriter rw = new ResourceWriter(theResourcesFileName);
for(int i=1; i<args.Length; i++){ string[] addBody = args[i].Split(','); if (addBody.Length < 3){ Console.WriteLine("Invalid switch on: " + args[i]); }else{ FileInfo ObjFile = new FileInfo(addBody[2]); if (! ObjFile.Exists){ Console.WriteLine("File " + ObjFile.FullName + " no Exists!!! skip this."); }else{ switch (addBody[0].ToUpper()){ case "/IMG": ImageAdd(rw,addBody[1],ObjFile.FullName); Console.WriteLine("append Type:Image of " + addBody[1] + " (" + addBody[2] + ")"); break; case "/ICO": IconAdd(rw,addBody[1],ObjFile.FullName); Console.WriteLine("append Type:Icon of " + addBody[1] + " (" + addBody[2] + ")"); break; case "/BIN": BinaryAdd(rw,addBody[1],ObjFile.FullName); Console.WriteLine("append Type:Binary of " + addBody[1] + " (" + addBody[2] + ")"); break;
default: ShowHelp("u must input resources type !"); break; } } } }
Console.WriteLine("\nbuild of " + theResourcesFileName + " complete."); rw.Generate(); } }else{ ShowHelp("need filename of /fn,fileFullName !"); } } }else{ ShowHelp(null); Console.WriteLine("\nPress Enter to end .."); Console.Read(); } }
private static void ShowHelp(string ErrMsg) { Version PrjVer = new Version(Application.ProductVersion);
Console.WriteLine("" +
Application.ProductName.ToString() + " v" + PrjVer.Major.ToString() + "." + PrjVer.Minor.ToString() + "." + PrjVer.Build.ToString() + " Studio: " + Application.CompanyName + " Copyright: " + myCopyright +
"\n");
if (ErrMsg != null){Console.WriteLine("Waring !!\n" + ErrMsg + "\n");}
Console.WriteLine(myExemple + "\n\n" + mySwitch); }
private static void BinaryAdd(ResourceWriter rw,string itemnameOf,string filenameOf) { try{ FileStream fs = new FileStream(filenameOf,FileMode.Open, FileAccess.Read); int byteLength = (int)fs.Length; byte[] wf = new byte[byteLength]; fs.Read(wf,0,byteLength); fs.Close();
rw.AddResource(itemnameOf, wf); }catch (Exception e){ Console.WriteLine(e.ToString()); } }
private static void ImageAdd(ResourceWriter rw,string itemnameOf,string filenameOf) { try{ Image b = Image.FromFile(filenameOf); rw.AddResource(itemnameOf, b); }catch (Exception e){ Console.WriteLine(e.ToString()); } }
private static void IconAdd(ResourceWriter rw,string itemnameOf,string filenameOf) { try{ Icon b = new Icon(filenameOf); rw.AddResource(itemnameOf, b); }catch (Exception e){ Console.WriteLine(e.ToString()); } } }
程序,我以前有个习惯不使用资源而是将内容二进制打进程序 直接使用 byte[] bgSound = new byte[]{....} //此为声音文件二进制,原来是用vc 现在特用c# 重写了一个
using System; using System.IO; //using System.Drawing; //using System.Resources; using System.Reflection; using System.Windows.Forms; using System.Text.RegularExpressions;
[assembly: System.Reflection.AssemblyVersion("1.5.*")]
[assembly: System.Reflection.AssemblyTitle("string Build")] [assembly: System.Reflection.AssemblyDescription("System.byte[] to string")] [assembly: System.Reflection.AssemblyConfiguration("")] [assembly: System.Reflection.AssemblyCompany("ArLi")] [assembly: System.Reflection.AssemblyProduct("string Build")] [assembly: System.Reflection.AssemblyCopyright("ArLi build on C#")] [assembly: System.Reflection.AssemblyTrademark("")] [assembly: System.Reflection.AssemblyCulture("")]
class resAdd {
private static AssemblyCopyrightAttribute objCopyright = (AssemblyCopyrightAttribute)AssemblyCopyrightAttribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),typeof(AssemblyCopyrightAttribute)); private static string myCopyright = objCopyright.Copyright.ToString(); private static string myExeName = new FileInfo(Application.ExecutablePath).Name + " ";
private static string myHelpBody = "" +
"[Syntax]:\n" + myExeName + "formFile variableName toFile \tsave string to file\n" + myExeName + "formFile variableName /copy \tcopy string to clipboard.\n" + myExeName + "formFile variableName /copy /s \tcopy string & show stats.\n\n" +
"[Exemple]:\n" + myExeName + "c:\\1.ico ico_1 /copy /s";
[STAThread] public static void Main(string[] args) { if (args.Length>2){ if(args[0] == "/?"){ ShowHelp(null); }else{ try{ FileInfo fi = new FileInfo(args[0]); Match MatchVariableName = Regex.Match(args[1],@"\b([a-zA-Z]\w*)",RegexOptions.IgnoreCase|RegexOptions.IgnorePatternWhitespace|RegexOptions.ExplicitCapture); string variableName = MatchVariableName.ToString(); if (args[1].Substring(0,1) == "/"){ Console.WriteLine("don't forget VariableName!!!"); } else if (! fi.Exists){ Console.WriteLine("File " + fi.FullName + " no Exists!!!"); } else if (variableName == ""){ Console.WriteLine("invalid variableName!!"); } else{ FileStream fs = new FileStream(fi.FullName,FileMode.Open, FileAccess.Read); int byteLength = (int)fs.Length; byte[] wf = new byte[byteLength]; fs.Read(wf,0,byteLength); fs.Close(); fs = null;
int i = 0; byte iCr = 0; bool ShowStats = (args.Length>3 && args[3] == "/s");
string s = "System.Byte[] " + variableName + " = new System.Byte[] {"; string sp = new string(' ',byteLength.ToString().Length);
Console.Write("Poc " + s + "" + byteLength.ToString() + " byte} ...\nuse CTRL+Break can stop ...\n");
s += "\r\n";
if (ShowStats){ while(i < byteLength){ s += wf[i] + ","; if (iCr == 25){ s += "\r\n"; iCr=0; } i++; iCr++; Console.Write("\r" + i + sp); } }else{ while(i < byteLength){ s += wf[i] + ","; if (iCr == 25){ s += "\r\n"; iCr=0; } i++; iCr++; } }
s = s.Remove(s.Length-1,1) + "\r\n};"; s = "\t#region System.Byte[] " + variableName + " = new System.Byte[] {...}\r\n" + s + "\r\n\t#endregion";
if (args[2] == "/copy") { Clipboard.SetDataObject(s,true); }else{ FileInfo ObjFile = new FileInfo(args[2]); StreamWriter sw = ObjFile.CreateText(); sw.Write(s); sw.Close(); } Console.WriteLine("\rdone.. ^o^"); } }catch (Exception e){ Console.WriteLine(e.Message.ToString()); } } }else{ ShowHelp(null); Console.WriteLine("\nPress Enter to end .."); Console.Read(); } }
private static void ShowHelp(string ErrMsg) { Version PrjVer = new Version(Application.ProductVersion);
Console.WriteLine("" +
Application.ProductName.ToString() + " v" + PrjVer.Major.ToString() + "." + PrjVer.Minor.ToString() + "." + PrjVer.Build.ToString() + " Studio: " + Application.CompanyName + " Copyright: " + myCopyright +
"\n");
if (ErrMsg != null){Console.WriteLine("Waring !!\n" + ErrMsg + "\n");}
Console.WriteLine(myHelpBody); } }
|
|