最近又有一個對我來說不好做的需求了
就是要限制使用者不可以下載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
文章標籤
全站熱搜

這篇很棒,謝謝。 不過這樣子不管是否是在我的app裡面,keyboard都被鎖定。 可以給個方向要從那邊做調整,我只有要鎖app裡面的hotkey, 感謝~