豆腐生活

豆腐的平静生活
随笔 - 129, 评论 - 906, 引用 - 60

导航

关于

豆腐制作 都是精品

每月存档

最新留言

广告

【第1页/共2页,26条】
首页
前页
1

如何让程序只运行一次

PDC热热闹闹的结束了,关于最新技术的讨论也告一段落,回头来看看手头的任务吧。

在dotnet和VB中这个是一件非常容易的事情,在VC中虽然说不上复杂,但是也不简单。

如果可以保证自己的程序安全运行,正常退出。到是可以采用在ini文件和注册表中写状态的办法。笑脸

当时这些都不是正路,万一程序没有响应或者没有正常退出,就没有办法了,而且程序也没有办法启动了悲伤的脸

所以应该用正路,FindWindow 或者 CreateMutex,我当然向大家推荐FindWindow,因为价格便宜量又足。

但是存在一个问题,按照什么方法来实现呢?对于MDI/SDI程序来说,title始终处于变化中,而Dialog用Title又不安全,重复的可能行太大了。所以我建议大家使用Window Class Name 来实现。对于MDI/SDI应用程序,只要简单的加入以下代码即可。

在BOOL CTestSingleinstanceApp::InitInstance() 中增加以下代码

 if(!IsFirstInstance())
            return FALSE;
WNDCLASS wc;

 // Get the info for this class.
         // #32770 is the default class name for dialogs boxes.
 ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc);

 // Change the name of the class.
 wc.lpszClassName = "tttttt";

 // Register this class so that MFC can use it.
 AfxRegisterClass(&wc); 

其中IsFirstInstance代码如下

BOOL CTestSingleinstanceApp::IsFirstInstance()
{
 CWnd *pWndPrev, *pWndChild;

        // Determine if another window with your class name exists...
        if (pWndPrev = CWnd::FindWindow(_T("tttttt"),NULL))
        {
          // If so, does it have any popups?
          pWndChild = pWndPrev->GetLastActivePopup();

          // If iconic, restore the main window
          if (pWndPrev->IsIconic())
             pWndPrev->ShowWindow(SW_RESTORE);

          // Bring the main window or its popup to
          // the foreground
          pWndChild->SetForegroundWindow();

          // and you are done activating the previous one.
          return FALSE;
        }
        // First instance. Proceed as normal.
        else
          return TRUE;

}

这段代码不但可以避免程序重复被启动,也可以将原来的程序激活,如同Foxmail那样

但是大家要知道,这样的代码对于Dialog应用程序是不起作用的,因为用Spy++照Dialog的时候,发现Dialog的 Window Class Name 始终是一个常数#32770 (Dialog),经过查找KB文章后终于发现了一个非常郁闷也非常有意思的解决方法。

用文本方式打开Dialog所在的RC文件,做如下修改

IDD_TESTSINGLEINSTANCE_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
    WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "LimitDlgInstance"
CLASS "tttttt" // Add your class name here!

注意这里的Class必须和前面代码中的Class一致,否则程序无法启动。

至此,就完整的解决了在MFC下解决应用程序多次被启动的问题。

 

下面就是闲话时间了,非常感谢开心提醒我,我以前在MS的站点上只知道download和MSDN,现在发现KB也是一个非常不错的技术资源,尤其是身为MVP 还可以访问partner级别的资源,这些天收益不小。

另外,开心问我是不是和molsem较劲?怕molsem抢了我的二把交椅,呵呵有点。不过更应该说是molsem让我有了学习的激情。笑脸

今天又听到了和日本方面的冲突,这样的事情发生在我的母校。我一直以为西北大学就是西部的北大,每次轰轰烈烈的学生运动都离不开这做百年老校的身资,也许是文科特有的政治家的氛围吧

还发现一个非常有意思的地方就是大家似乎对技术类文章没有兴趣,我发现我最受欢迎的随笔是:http://blog.joycode.com/roboo/posts/982.aspx 开心批评我说是因为我的文笔不好,可是我什么时候能够赶得上他的师傅呢?



posted on 2003-10-31 14:24:00 by roboo  评论(7) 阅读(5167)

dotnet migrating tools + managed code and unmanaged cold + asp.net new tricks

我发现自己用拼音要敲出一大段文字真的是一件很不容易的事情。所以我宁愿选择Copy+Paste 和 Link 的办法来实现。

在小气的神那里和dotnettools评测网那里了解到了MS的asp2asp.net 和  php2asp.nte 两个工具。还没有时间进行亲身实践,真的是汗颜,对不起小气的神的辛苦工作呀。今天在http://www.asp.net/migrationassistants/Default.aspx?tabindex=0&tabid=1 又发现了jsp2asp.net 看来MS真的要对web 平台进行整和了。保不准哪一天还会出现 perl2asp.net ColdFusion2Asp.net .........

说实话,我不希望出现这样的情况。虽然MS是一家创新能力很强的公司,但是有至少一个强大的竞争对手是一个更好的选择。

MS有一句话,是说“Vc.net is the most powerful language in the world,because it can access both framework and win32API“,具体的话我记不得了,靠自己的记忆随便写的,应该就是这个意思。昨天我亲身实践了一下,虽然不象想象的那样赏心悦目,但是也的确是畅快淋漓。

在Vc.net下可以将managed code 和 unmanaged code混合编程,这样可以最大限度的利用ms给我们提供的资源。另外也是向下兼容的一个最好的办法。

我曾经给一个hardware写过一个SDK,当时为了做分发,写了很多的sample,VB,VC,BC,Delphi,labview,Java....当时考虑到dotnet已经出现了很多年,所以就决定也写一些dotnet下的例子,但是要将自己的SDK内部的几十个API 在 vb.net 或者C#下全部重新写一遍真的也不是一件非常容易的事情。如果当时我对vc.net 了解的深入一些的话,我当然会毫不忧郁的选择利用VC.net 写一个部件,然后再提供给 vb.net 和C#使用。

说到sample,MSDN 最近更新了一些VC.net的sample code,我下载了以后,学到了很多的东西,大家在这里下载:

Download the Visual C++ .NET Code Samples
This extensive set of code samples shows you how to program many of the most common apps and complete the most common programming tasks in Visual C++ .NET 2003.    (October 27, Download)

在看Graymad 的blog 的时候,看到一篇非常Cool的文章。

Scott Guthrie shows off ASP.NET Whidbey Tricks

看来包括site counter,甚至 RSS read 在 asp 2.0 中都已经built-in 了,我们今后靠什么吃饭呢???

另外也发现了一个非常有趣的图片,据我估计是MSDN网站的后台管理软件

done

今天的在合格随笔有点长,不知道是不是应该化归到 文章中去。

posted on 2003-10-30 10:47:00 by roboo  评论(3) 阅读(2770)

PDC Event

Visual Studio 的roadmap

我之前一直以为Whidbey 会在2005年和longhorn一起发布,原来在2005年会有Orcas的发布,令人期待ing,.,,,

Whidbey

Visual Basic

The Whidbey release of Visual Basic will radically improve developer productivity while continuing to provide full access to the .NET Framework. Key design goals for Visual Basic Whidbey include: reducing the amount of code required to accomplish common tasks; dramatically reducing programming errors at design time; simplifying data access; improving the RAD debugging experience; and delivering high-end features for advanced Visual Basic developers.

我觉得对我冲击最大的特色当属这个

Figure 3. Use of the My. classes provides Visual Basic developers with faster access to commonly used functionality within the .NET Framework.

In addition, the Visual Basic code editor will provide pre-built code templates that enable developers to "fill in the blanks" and focus on solving the problem at hand rather than on language syntax (figure 4). Developers will also be able to easily create and distribute their own customized code snippets.

Figure 4. Code snippets

我相信这样可以极大的提高我们的变成效率

VC.net 也有一些比较大的改动,包括对64位操作系统的支持

In Whidbey, Visual C++ will offer even more power and fine-grained control than its predecessors for systems and application developers targeting both Windows and the .NET Framework. Key improvements are planned across all areas of the product, including the language, compiler, and core libraries. These enhancements will enable C++ developers to more effectively target the CLR, optimize their code for performance, target 64-bit Windows, and improve application security. Moreover, Visual C++ Whidbey will enable developers to build native C++ applications for mobile devices directly within the Visual Studio Whidbey IDE. (More information about embedded C++ development can be found in the Device-Based Development section).

大家可以通过访问以下地址获得最新的信息

关于Developer 的   http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx 

关于Longhorn的

http://msdn.microsoft.com/longhorn/


 今天Grace告诉我们从现在开始已经可以准备为明年的MVP Global Summit做准备了,不过据说Bill Gates将不会参加这个Summit,当然Steve肯定要参加的。当然这些距离我都是太远了。因为VISA是一个大问题。但是今天和几个Korea MVP聊天的时候,他们告诉我说韩国的MVP的US VISA都是由MS Korea 代半,所以成功率基本可以保证......

羡慕呀。。。

posted on 2003-10-29 14:06:00 by roboo  评论(5) 阅读(1675)

小测试

 .NET Framework环境下是否可以支持全局钩子?

Is global hook supported  in  .NET Framework?

posted on 2003-10-27 16:01:00 by roboo  评论(9) 阅读(1822)

基于dotnet的自定义编译器

在Dotnet环境下,可以允许用户创建T#,S#这样的有自己行业特色的编译器,创建自己的编译语言。

以前在Win32环境下,如果要创建自己的编译语言,就必须去啃大部头的编译语言,在dotnet framework环境下,这个已经成为了一件非常简单,不再是一件奢望的事情。

http://www.c-sharpcorner.com/Code/2003/Sept/CompierDesign.asp

There is java and C# implementation. The Parser was generated using Antlr for both Java and C#. If you want to recompile the sources you will need to download it from antlr page. You will also need to download antlr to run the java examples, the C# implementation comes with antlr runtime, but you will need to have .NET framework installed. You can download .net run-time (for running programs only) from Microsoft.

posted on 2003-10-27 15:04:00 by roboo  评论(2) 阅读(1712)

收到mvp礼包

和想象的一样,因为开心和大家都已经讨论了很久了

不过我实在佩服DHL的效率,今天早上8:22分才到的西安 10:00就接到了送货的电话,这个时间我当然是在上班了,所以又送到了我的办公室,真的是高呀。EMS 不S都不行呀

虽然大家都提到了礼包中的很多东西,但是肯定没有人注意到一个细节,那个饰品是Made In China 笑脸笑脸笑脸笑脸

另外还发现了MS的一个小失误,MVPID和姓名均出现在MVP kit的包装盒子上,这样我们的送货员就可以........呵呵

 

posted on 2003-10-24 10:47:00 by roboo  评论(4) 阅读(1432)

SendMessage or PostMessage

在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如:

打开一个窗口-->等待直到窗口结束

这个时候就可以用到SendMessage

如果在打开这个窗口后仍然需要对该窗口的界面进行设置,比如Edit的value等等,比如:

打开一个窗口-->控制窗口的control的属性

这个时候就需要PostMessage

posted on 2003-10-24 10:37:00 by roboo  评论(12) 阅读(7476)

mvp大家快来申请 windows source code

申请地址是

 

http://mvp.support.microsoft.com/default.aspx?scid=fh;EN-US;MVPSECSSOURCE

我已经申请了,不过估计成功率不大。

开心属于名人,申请成功的纪律应该是比较大。

posted on 2003-10-23 11:57:00 by roboo  评论(5) 阅读(3472)

MVP真的可以看到windows 源代码?

博客堂真的是消息最快的地方呀,我刚才真的在MS的站点上看到了

Microsoft Announces Most Valuable Professionals Shared Source Licensing Program

不过还没有认真看完这篇文章,看看是否还要什么多余的手续??

posted on 2003-10-23 11:21:00 by roboo  评论(5) 阅读(1485)

终于收到MVP ID

早晨上班访问MVP newsgroup得时候发现蝈蝈俊已经收到了MVP ID在那里问问题呢。赶快就查看自己得hotmail得信箱,果然一封[机密]邮件安静得躺在那里。

昨天晚上还看到了Grace的给MVP的小礼包的blog, 感谢Grace为大家考虑的如此周到。

这篇blog 上还看到了一个名言(偶以前只听说过身体是革命的本钱)

 

假想生命是一场抛接球游戏,而你必须在空中抛接5个球。这5个球分别是工作、家庭、健康、朋友、精神,你必须让这5个球不落地。你很快就会发现,工作是个像皮球,如果掉在地上会弹回来,而其它4个球都是玻璃球,掉在地上会破损,甚至粉碎所以,你们必须知道这一点,并努力平衡你的生活。

 

我想如果是我选择的话,我会首先用我的双手确保健康和家人

posted on 2003-10-23 09:08:00 by roboo  评论(3) 阅读(1456)

消防队员的一天

公司有一个Java的项目,现在到了实施的时候。

环境是Weblogic+Jbuilder+oracle,现在项目已经基本结束了,到了发布应用的时候,发现服务器每访问一段时间就无法访问了,经过在服务器上检查,发现是”Exceed the maxium(59) connection”

Faint,又是这样的问题。从IIS平台切换到Java平台的Web程序员最经常犯的错误就是这样的错误,由于过去IIS对于内存的管理使很多程序员养成的非常不好的编程习惯,比如只知道连接数据库,而不在使用结束的时候关闭联结。在Jsp编程的框架下这些都必须严格的按照“申请资源必须释放”的原则进行。

好在及时的发现了这个问题,经过今天一个早上的试运行,目前还没有发现什么比较严重的问题。

 

下午身为消防员的我就需要去忙活自己的项目了。

posted on 2003-10-22 12:33:00 by roboo  评论(4) 阅读(1585)

公告

响应开心老大的倡议,从这个帖子开始在博客堂 将基本上只发表技术相关的文章,所有技术无关的东西都在另一个豆腐生活,这样可以充分满足我灌水的需求同时增加这里基本都是MVP的特色

posted on 2003-10-20 14:32:00 by roboo  评论(2) 阅读(1264)

豆腐的写照


.Text增加一个Flash 也太难了吧

posted on 2003-10-20 14:10:00 by roboo  评论(1) 阅读(1242)

请教

靠!今天的blogcn又上不去了。

上个星期调试程序发现了一个非常奇怪的问题,请大家帮我解释解释。

我的程序流程是这样的,接收硬件的中断(这个中断可以被重入很多次),等待退出的条件是超时或者收到了足够数目的中断。

等待的代码是这样的

 m_iReceiveCount = 0;
 ResetEvent(m_hWaitSignal);  //一个信号量
 status=WaitForSingleObject(m_hWaitSignal,iMaxtime);

中断处理部分的代码是

status=viMoveIn32 (m_lChannelBuf[ChannelNum]); //数据传输
status=UpdateChannelBuffer(ChannelNum,m_lChannelBuf[ChannelNum]);
ht104406_UpdateChannelFlag(ChannelNum,1);
  m_iReceiveCount++;
  if(m_iReceiveCount>=m_iConfigNum){
      m_iReceiveCount=0;
     SetEvent(m_hWaitSignal);
  }

现在的故障是在WaitForSingleObject函数退出后竟然还有数据传输??

按道理说只有每个通道的中断数据收集结束后,计数器才有可能增加直到信号量m_hWaitSignal置位呀

 

大家帮帮忙。


posted on 2003-10-20 11:26:00 by roboo  评论(0) 阅读(1278)

如何控制其他的程序?

这个问题应该来讲已经是一个老生长谈的问题了。

不知道为什么在具体的实际工作中总是遇到这样的问题??郁闷......

在一个系统集成的项目,有些仪器设备是从国外购买,这些设备是没有可供第三方二次开发的接口的。因此在我们的这个大系统中为了能够使用起来这个设备就必须调用设备原先自带的应用程序。

当然如果简单的只是调用该程序并等待程序的结束,是一件非常简单和容易的事情,现在的问题是该程序是一个MDI的程序,为了进入某个功能,我们需要操作以下步骤(例如自检功能):

启动应用程序-->功能菜单-->自检菜单-->内部自检菜单-->自检界面-->选择启动菜单按纽-->自检结束-->判断自检结果

基本上每个单个的功能都需要至少手工点击三次以上,而且这里面还有一个其他的问题就是,在系统执行某个功能后,无法获得系统的工作状态,或者简单的说无法获得发送下个消息的等待时间间隔。

至于说这些设备的应用程序分布在不同的机器上,到不是什么大的问题,在每个计算机上安装类似Client/Server的socket程序通过状态机就可以实现相互的协同工作,现在的主要问题就是如何简单有效的对其他应用程序的内部进行操作。

基于我的理解,事实上我已经放弃了这种操作模式,因为这样做的最后结果可能就是越描越黑。我在方案论证的阶段(目前所在阶段)倾向于将该模块软件分离出,并为这些软件所安装在的计算机前设置工作台,通过人工传达的命令由操作员来操作实现这样的功能,但是这样老板不是很满意,他总是希望能够自动化的程序高一些,而且这样做的最大的缺点就是同样的数据会多点保存而且无法避免人工操作带来的偏差。

 

所以我最近非常非常的郁闷,,,,,,,,

posted on 2003-10-17 10:59:00 by roboo  评论(4) 阅读(1668)

【第1页/共2页,26条】
首页
前页
1

Powered by: Joycode.MVC引擎 0.5.2.0