高手请进 如何屏蔽SaveFileDialog控件中的鼠标右键

winform_3 2011-04-13 10:19:46
SaveFileDialog控件中选择文件时候鼠标右键可以删除电脑中的文件
请问如何能屏蔽掉SaveFileDialog控件中的鼠标右键呢? 就是在SaveFileDialog控件中点了鼠标右键不弹出菜单
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
isjoe 2011-04-13
  • 打赏
  • 举报
回复
1、安装钩子
::SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)MenuHook, hMod, ::GetCurrentThreadId());

2、用以下的方法确定是否为对话框:
if(nCode == HC_ACTION && pCW->message == WM_CREATE)
{
nCount = GetClassName(hWnd, strName, sizeof(strName) / sizeof(strName[0]));
//TRACE("%#0x--%s\n",hWnd,strName);
if(nCount == 6 && _tcscmp(strName, _T("#32768")) == 0)
{//SetWindowLayered(hWnd, ::m_nNewBkColor, 0x0, 0x1);
//该菜单是否已被子类化
if(::FindNode(pCW->hwnd) == NULL)
{
//进行子类化,返回原来的窗口回调过程
if((OldWndProc = (WNDPROC)SetWindowLong(pCW->hwnd, GWL_WNDPROC,(ULONG)NewMenuProc)) != 0L)
{
//将句柄和回调函数地址保存进链表(卸载子类化时需要)
::AddNode(pCW->hwnd,OldWndProc);
}
else
{
return CallNextHookEx(::m_hMenuHook, nCode, wParam, lParam);
}
}
}
}

3、进入自己的回调处理如下事件

WM_RBUTTONDOWN = 0x0204
WM_KEYDOWN = 0x0100
WM_KEYUP = 0x0101
或其它事件,

这是我以前写的,用的VC,可以精准识别对话框(例如保存、打开等等),也可以在C#中调用

zilong4460072 2011-04-13
  • 打赏
  • 举报
回复
确实是挺麻烦的 需求严重的不合理
matrixcl 2011-04-13
  • 打赏
  • 举报
回复
save对话框看到的是本地的文件结构
matrixcl 2011-04-13
  • 打赏
  • 举报
回复
楼上说的有道理。很多技术上实现很折腾的问题,原因在于需求不合理。
ningweidong 2011-04-13
  • 打赏
  • 举报
回复
你怎么能让用户看到服务器上的东西呢?
winform_3 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ningweidong 的回复:]

引用 4 楼 winform_3 的回复:
引用 3 楼 ningweidong 的回复:

你就算屏蔽了右键,别人还是可以用键盘上的Delete删除文件啊?
再说,这么做有什么意义吗?人家要删什么文件,你还能拦得住吗?
别的程序,像QQ上传文件对话框,新浪微博上传对话框,都可以删除文件啊。
所以,你没必要这么做。

因为我要提供给用户下载的对话框 我怕用户会删除电脑中的文件夹
……
[/Quote]
因为他是删我的电脑中的文件呀 不是删电脑的文件
我做的程序是放到一台机器中 用户到机器中的下载的
ningweidong 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 winform_3 的回复:]
引用 3 楼 ningweidong 的回复:

你就算屏蔽了右键,别人还是可以用键盘上的Delete删除文件啊?
再说,这么做有什么意义吗?人家要删什么文件,你还能拦得住吗?
别的程序,像QQ上传文件对话框,新浪微博上传对话框,都可以删除文件啊。
所以,你没必要这么做。

因为我要提供给用户下载的对话框 我怕用户会删除电脑中的文件夹
我可以把键盘上的Delete键盘屏蔽掉阿
……
[/Quote]
没有必要,你并不知道用户删除文件的目的,也许用户真的是不需要那个文件了。
再说,就连IE的下载对话框都可能右键删除文件,你的程序为什么就不让删呢?
winform_3 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ningweidong 的回复:]

你就算屏蔽了右键,别人还是可以用键盘上的Delete删除文件啊?
再说,这么做有什么意义吗?人家要删什么文件,你还能拦得住吗?
别的程序,像QQ上传文件对话框,新浪微博上传对话框,都可以删除文件啊。
所以,你没必要这么做。
[/Quote]
因为我要提供给用户下载的对话框 我怕用户会删除电脑中的文件夹
我可以把键盘上的Delete键盘屏蔽掉阿
但是不知道怎么屏蔽SaveFileDialog中的鼠标右键
ningweidong 2011-04-13
  • 打赏
  • 举报
回复
你就算屏蔽了右键,别人还是可以用键盘上的Delete删除文件啊?
再说,这么做有什么意义吗?人家要删什么文件,你还能拦得住吗?
别的程序,像QQ上传文件对话框,新浪微博上传对话框,都可以删除文件啊。
所以,你没必要这么做。
winform_3 2011-04-13
  • 打赏
  • 举报
回复
听人说全局钩子也可以处理 但是我只会用钩子屏蔽键盘按键 怎么处理鼠标右键呢?
下面是屏蔽键盘的钩子

/// <summary>
/// 屏蔽键盘
/// </summary>
public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
// 屏蔽左"WIN"键盘
if ((kbh.vkCode == (int)Keys.LWin) || (kbh.vkCode == (int)Keys.RWin))
{
return 1;
}
//截获F1
if (kbh.vkCode == (int)Keys.F1)
{
return 1;
}
//屏蔽Alt+Tab
if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt)
{
return 1;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}

110,577

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧