zoukankan      html  css  js  c++  java
  • 只运行一个程序

    重复运行程序会造成系统资源的浪费(这句话真别扭),很多情况 下我们把程序最小化或者隐藏起来,想用这个程序的时候会习惯的doulbeclick程序的图标,wo~又一个程序运行了,我们本意是既然已经是打开的程序,你把程序再给我显现出来不就可以了?弱智的程序员阿(不是说你,也不是说我,假想。。)

    常见的方法有三种,一、原子方法;二、互斥量、三、查找窗口(Findwindow or EnumWindow)
    这是其中一种,晚上把这几种方法都尝试一边,其实很简单

    (最近在学习asm,使用的masm32和radasm写win32程序也很方便,和win32 sdk差不多)


    szClassName         db'网关切换器[iHqq]',0
     ;only single instance is running
     ;szClassName is dialog name of instance
        invoke FindWindow,NULL,addr szClassName;查找符合条件的窗口
          .if eax != NULL  ;如果找到窗口
              invoke ShowWindow,eax,SW_SHOW  ;显示出来
              invoke SetForegroundWindow,eax         ;放到最前面来;
              invoke ExitProcess,0                              ;结束本实例
          .endif


        ;如果运行到这,说明没有找到符合条件的窗口,也就是程序是第一次运行


    事实上这样并不能将窗口出现在最前面,以下抄袭别人

    [SetForegroundWindow会调用FlashWindowEx来闪烁目标窗口,代表已经切换了
    窗口,但事实上往往我们需要在某个时候将我们的窗口弹出到最前台来!曾听说过有高
    手使用修改窗口切换的糸统规则来达到此目的,这样做未必太麻烦了,必定不是每个人
    都是高手呢!下面给大家介绍一个"偏方",非常简单,只是利用了一个MSDN未公开的函数罢了.
    这个未公开的函数是:SwitchToThisWindow
    它的c格式的原形是:
    void WINAPI SwitchToThisWindow (
                      HWND hWnd,   // Handle to the window that should be activated
                      BOOL bRestore // FAULS表示最小化显示;
                      );

    由于没有原型和库,我们在使用时通常用动态联接法]


    szClassName         db'网关切换器[iHqq]',0
    szFuName            db'SwitchToThisWindow',0
    szUser32            db'user32.dll',0

     ;only single instance is running
     ;szClassName is dialog name of instance
        invoke FindWindow,NULL,addr szClassName
          .if eax != NULL
              mov  oldhWnd,eax
              invoke ShowWindow,eax,SW_SHOW
              invoke GetModuleHandle,addr szUser32    ;得到地址空间内user32.dll的模块句柄,因为user32已经载入,所以使用GetModuleHandle,而不是loadlibrary,我们可以不考虑释放问题;
              invoke GetProcAddress,eax,addr szFuName ;得到SwitchToThisWindow的地址;
              push TRUE
              push oldhWnd
           call eax
           invoke ExitProcess,0
          .endif

  • 相关阅读:
    jquery click()方法模拟点击事件对a标签不生效
    键盘keyCode
    java配置好jdk-bash: /usr/bin/java: No such file or directory
    iptables配置顺序-两条规则会忽略后边的
    一些非常实用的JSON 教程
    C#实现json的序列化和反序列化
    [asp.net]C#实现json的序列化和反序列化
    一些JSON 教程
    js+JQuery实现返回顶部功能
    HTML标签总结
  • 原文地址:https://www.cnblogs.com/iHqq/p/658305.html
Copyright © 2011-2022 走看看