C#完成的SN疾速輸出對象實例。本站提示廣大學習愛好者:(C#完成的SN疾速輸出對象實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成的SN疾速輸出對象實例正文
本文實例講述了C#完成的SN疾速輸出對象的辦法。分享給年夜家供年夜家參考。詳細完成辦法剖析以下:
普通軟件都要輸出序列號(SN),而年夜家日常平凡用的最多的生怕是盜版軟件,平日盜版軟件的序列號(SN)都保留成:XXXXX-XXXXX-XXXX-XXXX的情勢。
而軟件輸出序列號的處所平日都是幾個文本框(TextBox)構成。一個個的將XXXXX復制到文本框將異常費事。因而SN疾速輸出對象便由此發生了。
固然這些都和我的編寫這個法式的緣由有關。我編寫這個法式的緣由純潔是由於有個網友和他舅舅賭博說要編寫個法式,而他舅舅就是要他編寫這個法式,但惋惜我的這位網友才是個編程初學者(比我更菜的菜鳥),固然完成不了這個看似簡略,現實要用到很多編程常識的法式咯。
要做這個法式,起首固然是要懂得法式的功效了。它的功效就是要讓你復制完了情勢如“XXXXX-XXXXX-XXXX-XXXX”的序列號以後,當你把鼠標指向文本框,法式能主動將XXXXX添加到響應的文本框中。
既然是要處置復制的序列號,那末我們確定要用到和剪貼板相干的器械了。剪貼板,還好這個我之前在C#頂用過N次了,不消再查windows api了。C#外面原來就供給了Clipboard這個類。
因而就用到了string Clipboard.GetText()這個靜態辦法,將適才復制的帶-的序列號掏出來,然後用個string類型的變量strKeys保留在我的法式中,以便應用。
第一步,從剪貼板外面取數據,我們就完成了。
接著,我們該斟酌怎樣處置我們的數據了,我們的數據最初是要寫到幾個持續的文本框中的,那末我們可以斟酌經由過程String.Split(char[],string splitoption)這個辦法將序列號朋分成幾個子字符串,然後再經由過程windows api講文本輸入到響應的textbox句柄上。然則如許做無疑增長了法式的難度,幾個持續的文本框的切換,應用Tab鍵就可以做到了,然後將文本輸入到文本框中,直接讓鍵盤打出來就ok了。那末很顯著,我們只須要將我們要按的鍵模仿出來就好了,這個時刻我起首想到的是windows api中鍵盤模仿事宜keybd_event,因而我開端在MSDN中查詢keybd_event辦法,辦法中有個KEYEVENTF_KEYUP這個參數,然則我不曉得他響應的值,因而我開端查找這個長整形的值。然則一直都找不到,就在我在MSDN中查找KEYUP相干的器械的時刻,我忽然發明了System.Windows.Form.SendKeys這個類。本來.net framework曾經將keybd_event這個非托管對象的辦法封裝到SendKeys這個類中了,直接應用SendKeys這個類便可以模仿鍵盤操作了。
再查詢Tab鍵的寫法就是{Tab}。
那末我只需將本來文本strKeys中的-全體轉換成{Tab}然後再交給SendKeys這個類來處置,這個法式就根本完成了。
因而有了
strKeys.WordStr("-", "{TAB}");
SendKeys.Send(strKeys);
這兩行代碼。
如許就有了我的法式的主進程:
private void ProcessHotkey()//主處置法式
{
strKeys = Clipboard.GetText();
strKeys.WordStr("-", "{TAB}");
SendKeys.Send(strKeys);
}
然則我們怎樣經由過程快捷鍵來觸發,來完成這個進程了。
因而我開端在百度和MSDN查找相干處置全局快捷鍵的windows api的材料。
要設置快捷鍵必需應用user32.dll上面的兩個辦法。
BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);
和
BOOL UnregisterHotKey(
HWND hWnd,
int id
);
轉換成C#代碼,那末起首就要援用定名空間System.Runtime.InteropServices;來加載非托管類user32.dll。因而有了:
[DllImport("user32.dll", SetLastError=true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, // handle to window
int id, // hot key identifier
KeyModifiers fsModifiers, // key-modifier options
Keys vk // virtual-key code
);
[DllImport("user32.dll", SetLastError=true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, // handle to window
int id // hot key identifier
);
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
這是注冊和卸載全局快捷鍵的辦法,那末我們只須要在Form_Load的時刻加上注冊快捷鍵的語句,在FormClosing的時刻卸載全局快捷鍵。同時,為了包管剪貼板的內容不遭到其他法式挪用剪貼板的攪擾,在Form_Load的時刻,我先將剪貼板外面的內容清空。
因而有了:
private void Form1_Load(object sender, System.EventArgs e)
{
label2.AutoSize = true;
Clipboard.Clear();//先清空剪貼板避免剪貼板外面先復制了其他內容
RegisterHotKey(Handle, 100, 0, Keys.F10);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
UnregisterHotKey(Handle, 100);//卸載快捷鍵
}
那末我們在其余窗口,怎樣讓按了快捷鍵今後挪用我的主進程ProcessHotkey()呢?
那末我們就必需重寫WndProc()辦法,經由過程監督體系新聞,來挪用進程:
protected override void WndProc(ref Message m)//監督Windows新聞
{
const int WM_HOTKEY = 0x0312;//按快捷鍵
switch (m.Msg)
{
case WM_HOTKEY:
ProcessHotkey();//挪用主處置法式
break;
}
base.WndProc(ref m);
}
至此我們的法式就完成了。
願望本文所述對年夜家的C#法式設計有所贊助。