【求助】老马请求ActiveX EXE单元模型线程问题
<p> 你好老马:</p><p> 我学了你的 <font face="Verdana">ActiveX EXE单元模型线程 二个例,</font></p>
<p> </p>
<p> 想分析下多线程的可能性.发现一个问题:</p>
<p> </p>
<p> </p>
<p> <strong> 软件不能多开....</strong></p>
<p><strong></strong> </p>
<p><strong> </strong> 经我测试:把你的一个声明:</p>
<p> </p>
<p><font face="Verdana">Private Const MyEvent As String = "m5home"</font></p>
<p><strong></strong> </p>
<p><strong>改为:</strong></p>
<p><font face="Verdana">Private MyEvent As String</font></p>
<p><font face="Verdana"> If Len(MyEvent) = 0 Then MyEvent = returncvv5(8) '随机生成一串英文字符</font></p>
<p><font face="Verdana"> </font></p>
<p>这样软件可以多开了,不过中间不能再使用:</p>
<p><font face="Verdana">Set theDO = Nothing</font></p>
<p><font face="Verdana">Set theDO = CreateObject("TestDownload.cMain")</font></p>
<p>不然就会同时打多N个窗口,N>3</p>
<p> </p>
<p>----------------------------</p>
<p><font color="#0000ff">能提供下<font face="Verdana">ActiveX EXE</font>多开的方法吗.</font></p>
<p>我主要是想解决inet控件 在网络差访问会死掉的方法,<font face="Verdana">Inet1.Cancel没用</font></p>
<p> </p>
<p>想用<font face="Verdana">ActiveX EXE进程外打开.这样死了我<font face="Verdana">Set theDO = Nothing</font>,再CreateObject一个就行了</font></p>
<p> </p>
<p>十分多谢.</p>
<p> </p>
<p> </p> <p> </p>
<p>请问阿杰会不?可以帮下不?</p> <p>你的思路是对的.有可能是你方法用错了. </p>
<p> </p>
<p>还有,RND函数容易得到相同的序列,还是使用PID稳当些:</p>
<p> </p>
<div class="msgheader">QUOTE:</div><div class="msgborder">
<p><font face="Verdana">Option Explicit</font></p>
<p> </p>
<p><font face="Verdana">Private Declare Function CreateEvent Lib "kernel32.dll" Alias "CreateEventA" ( _<br/> ByVal lpEventAttributes As Long, _<br/> ByVal bManualReset As Long, _<br/> ByVal bInitialState As Long, _<br/> ByVal lpName As String) As Long<br/>Private Declare Function OpenEvent Lib "kernel32.dll" Alias "OpenEventA" ( _<br/> ByVal dwDesiredAccess As Long, _<br/> ByVal bInheritHandle As Long, _<br/> ByVal lpName As String) As Long<br/>Private Declare Function CloseHandle Lib "kernel32.dll" ( _<br/> ByVal hObject As Long) As Long<br/>Private Declare Sub ExitProcess Lib "kernel32.dll" ( _<br/> ByVal uExitCode As Long)<br/>Private Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long</font></p>
<p><font face="Verdana">Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000<br/>Private Const SYNCHRONIZE As Long = &H100000<br/>Private Const EVENT_MODIFY_STATE As Long = &H2<br/>Private Const EVENT_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H3)</font></p>
<p> </p>
<p><font face="Verdana">'Private Const MyEvent As String = "m5home"<br/>Private MyEvent As String<br/>Dim hEvent As Long</font></p>
<p> </p>
<p><font face="Verdana">Sub Main()<br/> If GetEventHandle = 0 Then '由于每个新对象的建立,都要执行Main()过程,因此使用事件对象来进行判断.<br/> hEvent = CreateEvent(0&, False, False, MyEvent) '在单元线程下,模块里的全局变量已经没有用了.<br/> frmMain.Show '显示主窗体<br/> End If<br/>End Sub</font></p>
<p> </p>
<p><font face="Verdana">Private Function GetEventHandle() As Long<br/> If MyEvent = vbNullString Then MyEvent = CStr(GetCurrentProcessId) '取当前PID作为事件字符串<br/> GetEventHandle = OpenEvent(EVENT_ALL_ACCESS, False, MyEvent)<br/> Call CloseHandle(GetEventHandle)<br/>End Function</font></p>
<p> </p>
<p><font face="Verdana">Public Function Quit()<br/> Call CloseHandle(hEvent)<br/>End Function<br/></font></p>
<p> </p></div>
<p></p> <p> </p>
<p>老马真强,通过你的方法解决了.多谢了.</p>
<p> </p>
<p>我得努力学习中.</p>
<p> </p>
页:
[1]