做了一个ocx控件,在ie中调用,同时只允许一个ocx控件在运行
目前试了几种实现方法,1、在ocx中新建个窗口类,然后在初始化的时候判断窗口类是否存在,FindWindows(classname,NULL)。如果有窗口存在,则退出。
 2、在控件初始化的时候,createfile一个独占的文件,然后写数据,如果打不开或者无法写入数据
则判断有控件存在,退出。
 现在的问题是在ie8、ie6下都正常,这2个ie都是一个页面为一个进程的方式,但是在ie7下则不行
2中方法都没法判断控件存在,是否有其他好的方法啊。急,谢谢

解决方案 »

  1.   

    试了用mutex,在ie7下还是一样的,会直接执行下去,是ie7一个窗口,然后开一个新的分页,在新的分页中加载会出现这种问题
      

  2.   

    这个用Semaphore应该是满足要求的
      

  3.   

    试了用mutex,在ie7下还是一样的,会直接执行下去,是ie7一个窗口,然后开一个新的分页,在新的分页中加载会出现这种问题
    方法2对于IE7为什么不行?
      

  4.   

    试了用mutex,在ie7下还是一样的,会直接执行下去,是ie7一个窗口,然后开一个新的分页,在新的分页中加载会出现这种问题
    方法2对于IE7为什么不行?
    我是怀疑,因为ie7,一个ie窗口就是一个进程,新开一个选项卡的话,是进程里起了个线程,这种情况下就判断不到了,如果开2个ie7的窗口是没问题的,具体原因也不懂啊,,
      

  5.   

    我也很奇怪,但是如果开2个ie7的窗口是没问题的,在一个ie7的窗口中开2个选项卡就不行
      

  6.   

    我也很奇怪,但是如果开2个ie7的窗口是没问题的,在一个ie7的窗口中开2个选项卡就不行
    估计是独占方式是进程共享,2个tab在一个进程
    你直接通过文件存在来判断,第一个打开时创建一个文件,第二个打开时判断文件在不在
      

  7.   

    我也很奇怪,但是如果开2个ie7的窗口是没问题的,在一个ie7的窗口中开2个选项卡就不行
    估计是独占方式是进程共享,2个tab在一个进程
    你直接通过文件存在来判断,第一个打开时创建一个文件,第二个打开时判断文件在不在这样会有个隐患,如果程序异常崩溃了,没去做删除文件的操作,第二次永远都打不开了,除非手动删除文件,之前有考虑过这种,用写配置文件也一样
      

  8.   

    我也很奇怪,但是如果开2个ie7的窗口是没问题的,在一个ie7的窗口中开2个选项卡就不行
    估计是独占方式是进程共享,2个tab在一个进程
    你直接通过文件存在来判断,第一个打开时创建一个文件,第二个打开时判断文件在不在这样会有个隐患,如果程序异常崩溃了,没去做删除文件的操作,第二次永远都打不开了,除非手动删除文件,之前有考虑过这种,用写配置文件也一样
    创建lock文件,OpenFile()并加锁。如果进程异常崩溃,文件还在,但OpenFile()句柄会被OS关闭,锁会被释放。
      

  9.   

    我也很奇怪,但是如果开2个ie7的窗口是没问题的,在一个ie7的窗口中开2个选项卡就不行
    估计是独占方式是进程共享,2个tab在一个进程
    你直接通过文件存在来判断,第一个打开时创建一个文件,第二个打开时判断文件在不在这样会有个隐患,如果程序异常崩溃了,没去做删除文件的操作,第二次永远都打不开了,除非手动删除文件,之前有考虑过这种,用写配置文件也一样
    创建lock文件,OpenFile()并加锁。如果进程异常崩溃,文件还在,但OpenFile()句柄会被OS关闭,锁会被释放。
    试过也不行,好奇葩
      

  10.   

    LZ还是贴一下代码片段:用文件lock控制的代码、用MUTEX控制的代码。
      

  11.   

    找到问题了,哎,我是在InitInstance()中添加对文件的判断的,这样如果是一个进程的话
    ,第二个线程不会进入InitInstance(),加到ctl的oncreate后可以正常判断了。谢谢了
      

  12.   

    所以在mutex放在OnCreate里面应该也是可以的
      

  13.   

    同意楼上的,将 mutex 加到 ctl的oncreate 应该可以。