最近又有一個對我來說不好做的需求了

就是要限制使用者不可以下載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

http://www.webtropy.com/articles/art9-2.asp?lib=user32.dll

arrow
arrow
    全站熱搜

    鴨爸 發表在 痞客邦 留言(1) 人氣()