精华内容
下载资源
问答
  • C#WINDOWS服务交互的实现的前言:这几天想做个文件监控服务,看了一下网上的关于WINDOWS服务的文章,数量都不少,都只讲了如何做一个最基本的服务,却没有讲述如何与用户进行交互。查看了MSDN,看一下关于服务的描述...

    C#WINDOWS服务交互的实现的前言:这几天想做个文件监控服务,看了一下网上的关于WINDOWS服务的文章,数量都不少,都只讲了如何做一个最基本的服务,却没有讲述如何与用户进行交互。查看了MSDN,看一下关于服务的描述:

    WINDOWS服务交互应用程序在不同于登录用户的交互区域的窗口区域中运行。窗口区域是包含剪贴板、一组全局原子和一组桌面对象的安全对象。由于 WINDOWS服务交互的区域不是交互区域,因此 Windows 服务应用程序中引发的对话框将是不可见的,并且可能导致程序停止响应。同样,错误信息应记录在 Windows 事件日志中,而不是在用户界面中引发。

    .NET Framework 支持的 WINDOWS服务交互类不支持与交互区域(即登录用户)进行交互。同时,.NET Framework 不包含表示区域和桌面的类。如果 WINDOWS服务交互务必须与其他区域进行交互,则需要访问非托管的 Windows API。

    也就是说我们要实现可交互的服务(比如我们想给服务在运行时做一些参数设置等),那我们一定要using System.Runtime.InteropServices

    那么来看一下如果才能实现一个可交互的服务呢。步骤与实现基本的服务一样(各位可自行参考MSDN或网上google一下).

    在实现OnStart时要注意,这里可不能弹出一个FORM什么的。这样做是没有任何反应的。我们可以在这个方法里运行一个线程。该线程需要访问窗口区域对象或桌面对象,当然 framework里是没有提供这些的,要访问非托管代码的。

    来看一下代码,再运行试一下。

    1. using System;  
    2. using System.Collections;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Diagnostics;  
    6. using System.ServiceProcess;  
    7. using System.Threading;  
    8. using System.Runtime.InteropServices;  
    9. namespace FileWatchService  
    10. {  
    11. public class Service1 : System.ServiceProcess.ServiceBase  
    12. {  
    13. ///   
    14. /// 必需的设计器变量。  
    15. ///   
    16. private System.ComponentModel.Container components = null;  
    17. Thread threadForm=null;  
    18. public Service1()  
    19. {  
    20. // 该调用是 Windows.Forms 组件设计器所必需的。  
    21. InitializeComponent();  
    22.  
    23. // TODO: 在 InitComponent 调用后添加任何初始化  
    24. }  
    25.  
    26. #region 组件设计器生成的代码  
    27. ///   
    28. /// 设计器支持所需的方法 - 不要使用代码编辑器   
    29. /// 修改此方法的内容。  
    30. ///   
    31. private void InitializeComponent()  
    32. {  
    33. //   WINDOWS服务交互
    34. // Service1  
    35. //   
    36. this.ServiceName = "JadeWatchService";  
    37.  
    38. }  
    39. #endregion  
    40. [STAThread]  
    41. static void Main()   
    42. {  
    43. System.ServiceProcess.ServiceBase.Run(new Service1());  
    44.  
    45. }  
    46. ///   WINDOWS服务交互
    47. /// 清理所有正在使用的资源。  
    48. ///   
    49. protected override void Dispose( bool disposing )   
    50. {  
    51. if( disposing )  
    52. {  
    53. if (components != null)   
    54. {  
    55. components.Dispose();  
    56. }  
    57. }  
    58. base.Dispose( disposing );  
    59. }  
    60.  
    61. ///   
    62. /// 设置具体的操作,以便服务可以执行它的工作。  
    63. ///   
    64. protected override void OnStart(string[] args)  
    65. {  
    66. threadForm=new Thread(new ThreadStart(FormShow));  
    67. threadForm.Start();  
    68. }  
    69.  
    70. ///   WINDOWS服务交互
    71. /// 停止此服务。  
    72. ///   
    73. protected override void OnStop()  
    74. {  
    75. if(threadForm!=null)  
    76. {  
    77. if(threadForm.IsAlive)  
    78. {  
    79. threadForm.Abort();  
    80. threadForm=null;  
    81. }  
    82. }  
    83. }  
    84.  
    85. void FormShow()  
    86. {  
    87.  
    88. GetDesktopWindow();   
    89. IntPtr hwinstaSave = GetProcessWindowStation();   
    90. IntPtr dwThreadId = GetCurrentThreadId();   
    91. IntPtr hdeskSave = GetThreadDesktop(dwThreadId);   
    92. IntPtr hwinstaUser = OpenWindowStation(
    93. "WinSta0"false,33554432);   
    94. if (hwinstaUser == IntPtr.Zero)   
    95. {   
    96. RpcRevertToSelf();   
    97. return ;  
    98. }   
    99. SetProcessWindowStation(hwinstaUser);   
    100. IntPtr hdeskUser = OpenDesktop(
    101. "Default", 0, false, 33554432);   
    102. RpcRevertToSelf();   
    103. if (hdeskUser == IntPtr.Zero)   
    104. {   
    105. SetProcessWindowStation(hwinstaSave);   
    106. CloseWindowStation(hwinstaUser);   
    107. return ;   
    108. }   
    109. SetThreadDesktop(hdeskUser);   
    110.  
    111. IntPtr dwGuiThreadId = dwThreadId;   
    112.  
    113. Form1 f=new Form1(); 
    114. //此FORM1可以带notifyIcon,可以显示在托盘里,用户可点击托盘图标进行设置  
    115. System.Windows.Forms.Application.Run(f);  
    116.  //WINDOWS服务交互
    117.  
    118. dwGuiThreadId = IntPtr.Zero;   
    119. SetThreadDesktop(hdeskSave);   
    120. SetProcessWindowStation(hwinstaSave);   
    121. CloseDesktop(hdeskUser);   
    122. CloseWindowStation(hwinstaUser);   
    123. }  
    124.  
    125. [DllImport("user32.dll")]  
    126. static extern int GetDesktopWindow();  
    127.  
    128. [DllImport("user32.dll")]  
    129. static extern IntPtr GetProcessWindowStation();  
    130.  
    131. [DllImport("kernel32.dll")]  
    132. static extern IntPtr GetCurrentThreadId();  
    133.  
    134. [DllImport("user32.dll")]  
    135. static extern IntPtr GetThreadDesktop(IntPtr dwThread);  
    136.  
    137. [DllImport("user32.dll")]  
    138. static extern IntPtr OpenWindowStation(string a,bool b,int c);  
    139.  
    140. [DllImport("user32.dll")]  
    141. static extern IntPtr OpenDesktop(string lpszDesktop, uint dwFlags,  
    142. bool fInherit, uint dwDesiredAccess);  
    143.  
    144. [DllImport("user32.dll")]  
    145. static extern IntPtr CloseDesktop(IntPtr p);  
    146.  
    147. [DllImport("rpcrt4.dll", SetLastError=true)]  
    148. static extern IntPtr RpcImpersonateClient(int i);  
    149.  
    150.  
    151. [DllImport("rpcrt4.dll", SetLastError=true)]  
    152. static extern IntPtr RpcRevertToSelf();  
    153.  
    154. [DllImport("user32.dll")]  
    155. static extern IntPtr SetThreadDesktop(IntPtr a);  
    156.  
    157. [DllImport("user32.dll")]  
    158. static extern IntPtr SetProcessWindowStation(IntPtr a);  
    159. [DllImport("user32.dll")]  
    160. static extern IntPtr CloseWindowStation(IntPtr a);  
    161. }  

    C#WINDOWS服务交互的实现的相关内容就向你介绍到这里,希望对你学习和了解C#WINDOWS服务交互的实现有所帮助。

    展开全文
  • (30KB) 58,sclcon.zip 不知道你对ie里背景水印属性有没有印象,现在你在窗体里也可以实现了(162KB) 59,submenu.zip 可以在VB自定义弹出式子菜单(8KB) 60,zlibtool.zip 较好一个有进度显示...
  • (30KB) 58,sclcon.zip 不知道你对ie里背景水印属性有没有印象,现在你在窗体里也可以实现了(162KB) 59,submenu.zip 可以在VB自定义弹出式子菜单(8KB) 60,zlibtool.zip 较好一个有进度显示...
  • MFC异形对话框

    2018-02-09 15:34:17
    基本原理:获取窗体区域,指定一个颜色为透明色,遍历位图,将图上所有该色区域窗体区域中去除。这样最后就得到了一个异形窗体。然后把背景图绘制窗体上。注意绘制时候,作为透明部分依然会被以原色绘制。...

    基本原理:

    获取窗体区域,指定一个颜色为透明色,遍历位图,将图上所有该色区域从窗体区域中去除。这样最后就得到了一个异形窗体。

    然后把背景图绘制在该窗体上。注意绘制的时候,作为透明的部分依然会被以原色绘制。但是由于绘制的地方并没有窗体,故而是显示不出来的。

     

    在对话框的OnInitDialog()函数中加入以下代码:

    CDC* pDC = GetDC();//获得设备上下文
    CDC memDC;
    CBitmap bitmap;//声明位图对象
    CBitmap* bmp = NULL;
    COLORREF currentColor;//当前像素颜色
    COLORREF transparentColor = RGB(255, 255, 255);//定义透明颜色
    CRect rc;
    int x, y;
    CRgn mainRgn, currentRgn;
    GetWindowRect(&rc);//获得窗体区域
    bitmap.LoadBitmap(IDB_BITMAP1);//装载模板位图
    memDC.CreateCompatibleDC(pDC);//创建与内存兼容的设备上下文
    bmp = memDC.SelectObject(&bitmap);
    mainRgn.CreateRectRgn(0, 0, rc.Width(), rc.Height());//初始化区域
    
    for (x = 0; x <= rc.Width(); x++)
    {
    	for (y = 0; y <= rc.Height(); y++)
    	{
    		//将透明部分去掉
    		currentColor = memDC.GetPixel(x, y);//得到当前象素颜色
    											//如果当前色是透明颜色,就将该像素所在位置从窗体区域中去除
    		if (currentColor == transparentColor)
    		{
    			currentRgn.CreateRectRgn(x, y, x + 1, y + 1);//创建区域
    			mainRgn.CombineRgn(&mainRgn, ¤tRgn, RGN_XOR);//去除相互重叠的区域
    			currentRgn.DeleteObject();//删除区域对象
    		}
    	}
    }
    SetWindowRgn((HRGN)mainRgn, TRUE);//设置窗体为区域的形状
    
    memDC.DeleteDC();
    ReleaseDC(pDC);

    重载对话框的OnCtlColor()函数,加入以下代码:

    *注意这里的代码只是为了给对话框贴图。对话框的形状在上面的OnInitDialog()函数中就已经确定了。如果没有这里的贴图代码,对话框依然是异形的,但是是默认的白色背景。

    HBRUSH CsEXDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	// TODO:  Change any attributes of the DC here
    	CBitmap bmpBKGround;
    	bmpBKGround.LoadBitmap(IDB_BITMAP1);//加载图片资源
    	if (nCtlColor == CTLCOLOR_DLG)
    	{
    		CBrush m_Brush(&bmpBKGround);//定义一个位图画刷
    		CRect rect;
    		GetClientRect(rect);//获得窗体的客户区域
    		pDC->SelectObject(&m_Brush);//选中画刷
    		pDC->FillRect(rect, &m_Brush);//填充客户区域
    		return m_Brush;
    	}
    	// TODO:  Return a different brush if the default is not desired
    	return hbr;
    }

    编译运行。

    展开全文
  • 窗口是这三个组件中最基本的组件,事实上,java.awt . Window是Frame和 Dialog 的超类。窗口没有边框、标题栏或菜单栏,而且不能调整其大小。如果需要其他组件之上的无边框矩形区域中显示某些内容,则窗口是最合适...

    Swing的窗口( window)、窗体( frame)和对话框( dialog)是分别扩展AWT的 window类、Frame类和 Dialog类的重量组件。当这三个组件都是窗口时,这三个组件之间的差别是不明显的,因此,有时在给定情况下要确定使用哪个组件是很困难的。

    窗口是这三个组件中最基本的组件,事实上,java.awt . Window是Frame和 Dialog 的超类。窗口没有边框、标题栏或菜单栏,而且不能调整其大小。如果需要在其他组件之上的无边框矩形区域中显示某些内容,则窗口是最合适的。

    窗体是Window的—个扩展,它有边框、标题栏并可以调整大小。当所需的应用程序的窗口需要图标化或要带菜单栏的话,则应该选择使用窗体。

    对话框也是Window 的一个扩展,与窗体一样,它也有边框、标题栏并可以调整大小。对话框可以是模态的,而窗体和窗口则不能是模态的。当需要使用一-个临时窗口来捕获用户输人时,则应该选择使用对话框。

    1、JWindow

    JWindow是一个重量Swing组件,它扩展java.awt . Window并把JRootPane的一个实例作为窗口唯一的组件来进行安装。JWindow的实例没有边框或菜单栏,而且不能调整窗口的大小。通常,如果要在所有其他组件之上显示的无边框区域中显示组件或图形,则使用Swing的窗口。例如,用JWindows 的实例来实现Swing的工具提示。

    2、JDialog

    与JWindow 一样,JDialog是一个重量Swing容器,它包含JRootPane 的一个实例,这是它唯一的组件,’ 与Swing窗口不同,Swing对话框有一个边框和一个标题栏。通常,Swing对话框在它们的标题栏上还有
    一个关闭框,用这个关闭框来清除这个对话框。对话框标题栏组件的样子与窗口系统有关。

    Swing 对话框叮以是模态的,即只要对话框正在显示,就不能访问这个对话框的父窗口’的其他窗口。而且,显示模态对话框的线程被阻塞,直到清除这个对话框。Swing对话框在缺省时,不是模态的。

    JDialog 的实例是基础,本质上它们是配备了一个JRootPane实例的本地对话框。直接使用JDialog类来创建对话框涉及布局这个对话框所包含的各个组件、创建清除对话框的按钮、和安装响应激活的按钮的监听器。Swing 提供一个类(JOptionPane类),它自动完成在创建和显示对话框时所需要做的操作。

    3、JOptionPane

    选项窗格(由JOptionPane类表示)是打算放在对话框中的组件。选项窗格可以显示一个图标、一幅图像、一个或多个可选值和一行按钮。

    展开全文
  • 21、如何单击除了窗口标题栏以外的区域使窗口移动 43 22、如何改变视窗的背景颜色 43 23、如何改变窗口标题 44 24、如何防止主框窗口其说明显示活动的文档名 44 25、如何获取有关窗口正在处理的当前消息的信息 ...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0011 如何锁定窗体中的组件 9 0012 如何改变窗体上网格大小 10 0013 组件选取 10 0014 改变窗体Hint背景色 11 0015 以原始风格显示控件滚动条 11 0016 使用快捷键打开对象观察器中“...”按钮 ...
  • 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上网格大小 10 0013 组件选取 10 0014 改变窗体Hint背景色 11 0015 以原始风格显示控件滚动条 11 0016 使用快捷键打开对象观察器中“...”按钮 ...
  • 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上网格大小 10 0013 组件选取 10 0014 改变窗体Hint背景色 11 0015 以原始风格显示控件滚动条 11 0016 使用快捷键打开对象观察器中“...”按钮 ...
  • 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上网格大小 10 0013 组件选取 10 0014 改变窗体Hint背景色 11 0015 以原始风格显示控件滚动条 11 0016 使用快捷键打开对象观察器中“...”按钮 ...
  • 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上网格大小 10 0013 组件选取 10 0014 改变窗体Hint背景色 11 0015 以原始风格显示控件滚动条 11 0016 使用快捷键打开对象观察器中“...”按钮 ...
  • 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上网格大小 10 0013 组件选取 10 0014 改变窗体Hint背景色 11 0015 以原始风格显示控件滚动条 11 0016 使用快捷键打开对象观察器中“...”按钮 ...
  • delphi经典编程入门

    2014-06-27 17:22:30
    因为在Delphi中,设计用户界面直接在窗体中进行,运行结果和设计样板完全一致。当部件被放到窗体上时,Delphi会自动生成大部分用户界面代码。您所应做只是在它为您生成框架中加入完成所需功能程序段而已。点...
  • 享有全球盛誉编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间资深顾问,本书中和读者分享他编程生涯积累所有丰富经验和心得,他独到、睿智见解,他远见卓识,为开发人员构建...
  • 中文版Excel.2007高级VBA编程宝典 1/2

    热门讨论 2012-04-06 16:00:16
     5.4 基本的电子表格应用程序类型  5.4.1 快捷但质量不高的电子表格应用程序  5.4.2 自己创作、自己使用的电子表格应用程序  5.4.3 单用户电子表格应用程序  5.4.4 意大利面条式电子表格应用程序  5.4.5 实用...
  • 享有全球盛誉编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间资深顾问,本书中和读者分享他编程生涯积累所有丰富经验和心得,他独到、睿智见解,他远见卓识,为开发人员构建...
  • 6.这时软件自动添加基本的头文件,因为这个程序我们不需要其他的功能,所以 直接点击Next。 7.我们将base class 选为QDialog 对话框类。然后点击Next。 8.点击Finish,完成工程的建立。 9.我们可以看见工程的所有...
  • 中文版Excel.2007高级VBA编程宝典 2/2

    热门讨论 2012-04-06 16:41:38
     5.4 基本的电子表格应用程序类型  5.4.1 快捷但质量不高的电子表格应用程序  5.4.2 自己创作、自己使用的电子表格应用程序  5.4.3 单用户电子表格应用程序  5.4.4 意大利面条式电子表格应用程序  5.4.5 实用...
  • 享有全球盛誉编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间资深顾问,本书中和读者分享他编程生涯积累所有丰富经验和心得,他独到、睿智见解,他远见卓识,为开发人员构建...
  • 享有全球盛誉编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间资深顾问,本书中和读者分享他编程生涯积累所有丰富经验和心得,他独到、睿智见解,他远见卓识,为开发人员构建...
  • 在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化可选择着色方式背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善文件...
  • 在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化可选择着色方式背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化可选择着色方式背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善...
  • 在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化可选择着色方式背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善...
  •  《Visual Basic开发实战1200例》分为I、II两卷共计1200个例子,包括了开发各个方面常用实例,是目前市场上实例全面开发类图书;书实例来源于多位工程师多年积累,具有很强实用性。 本书是第I卷,...
  • 在窗体中双击文本字符串尾即可实现自动选定文本并自动复制功能。本工具较同类转换工具准确率达100%。 【背景颜色】 提供可视化可选择着色方式背景着色功能,默认启用智能着色。 【文件批量改名】 功能完善...
  •  《Visual Basic开发实战1200例》分为I、II两卷共计1200个例子,包括了开发各个方面常用实例,是目前市场上实例全面开发类图书;书实例来源于多位工程师多年积累,具有很强实用性。 本书是第I卷,...
  • 定义 数组是一种排列有序数据结构,包含于数组中的变量被称为数组元素, 它们都有相同类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}...
  • VB控件属性使用大全

    2011-12-15 12:02:34
     VisualBasic语言,控件是用户界面的基本要素,是进行可视化程序设计重要基础,它不仅关系到界面是否友好,还直接关系到程序运行速度以及整个程序好坏。每个控件都具有它属性、方法和事件,设计窗体就...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

在窗体中最基本的区域是