最近又有一個對我來說不好做的需求了
就是要限制使用者不可以下載PDF
如果用Web來說幾乎不可能的任務....
所以就轉向Winform的方式做了
只是如果真的有心要取得....除非是完全不開放
不然都嘛還是可以取的到資料
不過努力的一二天還是找到一些方式來做
畢竟是對內部人員不是對外開放的...也許還算有用吧
第一種方法:
這個就直接全部都給它鎖起來了...
不過Ctrl+Alt+Del還是鎖不住....但需求只是要鎖PrintScreen & F8 還有滑鼠右鍵
所以這個就參考就好啦....
//可以鎖工作管理員 [DllImport("user32")] public static extern bool LockWorkStation(); //記得Using system.IO; //範例: private void Form1_Load(object sender, EventArgs e) { FileStream fs = new FileStream(Environment.ExpandEnvironmentVariables("%windir%\\system32\\taskmgr.exe"), FileMode.Open); } //鎖全部的鍵盤跟滑鼠 [DllImport("user32.dll")] static extern void BlockInput(bool Block); //範例: private void Form1_Load(object sender, EventArgs e) { BlockInput(true);//鎖住鍵盤跟滑鼠 System.Threading.Thread.Sleep(1000); //鎖個1秒再解開 BlockInput(false);//解除鎖定 }
第二種方法:
找了好多人的寫法...試了很久只有這個改一些些就可以用
而且還不錯...
直接就可以拿來用了
//這三個要記得Using using System.Runtime.InteropServices; using System.Diagnostics; using System.IO; //開始 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr SetWindowsHookExW(int idHook, HookHandlerDelegate lpfn, IntPtr hmod, uint dwThreadID); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr GetModuleHandle(String modulename); public const int WM_KEYDOWN = 0x0100; public const int WH_KEYBOARD_LL = 13; public const int WM_SYSKEYDOWN = 0x0104; public struct KBDLLHOOKSTRUCT { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } public delegate int HookHandlerDelegate(int nCode, IntPtr wparam, ref KBDLLHOOKSTRUCT lparam); private HookHandlerDelegate proc; private int HookCallback(int nCode, IntPtr wparam, ref KBDLLHOOKSTRUCT lparam) { if (nCode >= 0 && (wparam == (IntPtr)WM_KEYDOWN || wparam == (IntPtr)WM_SYSKEYDOWN)) { //查一下要鎖的鍵盤KeyCode就可以了 //只鎖PrintScreen(44)跟F8(119) if (lparam.vkCode == 44 || lparam.vkCode == 119) { return 1; } //Ctrl+P也會出現列印畫面 else if (lparam.vkCode == (int)Keys.P && (int)Control.ModifierKeys == (int)Keys.Control) { return 1; } else { return 0; } } return 0; } private void Form1_Load(object sender, EventArgs e) { //使用Start proc = new HookHandlerDelegate(HookCallback); using (Process curPro = Process.GetCurrentProcess()) using (ProcessModule curMod = curPro.MainModule) { SetWindowsHookExW(WH_KEYBOARD_LL, proc, GetModuleHandle(curMod.ModuleName), 0); } //一切都是因為用axAcroPDF1開啟PDF要鎖不可列印跟儲存 try { string FilePath = Application.StartupPath + @"\123.pdf"; this.axAcroPDF1.LoadFile(FilePath); this.axAcroPDF1.src = FilePath; this.axAcroPDF1.setShowToolbar(false); this.axAcroPDF1.setView("FitH"); this.axAcroPDF1.setLayoutMode("SinglePage"); this.axAcroPDF1.Show(); } catch (Exception ex) { throw new Exception(ex.Message.ToString()); } }
以上就是完整的範例了.....
接下來就是滑鼠的處理了.....繼續努力~
參考:
http://blog.csdn.net/maidou0921/archive/2009/06/18/4279291.aspx
http://www.cnblogs.com/feiyangqingyun/archive/2009/05/26/1489499.html
全站熱搜
留言列表