WIN7以上的操作系统,含win7,怎样做才能在服务中获得窗口句柄,闭关窗体

ou108 2017-09-27 05:02:44

我试过:用FindWindow在程序中可以,可以找到窗体局柄,但写成服务后就不行了,服务中返回局柄是0。
我程序功能也就是需求:查找到指定窗体,直接关闭,给相关窗体加保护功能,不可以打开。
保护win7,win8,win10客户端电脑中相关的文件夹不被打开。


public const int WM_CLOSE = 0x10;
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

try
{

string FolderName = System.Configuration.ConfigurationManager.AppSettings["FolderName"].ToString();
string[] l_closeFolderName = FolderName.Split(',');
if (l_closeFolderName.Length > 0)
{
for (int i = 0; i <= l_closeFolderName.Length - 1; i++)
{
IntPtr hwnd_win;
hwnd_win = FindWindow(null, l_closeFolderName[i].Trim());
SendMessage(hwnd_win, WM_CLOSE, 0, 0);
}
}


////string FolderName = @"spcdata";
//FolderName = @"testdata";
//IntPtr hwnd_win;
//hwnd_win = FindWindow(null, FolderName);
//SendMessage(hwnd_win, WM_CLOSE, 0, 0);


//FolderName = @"spcdata";
//hwnd_win = FindWindow(null, FolderName);
//SendMessage(hwnd_win, WM_CLOSE, 0, 0);

//FolderName = @"testdata";
//hwnd_win = FindWindow(null, FolderName);
//SendMessage(hwnd_win, WM_CLOSE, 0, 0);

//FolderName = @"spcdata";
//hwnd_win = FindWindow(null, FolderName);
//SendMessage(hwnd_win, WM_CLOSE, 0, 0);



}
catch (Exception ex)
{
LogWriter.Instance.writeError(ex.ToString());
}


以上代码在桌面进程,桌面程序中使用正常,在服务中不管用

查找了相关 WIN7 如何穿透Session 0 的知识,发现不够用
在此请教高手,望高手们给予答案。

...全文
309 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2017-09-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/c0ast/article/details/18285645 http://blog.csdn.net/zfanlong1314/article/details/7296047
assky124 2017-09-29
  • 打赏
  • 举报
回复
服务的用户和窗体的用户不一样吧
cheng2005 2017-09-29
  • 打赏
  • 举报
回复
这个需求都被你做偏了。什么叫做“保护win7,win8,win10客户端电脑中相关的文件夹不被打开”,你这个方式只能找到windows的资源管理器打开的文件夹,我要是用别的文件管理器打开文件夹呢?最简单的,我用命令行打开文件夹你怎么管?保护文件最好的方式是加密,而不是什么文件夹不能打开,简直是一个无厘头的需求,提需求的人无脑,分析需求的人也无脑,开发的人更无脑。
ou108 2017-09-29
  • 打赏
  • 举报
回复
引用 4 楼 wddw1986 的回复:
这个需求都被你做偏了。什么叫做“保护win7,win8,win10客户端电脑中相关的文件夹不被打开”,你这个方式只能找到windows的资源管理器打开的文件夹,我要是用别的文件管理器打开文件夹呢?最简单的,我用命令行打开文件夹你怎么管?保护文件最好的方式是加密,而不是什么文件夹不能打开,简直是一个无厘头的需求,提需求的人无脑,分析需求的人也无脑,开发的人更无脑。
哥们:用查找窗体局柄的方法,俺的程序已经测试通的,用命令行打开文件夹 程序可以直接关闭,因为只要是打开这个窗体,它就有局柄, 至于用其它的程序打开文件夹(保存另存为等不在此需求内); 您老激动了。
ou108 2017-09-28
  • 打赏
  • 举报
回复
本人是想在服务中直接查找窗体局柄,然后直接关闭。 穿透Session 0 是迂回的做法,启动一个exe程序查找窗体局柄再关闭。 向大师们求助。
大鱼> 2017-09-27
  • 打赏
  • 举报
回复
保护win7,win8,win10客户端电脑中相关的文件夹不被打开。这个需求不错,做好了能不能分享一下。

111,094

社区成员

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

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

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