mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
DotNET
DotNET

使用 Win32 API 來進行控制其他程式視窗行為表現

昨天晚上,看到 瓶水相逢.NET  跟 Network Programming in .NET with C# & Visual Basic .NET(VB.NET) 上的技術文章, 於是就找個主題來實作一下, 到了今天早上還到 宅之力 來參考一些技術文章, 想說用用 P/Invoke 的功能, 來呼叫 Win32 API  的一些功能, 後就就找了 ShowWindow(...)、FindWindow(...)、SendMessage(...) 等, 來好好做個使用範例, 本文比較著墨在 ShowWindow(...) 上的用法, 所以在其參數上的說明會比較多~~~ 這個用法主要是在於用本程式去「控制其他程式視窗行為表現」方面, 例如:視窗的放大、縮小、隱藏...等。 最後,我提供一個自己製作的範例使用檔 ( 含原始碼 ) 給大家參考。 而本程式是先暫時以控制 Notepad ( 記事本 ) 為範例~ 再請大家多多參考囉~~~ ※ 本程式能完成,感謝上述所提及的網站的技術文件的提供參考,本人亦有在原程式碼中註明。 ※ 同樣的,如果您有使用參考到本程式的地方,本人也是非常的歡迎您參考使用,但是請您載明出處及作者 ,謝謝。   範例程式下載網址: http://www.blueshop.com.tw/download/show.asp?pgmcde=PGM20090105152622ILG&extcde=PGMDEFNEW   ========================    以 下 為 範 例 程 式 介 面 ========================   ======================== 以 下 為 程 式 碼 內 容 ======================== view plaincopy to clipboardprint? //-----------------------------------------    // 本範例程式目前有三大功能~    // 1. 控制 記事本 (notepad.exe) 的視窗變化  ==> ShowWindow(...)    // 2. 找尋特定視窗 ==> FindWindow(...)    // 3. 送出指令給特定視窗,如關閉視窗  ==> SendMessage(...)    //    //    // *程式設計: NobelHsieh ( Nobel12, 軋延油 ) http://www.wretch.cc/blog/nobel12    // *本程式可提供教學上之無償使用,但相關使用請符合智慧財產之規定,請註明本人原作者及出處即可~    //    //-----------------------------------------      

2009-10-12 0comments 96hotness 0likes mikebai Read all
DotNET

如何激活一个已存在的进程

我想在   .NET   框架中用   C#   编写一个程序,该程序要激活另一个窗口。在   Windows/MFC   中我可以调用   SetActiveWindow   函数来实现。在.NET   框架中我该怎么做呢?       John   McCormick             你可以调用   Form.Activate   来激活你自己的窗体,但惊奇的是,在   .NET   Framework   中没有函数可以激活属于另外一个进程或程序的窗体。不要害怕,任何时候,只要.NET   Framework无法满足你的需要,你通常都可以使用托管(interop)机制直接与Windows   交互。目前情况下,你需要的函数是   SetForegroundWindow。它带唯一的参数——你想激活的窗   口的句柄(HWND).   using   System.Runtime.InteropServices;     public   class   MyClass   {         [DllImport("user32.dll")]         public   static   extern   void               SetForegroundWindow(IntPtr   hwnd);     }         在你的代码中使用此托管申明,并且假设你已经拥有了你希望激活的窗口的句柄,你要做的是调用   SetForegroundWindow:   IntPtr   hwnd   =   //   get   HWND     SetForegroundWindow(hwnd);           你怎样获得窗口句柄呢?根据你的程序的工作方式,有许多方法可以做到,但最通用的一种方法是调用   FindWindow,你可以用这个   API   函数由窗口的标题或类名获得窗口句柄,在此你又要在   C#   中用到托管:   public   class   MyClass   {         [DllImport("user32.dll")]         public   static   extern   IntPtr             FindWindow(String   classname,   String   title);     }         classname   是   Window   注册的窗口类的名字,title   是窗口标题。这些参数只能有一个为   NULL,不能全为   NULL。              

2009-10-12 0comments 111hotness 0likes mikebai Read all
DotNET

使用RegularExpressionValidator验证

使用RegularExpressionValidator验证: 只能输入数字:“^[0-9]*$”只能输入n位的数字:“^d{n}$”只能输入至少n位数字:“^d{n,}$”只能输入m-n位的数字:“^d{m,n}$”只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”只能输入非零的正整数:“^+?[1-9][0-9]*$”只能输入非零的负整数:“^-[1-9][0-9]*$”只能输入长度为3的字符:“^.{3}$”只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间, 只能包含字符、数字和下划线。验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”只能输入汉字:“^[u4e00-u9fa5],{0,}$”验证Email地址:"^[^@]([a-zA-Z_0-9.])+@([a-zA-Z_0-9.])+[^@]$"验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$” 验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$” asp.net里面自带的验证Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 只能输入数字与符号“-”     ^[\d\-]+$ 只能输入数字、英文、下划线、中杠线     [\w\-]+ ps:在网上找到的,写在这里作个记号...

2009-10-09 0comments 97hotness 0likes mikebai Read all
DotNET

C#正则表达式整理备忘

有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就能看到好几个正则表达式的帖子,那段时间借助论坛以及Wrox Press出版的《C#字符串和正则表达式参考手册》学习了一些基础的知识,同时也为我在CSDN大概赚了1000分,今天想起来,去找《C#字符串和正则表达式参考手册》时,已经不知所踪了。现在用到正则的时候也比较少,把以前的笔记等整理一下,以志不忘。(1)“@”符号符下两ows表研究室的火热,当晨在“@”虽然并非C#正则表达式的“成员”,但是它经常与C#正则表达式出双入对。“@”表示,跟在它后面的字符串是个“逐字字符串”,不是很好理解,举个例子,以下两个声明是等效的:string x="D:\\My Huang\\My Doc";string y = @"D:\My Huang\My Doc";事实上,如果按如下声明,C#将会报错,因为“\”在C#中用于实现转义,如“\n”换行:string x = "D:\My Huang\My Doc";(2)基本的语法字符。\d  0-9的数字\D  \d的补集(以所以字符为全集,下同),即所有非数字的字符\w  单词字符,指大小写字母、0-9的数字、下划线\W  \w的补集\s  空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f\S  \s的补集.  除换行符\n外的任意字符[…]  匹配[]内所列出的所有字符[^…]  匹配非[]内所列出的字符下面提供一些简单的示例: Codestring i = "\n";string m = "3";Regex r = new Regex(@"\D");//

2009-10-09 0comments 95hotness 0likes mikebai Read all
DotNET

用户名合法字符判断

录入用户名经常都有这样子要求:首字符是字母,只允许录入字母、数字和下划线 我用了两种方法判断,第一种方法是直接使用字符串判断: private bool CheckUserName(string s)    {        string str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789";        if (str.Substring(0, 52).IndexOf(s[0]) == -1)        {            //首字符不是字母            return false;        }        else        {            foreach (char c in s)            {                if (str.IndexOf(c.ToString()) == -1)                {                    return false;                }            }        }        return true;    } 第二种方法是使用正则表达式判断: private bool CheckStr(string s)    {        System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z][a-zA-Z0-9|_]{2,19}$");        if (reg.IsMatch(s))        {            return true;        }        else        {            return false;        }    } 在asp.net里,使用正则表达式还可以用验证控件: <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="*" ControlToValidate="TextBox1" ValidationExpression="^[a-zA-Z][a-zA-Z0-9|_]{2,19}$"></asp:RegularExpressionValidator> 下面解释一下我的正则表达式:^[a-zA-Z][a-zA-Z0-9|_]{2,19}$ ^:匹配字符串的开头,在多行检索中,匹配一行的开头 $:匹配字符串的结尾,在多行检索中,匹配一行的结尾 |:选择,匹配的是该符号左边的子表达式或者右边的子表达式 以上三行载自《JavaScript权威指南》第四版P180 - P181 {n, m}:匹配前一项至少n次,但是不能超过m次 {n, }:匹配前一项n次,或更多次 {n}:匹配前一项恰好n次 以上三行载自《JavaScript权威指南》第四版P177

2009-10-08 0comments 93hotness 0likes mikebai Read all
DotNET

ASP.NET 2.0 中的资源与本地化

ASP.NET 2.0 中的资源与本地化 发布日期: 2006-08-22 | 更新日期: 2006-08-22 Ted Pattison 下载本文的代码:BasicInstincts2006_08.exe (878KB) 本页内容 控制页面级别的区域性设置 使用配置文件跟踪语言首选项 ASP.NET 2.0 中的资源文件 使用本地资源 在 DLL 项目中嵌入资源 显示本地化图像

2009-08-27 0comments 101hotness 0likes mikebai Read all
DotNET

ASP.NET编程中static变量作用域

  在C#中,static变量表示该变量属于类,而不是类的实例。可以说是该类的所有实例共享一个static变量。   asp.net的页面就是一个类,我们访问一个页面。就会在服务器上实例化一个该类的实例,来响应我们的请求。   “所有实例共享一个static变量” 这就意味着,所有的客户端访问到的asp.net页面中static变量都是同一个变量。   由于我们每次访问asp.net页面都是一个全新的对象,而不是我们上一次访问的对象。所以上次页面访问时我们对页面中变量的改动都没有保留。遇到这个问题的时候,很多初学者的直觉就是将这个变量申明为static,自己在测试的时候发现还真的保留住了页面的状态。窃喜之余没有发现这又有引入了另外一个错误。因为你要的只是页面能保留住状态,而这个状态是针对一个客户端的(session的效果)。而得到的结果是只要一个客户端改变了该值所有的其他客户端都受到了影响(如同Applicatin的效果)。这种情况下,需要的极有可能就是个ViewState或者是Session。   Application与static变量   Application是通过一个集合保存所有的对象。   强类型:   Application中保存的是object,对对象的保存和使用需要作cast动作。对于值类型更需要Box&UnBox。对性能的影响较大。   而static变量是强类型的对象。   线程同步:   Application将所有的对象放到一个集合,这样对访问集合中的任何对象都会锁定这个集合。   假如有Application["A"]、Application["B"]、Application["C"],有线程访问Application["A"]其他线程不能访问Application["B"] and Application["C"]。   而static变量,可以根据他们的作用分别放在不同的class当中。这样可以并行访问不同的static变量,而不存在线程安全问题。   友情提示:   1. 对static变量,做lock时。可以通过lock(typeof(classname))来锁定该变量所在的类的类型,达到线程同步的目的。   2. 由于Aplication,static member是全局变量,而我们是在多线程服务器环境写程序,对他们的使用需要注意线程安全的问题。

2009-08-27 0comments 97hotness 0likes mikebai Read all
DotNET

总结:asp.net页面间数据传递

1. Get(即使用QueryString显式传递) 方式:在url后面跟参数。 特点:简单、方便。 缺点:字符串长度最长为255个字符;数据泄漏在url中。 适用数据:简单、少量、关键的数据。 适用范围:传递给自己、传递给另一个目标页面;常用于2个页面间传递数据。 用法:例如:url后加?UserID=…,跳转到目标页面,目标页面在伺服端可用Request.QueryString["InputText"]获取其指定参数值。具体可参考打印书本P261 2. Post 方式:通用的方式。利用form提交。 特点:最常用的方法。常用技巧是把隐秘的数据存在隐藏域中由form提交。 适用数据:大量数据,包括文件上传。 适用范围:同Get方法 用法:在客户端form指定action目标后submit、在asp.net的伺服端中使用server.Transfer(url)提交;在伺服端中用Request.Form["FormFieldID"]获取。 3. 页面对象的属性 方式:asp.net特有方式 。利用HttpContext获取发请求的页面的信息。 特点:可以直接存储对象。 缺点:注意强制转换的类型要正确。 适用数据:各种数据。 适用范围:页面之间传递复杂数据。 用法:获取Context.Handler将其转换为发请求的页面的实例,随后就可以轻松访问其form中的字段、甚至属性。其中的Context是指HttpContext对象,Handler是其属性,Context.Handler的意思可以理解为创建源页类的实例变量,而得到此实例之后,就可以直接访问其中的属性和Public方法了。可看下打印书本P263的具体使用。 4. cookie 方式:将数据存在客户端的经典方法。 缺点:安全性低、受客户端设置限制、一个站点仅存20个cookie,每个容量4096字节。 有效期:自定义或被用户清除 适用数据:用户的会话数据(一般是用户名,用户的个性化设置信息等) 适用范围:单个用户、整个站点所有页面 用法:引用Request.Cookies(读取信息)、Response.Cookies(写入信息)、或用HttpCookieCollection直接创建Cookie对象。具体可见打印书P252 5. Session 方式:将用户数据存储在伺服端。 特点:asp.net中可以设置session的存储方式、位置、SessionID的保存是否依赖cookie。 可以直接存储对象。 缺点:asp.net中有失效的隐患 有效期:用户活动时间+自定义延迟。 适用数据:用户的特有信息。 适用范围:单个用户、整个站点所有页面。 用法: 复制C#代码保存代码Session["CollectionName"] = value/object; 6. Cache 方式:将用户数据存储在伺服端数据缓存中。 特点:可以大大提高效率。 可以直接存储对象。 缺点:数据更新不及时。 有效期:应用程序生命周期或自定义。 适用数据:所有页面、所有用户都可以共享的数据。 用法: 复制C#代码保存代码Cache["CollectionName"] = value|object; 7. Appliction 方式: 将数据存储于此,相当于全局变量。 特点:可以直接存储对象。整个站点的共享数据。 有效期:应用程序生命周期。 适用数据:所有页面、所有用户共享的数据。 用法: 复制C#代码保存代码Appliction["CollectionName"] = value|object; 8. ViewState 方式:asp.net特有机制,用来恢复页面状态。 特点:将页面各控件及其所存数据序列化存在name为_ViewState的隐藏域中。 缺点:存在HTML中,安全性较低。可以设置加密和验证,但数据量会大增、效率有影响。 适用数据:页面PostBack需要保存的数据,数据太大会影响页面发送效率。 适用范围:页面自身数据保存。 用法: 复制C#代码保存代码ViewState["CollectionName"] = value; 9. Static 方式: 将数据存于静态变量中。 特点:利于提高效率。 缺点:若用不好会致使用户或页面间数据紊乱,造成极大的隐患。建议只赋值一次,绝对禁止为单个用户而更改此值。 适用数据:所有用户共享的数据。 适用范围:此类所有的页面实例。 用法:在class中声明静态变量。 整理: 页面自身保存数据可用的有ViewState,static变量。 页面之间传递数据常用get,post,HttpContext,当然可以变通一下用于自身数据保存。 单用户的所有页面数据共享常用session,cookie,当然也可以应用在以上两种情况。 整个应用程序(所有用户所用页面)的数据共享常用Appliction,cache,static变量。 总结: 当然可以变通下灵活应用来解决问题,但是要选择合适的,常见到滥用Get和Session。 建议在用Request的时候要指明所取的集合,比如Get方法传来的参数从QueryString集合取,Post的从Form取,cookie从Cookies里取。虽然用Request[]集合,以上几种都可以取到,但是却造成性能上的浪费,本来直接在Form集合中,却遍历了QueryString,Form,Cookies等集合才取出来。 ps:在计算机的世界里,凡是提供服务的一方我们称为伺服端(server),而接受服务的另一方我们称作客户端(client)。

2009-08-27 0comments 98hotness 0likes mikebai Read all
DotNET

RichTextBox.AutoWordSelection的BUG

MSDN的解释. public bool AutoWordSelection { set; get; }     System.Windows.Forms.RichTextBox 的成员 摘要: 获取或设置一个值,通过该值指示是否启用自动选择字词。 返回值: 如果启用自动选择字词,则为 true;否则为 false。默认为 true。 ---------------------------------- 该属性设置为false后,你会发现还是自动选词模式.恶心蒙了,................ 费解了我好一会.刚才用"AutoWordSelection BUG"GOOGLE下.原来还真是个BUG... 在formload里面设置下             rtxtImiResult.AutoWordSelection = true;             rtxtImiResult.AutoWordSelection = false; 即可.  

2009-07-18 0comments 97hotness 0likes mikebai Read all
DotNET

datagrid Styling

Microsoft’s WPF datagrid has a lot of properties and styles you can tweak to get it looking right (if you are a designer).  Below, find my cheat sheet to styling the grid.   It is not 100% comprehensive but it gets you far and has a few very useful tips & gotchas. At the highest level in the DataGrid , you can change the look & feel by setting some of these: Property Type Values Default AlternatingRowBackground Brush Any Brush Null Background Brush Any Brush Theme default ColumnHeaderHeight Double 0 to any positive double NaN ColumnHeaderStyle Style Any Style Null ColumnWidth DataGridLength 0 to any positive double, Auto, *, SizeToCells, SizeToHeader SizeToHeader HeadersVisibility DataGridHeadersVisibility All, Row, Column, None All MaxColumnWidth Double 0 to any positive double Positive Infinity MaxRowHeight Double 0 to any positive double Positive Infinity MinColumnWidth Double 0 to any positive double 20 MinRowHeight Double 0 to any positive double 0 RowBackground Brush Any Brush Theme default RowDetailsVisibilityMode DataGridRowDetailsVisibilityMode Visible, VisibleWhenSelected, Collapsed VisibleWhenSelected RowHeadersWidth Double 0 to any positive double NaN RowHeight Double 0 to any positive double NaN

2009-03-30 0comments 104hotness 0likes mikebai Read all
1…1213141516

Recent Posts

  • c# winform适配高dpi
  • com.microsoft.sqlserver.jdbc.SQLServerException “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server建立安全连接
  • java -cp 用法介绍
  • HTML 容器元素
  • MVC的cshtml的介绍

Recent Comments

No comments to show.

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang