为了解决一些程序不能“双开”、“多开”(就是只能运行一个实例)的问题,我看了看有关资料,一般是用SetProp()函数设了一个标识,每次运行程序检查有无此标识的窗口,有则转到此窗口,然后第二个实例退出程序,就实现了“单开”,像金山词霸,FlashGet等等这些软件就是这样的。为了让这类程序“多开”我现在试验性的写了两个程序,程序1和程序2,程序1中用SetProp()函数设了个string标识"xxx",现在程序1只能有一个实例运行了;我又在程序2中获得程序1的主窗口句柄,用RemoveProp()函数去掉了程序1中的"xxx"标识,就使程序1能“多开”了,眼看问题就要解决了,现在我遇到了最后一个问题,就是我不知道别人的程序中设的是什么标识,怎么去掉标识呢?与此相关的三个函数SetProp(),GetProp(),RemoveProp()都要输入标识(连Remove都要输入标识,倒!)可能是MS出于安全性考虑吧,请问我怎么能获得其它程序用SetProp()设置的标识呢?还有就是CreateSemaphore()好像也是用来创建标识的,不过好像是建在系统中了,而非程序中的,与它相对的是ReleaseSemaphore(),有谁顺便讲讲这两个函数一般是干什么用的好吗。

解决方案 »

  1.   

    一般防止多开用CreateMutex比较方便!
      

  2.   

    多谢大虾指点,我用了一下CreateMutex,果然比我刚才的办法方便,而且删除标识时也不需要知道是什么标识,用CloseHandle(CreateMutex建的Mutex的handle)就可以了,但仍不能解决我提出的问题,刚才是不知道别人的标识,现在是不知道别人程序中的Mutex'handle,一样没辙啊。而且我还不知道我要双开的程序是用的哪种方法,郁闷ing...