国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

vb防止一個程序多次運行 ,系統(tǒng)啟動另一個實例時,自動把命令參數(shù)轉(zhuǎn)到第一個實例

admin
2014年3月14日 0:18 本文熱度 5947

用DDE實現(xiàn)窗體防止運行多個實例并傳遞命令


上網(wǎng)的朋友一定都用過網(wǎng)絡(luò)螞蟻(Net Ants)的吧?不知你在使用過程中有沒有注意過,那就是如果你想調(diào)動兩個“螞蟻”為您效力是不可能的——它總會把新運行的關(guān)閉。這點在VB中很容易實現(xiàn):


Private Sub Form_Load()
If App.PrevInstance Then
MsgBox "你已經(jīng)運行這個應(yīng)用程序了"
End ' 退出新運行的程序
End If
End Sub


這樣如果你運行這個程序后在運行它,它會彈出一個消息框并拒絕再次運行。這非常容易。 而“螞蟻”程序的妙處就在于:在重復(fù)運行“螞蟻”時它不僅拒絕運行,而且能把已經(jīng)運行的“螞蟻”激活,這樣用上面的程序就無能為力了。但事實上實現(xiàn)拒絕運行并激活已運行的
程序有多種方法:


1、用FindWindow函數(shù)得到已經(jīng)運行窗體的句柄(HWND),然后用SetActiveWindow等API函數(shù)將其激活。其缺點也很明顯,那就是沒法傳遞參數(shù)。


2、用FindWindow函數(shù)得到已運行窗體的句柄后用SendMessage的方法給窗體傳送一個自定義消息(附帶參數(shù)),然后在窗體中攔截并進行處理,但這樣做要修改窗體的標(biāo)準(zhǔn)消息處理程序,用在VC,BC或DELPHI編寫的程序中還行,但在VB中工作量太大,并且容易發(fā)生“一般保護行錯誤”使VB崩潰,不太可取(當(dāng)然,如果你有足夠的信心和不怕崩潰的精神,也可以試一下 ^_^ )。


3、使用DDE技術(shù)。


所謂DDE技術(shù),就是動態(tài)數(shù)據(jù)交換技術(shù)。也許你很奇怪,這與本文所討論的內(nèi)容有什么相干的?
且聽我慢慢講來。
為了實現(xiàn)拒絕運行并把已經(jīng)運行的程序激活并實現(xiàn)各種功能,我們可以先用本文開頭提到的方法,檢測一下程序有沒有被運行過,如果沒有,就正常運行,如果已經(jīng)被運行過,就打通與它的DDE通道,傳給它一個(或一些)數(shù)據(jù),然后由已經(jīng)運行的程序?qū)?shù)據(jù)進行處理,再去實現(xiàn)各種“意想不到”的功能,這時也許就有人對這你的程序喊:“酷、酷……” ^_^


好了,耳聽為虛,眼見為實,下面讓我們動點真格的。


打開VB,新建一個工程,選擇菜單中的“工程->工程1 屬性”,把工程名稱改為“P1”(我愛偷懶,能短則短 ^_^ ),把已有的一個窗體的“LinkTopic”屬性改為“FormDDE”,把“LinkMode”屬性改為“1 - Source”,添加一個PictureBox控件作為DDE執(zhí)行控件,命名為picDDE。然后添加一個TextBox控件,命名為“txtInfo”,并把“MultiLine”屬性設(shè)置為“True”,以便顯示多行文本,作為消息顯示控件。


最后在窗體代碼區(qū)輸入以下代碼:



Const COMMANDLINE = "CommandLine=" ' 還是為了省事,定義一個常量


Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
Static lngCount As Long
Dim Info As String


Info = txtInfo.Text ' 保留原有信息


Select Case CmdStr ' CmdStr 是DDE程序傳送過來的參數(shù)
Case "Max"
Me.WindowState = 2
Info = Info + vbNewLine + "窗體已被最大化"
Case "ShowTime"
Info = Info + vbNewLine + "最后一次運行這個程序的時間是:" + Str(Now)
Case "Count"
lngCount = lngCount + 1
Info = Info + vbNewLine + "你已經(jīng)第" + Str(lngCount) + "次重復(fù)調(diào)用這個程序。" _
+ vbNewLine + "但怕您不多給工資,所以只運行了一個 ^_^"
End Select


If Left(CmdStr, Len(COMMANDLINE)) = COMMANDLINE Then
Info = Info + vbNewLine + "新程序曾以命令行形式運行" + vbNewLine + "命令行為:" _
+ vbNewLine + Right(CmdStr, Len(CmdStr) - Len(COMMANDLINE))
End If


txtInfo.Text = Info ' 把信息顯示出來


Cancel = False
End Sub



Private Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
picDDE.LinkMode = 0 '--
picDDE.LinkTopic = "P1|FormDDE" ' |______連接DDE程序并發(fā)送數(shù)據(jù)/參數(shù)
picDDE.LinkMode = 2 ' | “|”為管道符,是“退格鍵”旁邊的豎線,
picDDE.LinkExecute Msg '-- 不是字母或數(shù)字!


t = picDDE.LinkTimeout '--
picDDE.LinkTimeout = 1 ' |______終止DDE通道。當(dāng)然,也可以用別的方法
picDDE.LinkMode = 0 ' | 這里用的是超時強制終止的方法
picDDE.LinkTimeout = t '--
End Sub



Private Sub Form_Load()
If App.PrevInstance Then ' 程序是否已經(jīng)運行


Me.LinkTopic = "" ' 這兩行用于清除新運行的程序的DDE服務(wù)器屬性,
Me.LinkMode = 0 ' 否則在連接DDE程序時會出亂子的


LinkAndSendMessage "Max" '--
LinkAndSendMessage "Count" ' |-----連接DDE接受程序并傳送數(shù)據(jù)/參數(shù)
LinkAndSendMessage "ShowTime" '--


If Command <> "" Then ' 如果有命令行參數(shù),就傳遞過去
LinkAndSendMessage COMMANDLINE + Command
End If
End ' 結(jié)束新程序的運行
End If
End Sub


測試一下:
把工程“P1”編譯成EXE文件(設(shè)名稱為 P1.EXE )
1、打開“我的電腦”,找到 P1.EXE 并執(zhí)行。可以看到程序正常運行了。
2、再運行一次,這次新程序沒有運行成功,而原來運行的程序卻被最大化了,而且文本框中有以下
字符:


窗體已被最大化
你已經(jīng)第 1次重復(fù)調(diào)用這個程序。
但怕您不多給工資,所以只運行了一個 ^_^
最后一次運行這個程序的時間是:00-2-6 7:11:01


3、打開 MS-DOS方式 ,用命令行方式再次運行程序,如 “P1 How Are You?”
這時原來運行的程序文本框中又多了幾行字:


窗體已被最大化
你已經(jīng)第 2次重復(fù)調(diào)用這個程序。
但怕您不多給工資,所以只運行了一個 ^_^
最后一次運行這個程序的時間是:00-2-6 7:14:32
新程序曾以命令行形式運行
命令行為:
How Are You?


OK,運行完全正確,然后你就可以把它應(yīng)用的你的程序中了。


該文章在 2014/3/14 0:18:25 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 日本人妻仑乱少妇A级毛片潘金莲 | 中国gay片男同志免费网站 | 国产精品欧美激情在线播放 | 国内大量揄拍人妻精品視頻 | 少妇乳大丰满中文 | 2025果冻剧国产传媒一区 | 国产日韩精品久久久一区二区 | 亚洲国产成人资源在线软件 | 大香线蕉视频伊人99 | 亚洲日韩国产人成在线发布 | 精品熟女少妇av免费久久 | 久久午夜福利电影 | 黑人狂躁日本妞无码A片视频 | 亚洲一级久久影院 | 国产激情久久久久影院小草 | 亚洲av午夜福利精品香蕉麻豆 | 国产三级精品三级男人的天堂 | 亚洲国产猛男精品久久久免费 | 免费无码av片在线观看播放 | 国产精品欧美一区二区在线看 | 亚洲精品久久久久久久蜜桃 | 国产婷婷午夜精品无码A片 国产婷婷午夜无码A片 | 午夜一级毛片不卡 | 亚洲av高清一区二区三区尤物 | 中文无码字幕在线视频人妻资源18影院亚洲视频 | 国产在线精品欧美日韩电影 | 国产午夜精品一区理论片 | 69久久夜色精品国产69 | 麻豆自制传媒国产之光 | 亚洲一区二区三区国产精品 | 精品无码久久久一区二区三区 | 久久人妻无码中文 | 日韩欧美在线综合网高 | 精品无码无人网站免费视频 | 北川景子av作品 | 中文无码在线观看 | 少妇厨房出轨激情做爰 | 韩国精品AV一区二区三区 | 国产成+人+综合+亚洲专 | 人妻内射一区二区在线视频 | 亚洲欧洲国产日产国码无码 |