2009年5月

让Window程序只能运行一个实例

如何让window运用程序只有一个实例,重复运行即会显示以前打开的实例。

[code lang="csharp"]
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;

namespace Junstyle
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
if( Exist() )
{
Application.Exit();
return;
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault( false );
Application.Run( new frmMain() );
}

[DllImport( "User32.dll" )]
private static extern bool ShowWindowAsync( System.IntPtr hWnd, int cmdShow );
[DllImport( "User32.dll" )]
private static extern bool SetForegroundWindow( System.IntPtr hWnd );

public static bool Exist()
{
bool ret = false;
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName( current.ProcessName );
//遍历与当前进程名称相同的进程列表
foreach( Process process in processes )
{
//Ignore the current process
if( process.Id != current.Id )
{

if( Assembly.GetExecutingAssembly().Location.Replace( "/", "\\" ) == current.MainModule.FileName )
{
ShowWindowAsync( process.MainWindowHandle, 1 ); //调用api函数,正常显示窗口
SetForegroundWindow( process.MainWindowHandle ); //将窗口放置最前端。
return true;
}
}
}
return ret;
}
}
}
[/code]

C#控制台程序:用*显示密码输入

用ConsoleKeyInfo记录按键信息

C#代码
  1. static void Main(string[] args)   
  2. {   
  3.     List<ConsoleKeyInfo> ls = new List<ConsoleKeyInfo>();   
  4.     ConsoleKeyInfo cki = Console.ReadKey(true);   
  5.     while (cki.Key.ToString() != "Enter")   
  6.     {   
  7.     ls.Add(cki);   
  8.     Console.Write("*");   
  9.     cki = Console.ReadKey(true);   
  10.     }   
  11.   
  12.     Console.WriteLine();   
  13.   
  14.     foreach (ConsoleKeyInfo o in ls)   
  15.     {   
  16.     Console.Write(o.KeyChar);   
  17.     }   
  18.     Console.ReadLine();   
  19. }  

 

asp.net页面详细执行流程

asp.net页面从请求到呈现给用户的过程

1. BeginRequest
2. AuthenticateRequest
3. PostAuthenticateRequest
4. AuthorizeRequest
5. PostAuthorizeRequest
6. ResolveRequestCache
7. PostResolveRequestCache
8. PostMapRequestHandler
9. AcquireRequestState
10. PostAcquireRequestState
11. PreRequestHandlerExecute
12. At this stage, the selected handler executes the current request. The most familiar handler is the Page handler.
13. PostRequestHandlerExecute
14. ReleaseRequestState
15. PostReleaseRequestState
16. UpdateRequestCache
17. PostUpdateRequestCache
18. EndRequest

其中第12步,具体的页面执行流程,分为如下步骤:

Page.OnPreInit
MasterPageControl.OnInit (for each control on the master page)
Control.OnInit (for each contol on the page)
MasterPage.OnInit
Page.OnInit
Page.OnInitComplete
Page.OnPreLoad
Page.OnLoad
MasterPage.OnLoad
MasterPageControl.OnLoad (for each control on the master page)
Control.OnLoad (for each contol on the page)
Page.OnXXX (control event)
MasterPage.OnBubbleEvent
Page.OnBubbleEvent
Page.OnLoadComplete
Page.OnPreRender
MasterPage.OnPreRender
MasterPageControl.OnPreRender (for each control on the master page)
Control.OnPreRender (for each contol on the page)
Page.OnPreRenderComplete
MasterPageControl.SaveControlState (for each control on the master page)
Control.SaveControlState (for each contol on the page)
Page.SaveViewState
Page.SavePageStateToPersistenceMedium
Page.OnSaveStateComplete
MasterPageControl.OnUnload (for each control on the master page)
Control.OnUnload (for each contol on the page)
MasterPage.OnUnload
Page.OnUnload

IE8上传文件时javascript取文件的本地路径的问题C:\fakepath\

前几天把IE升级到了IE8,没想到一个网站里面的上传图片时用JavaScript预览本地图片的功能失效了,图片总是显示错误,看了下图片的路径居然变成了C:\fakepath\xxx.gif,真实的路径被C:\fakepath\取代了,原来是因为IE8增加了安全选项,默认情况下不显示上传文件的真实路径,进入internet选项,修改下设置即可显示真实的文件路径。

工具 -> Internet选项 -> 安全 -> 自定义级别 -> 将本地文件上载至服务器时包含本地目录路径,选中启用即可。

javascript判断浏览器是不是IE6

一个项目中要判断浏览器是不是IE6,用jQuery的utility里面的方法$.browser.version判断居然总是显示是IE6,但我用的明明是IE7(我的操作系统是server2003,$.browser.version在window6.0的系统上总是返回6.0,算是bug吧),最后没有办法只好用下面蹩脚的方法判断了,把下面的代码加在页面里就可以判断是不是IE6,当然稍加修改也可以用来判断是不是IE7、IE8。firefox可以用其它方法判断。

[code lang="js"]
var isIE6=false;
document.write("<!--[if lte IE 6]><script>isIE6=true;</scr"+"ipt><![endif]-->");
if(isIE6){
alert('你当前的浏览器是IE6或者以下');
}
[/code]

附上另外一个判断方法:

[code lang="js"]
if(window.XMLHttpRequest){ //Mozilla, Safari, IE7
if(!window.ActiveXObject){ // Mozilla, Safari,
alert('Mozilla, Safari');
}else{
alert('IE7');
}
}else {
alert('IE6');
}
[/code]

附上其它的判断浏览器的语句

[code lang="html"]
1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->
2. <!--[if IE]> 所有的IE可识别 <![endif]-->
3. <!--[if IE 5.0]> 只有IE5.0可以识别 <![endif]-->
4. <!--[if IE 5]> 仅IE5.0与IE5.5可以识别 <![endif]-->
5. <!--[if gte IE 5.0]> IE5.0以及IE5.0以上版本都可以识别 <![endif]-->
6. <!--[if IE 6]> 仅IE6可识别 <![endif]-->
7. <!--[if lte IE 6]> IE6以及IE6以下版本可识别 <![endif]-->
8. <!--[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]-->
9. <!--[if IE 7]> 仅IE7可识别 <![endif]-->
10. <!--[if lte IE 7]> IE7以及IE7以下版本可识别 <![endif]-->
11. <!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]-->
[/code]

zblog的编辑器上的代码高亮让我抓狂

重新安装的zblog居然给文字加色和加背景色都没有效果,想插入一段html或javascript代码也让我无从下手,在提供的插件里下了个highlight,质量太差了,使用了之后格式化的代码难看不说,还提示javascript错误,不知道怎么就放出来了给zblog用户下载,在zblog论坛上下载了一个代码高亮的插件,安装后在编辑器里面使用让我抓狂,换到源代码编辑模式把html代码粘上去,在换到正常模式,代码里面的换行都不见了,这样代码高亮也是一点用处都没有了,代码都到一行了,而且一看网页源码的,那个代码高亮居然一口气加载了七八个js文件,严重影响网页下载速度,实在没办法了,所有的代码高亮插件全部删掉,还是用fck的代码高亮插件解决了,虽说不算完美,因为在生成的日志里面,复制的代码仍然不能换行!

非常酷的jquery弹框插件:FancyBox

一个外国人写的jquery弹框插件,看他网站的alexa排名真高,应该是非常有名的弹框插件了。插件网站地址:http://fancy.klade.lv/home google code上的源码地址:http://code.google.com/p/fancybox/downloads/detail?name=jquery.fancybox-1.2.1.zip

可以弹出如下内容的窗口(注意:所有的触发弹框的dom必须是A这个标签,而且a中必须带有href属性,感觉有点局限性)

1、单个图片,(href属性就是一个图片的地址了,而且地址必须满足这个正则:/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,也就是必须是图片扩展名结尾的地址,这个限制太死了,不知道作者是怎么想的);

2、一组图片,就是一个相册展示(和1差不多,但这组A中必须都有一个rel属性,而且所有的A的rel必须相同);

3、弹出一个Dom的内容(href属性这样写:href="#domid",domid就是要弹出的dom的id;

4、用iframe显示一个链接,(href属性中必须带有iframe字样,或者有个叫iframe的class,不然是弹不出这个链接的内容的);

5、用ajax请求一个连接的内容,然后显示,(href是一个可访问的链接即可,当然不要出现iframe字样,^_^);

就这几种弹出的方式了,差不多可以满足平常的需求。

附上使用插件的方法和初始化的配置项:

1. Include nessesary JS files
<script type="text/javascript" src="path-to-file/jquery.js"></script> <script type="text/javascript" src="path-to-file/jquery.fancybox.js"></script>

Optional, add if you wish to use fancy transitions as jQuery by default supports only "swing" and "linear"
<script type="text/javascript" src="path-to-file/jquery.easing.js"></script>

2. Add FancyBox CSS file
Don`t forget to change image paths if CSS file is not in the same directory as images used by FancyBox
<link rel="stylesheet" href="path-to-file/fancybox.css" type="text/css" media="screen">

3. Create a link element (<a href>)

For images
<a id="single_image" href="image_big.jpg"><img src="image_small.jpg" alt=""/></a>

Inline content
<a id="inline" href="#data">This shows content of element who has id="data"</a>

Iframe
<a href="http://www.example?iframe">This goes to iframe</a> or <a class="iframe" href="http://www.example">This goes to iframe</a>

Ajax <a href="http://www.example/data.php">This takes content using ajax</a>

Optional: Use the

title

attribute if you want to show a caption
Note: You may want to set hideOnContentClick to false if you display iframed or inline content and it containts clickable elements (for example - play buttons for movies, links to other pages)

4. Fire plugin using jQuery selector
If you are not familiar with jQuery, please, read at least this tutorial for beginners
Sample examples: $(document).ready(function() { /* This is basic - uses default settings */ $("a#single_image").fancybox(); /* Using custom settings */ $("a#inline").fancybox({ 'hideOnContentClick': true }); $("a.group").fancybox({ 'zoomSpeedIn': 300, 'zoomSpeedOut': 300, 'overlayShow': false }); });
Galleries are created from found anchors who have the same "rel" tags

Available options

You can pass them as shown above or modify them at the bottom of FancyBox JS file

padding Padding around content
imageScale If true, images are scaled to fit in viewport
zoomOpacity If true, changes content transparency when animating
zoomSpeedIn Speed in miliseconds of the zooming-in animation
(no animation if 0)
zoomSpeedOut Speed in miliseconds of the zooming-out animation
(no animation if 0)
zoomSpeedChange Speed in miliseconds of the animation when changing gallery items
(no animation if 0)
easingIn, easingOut, easingChange Easing used for animations
frameWidth Default width for iframed and inline content
frameHeight Default height for iframed and inline content
overlayShow If true, shows the overlay (false by default)
Overlay color is defined in CSS file
overlayOpacity Opacity of overlay (from 0 to 1)
hideOnContentClick Hides FancyBox when cliked on opened item
centerOnScroll If true, content is centered when user scrolls page
itemArray Optional, can set custom item array
callbackOnStart Optional, called on start
callbackOnShow Optional, called on displaying content
callbackOnClose Optional, called on close

转一个作者网站上的常见问答:

4. How can I close FancyBox from other element? ?

Just call

$.fn.fancybox.close()

on your onClick event

动态加载javascript文件

Only for IE

[code lang="js"]
/*Javascript 动态加载*/
var loadJS, loadjs;
loadJS=loadjs=function(src,id,callback){
var scriptId = document.getElementById(id);
if (scriptId){
if(callback) callback();
}else{
var s = document.createElement("script");
s.id = id;
s.type = "text/javascript";
s.src = src;
s.onload = s.onreadystatechange = function(){
if (s.readyState && s.readyState != 'loaded' && s.readyState != 'complete'){
return;
}
s.onreadystatechange = s.onload = null;
//当前文件加载完毕,触发回调事件
if (callback) callback();
};
var head = document.getElementsByTagName('head').item(0);
head.appendChild (s);
}
}
loadJS("http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js", "jquery", function(){alert($("#sdf").length);});
[/code]