黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平
駕駛員 | 網絡編輯
衛生資格 | 執業醫師 | 執業藥師 | 執業護士
會計從業資格考試會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師
注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師
質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師
設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師
城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現在的位置: 考試吧(Exam8.com) > 計算機等級考試 > 計算機二級 > VB > 復習資料 > 正文

用DDE實現窗體防止運行多個實例并傳遞命令

來源:考試吧Exam8.com) 2010-3-10 16:24:20 考試吧:中國教育培訓第一門戶 模擬考場
本文為“用DDE實現窗體防止運行多個實例并傳遞命令”,以供廣大學員參考使用。更多關于計算機等級考試資料,請訪問考試吧計算機等級考試頻道。

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

  Private Sub Form_Load()

  If App.PrevInstance Then

  MsgBox "你已經運行這個應用程序了"

  End’ 退出新運行的程序

  End If

  End Sub

  這樣如果你運行這個程序后在運行它,它會彈出一個消息框并拒絕再次運行。這非常容易。

  而“螞蟻”程序的妙處就在于:在重復運行“螞蟻”時它不僅拒絕運行,而且能把已經運行的“螞蟻”激活,這樣用上面的程序就無能為力了。但事實上實現拒絕運行并激活已運行的程序有多種方法:

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

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

  3、使用DDE技術。

  所謂DDE技術,就是動態數據交換技術。也許你很奇怪,這與本文所討論的內容有什么相干的?且聽我慢慢講來。

  為了實現拒絕運行并把已經運行的程序激活并實現各種功能,我們可以先用本文開頭提到的方法,檢測一下程序有沒有被運行過,如果沒有,就正常運行,如果已經被運行過,就打通與它的DDE通道,傳給它一個(或一些)數據,然后由已經運行的程序對數據進行處理,再去實現各種“意想不到”的功能,這時也許就有人對這你的程序喊:“酷、酷……” ^_^

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

  打開VB,新建一個工程,選擇菜單中的“工程->工程1 屬性”,把工程名稱改為“P1”(我愛偷懶,能短則短 ^_^ ),把已有的一個窗體的“LinkTopic”屬性改為“FormDDE”,把“LinkMode”屬性改為“1 - Source”,添加一個PictureBox控件作為DDE執行控件,命名為picDDE。然后添加一個

  TextBox控件,命名為“txtInfo”,并把“MultiLine”屬性設置為“True”,以便顯示多行文本,作為消息顯示控件。

  最后在窗體代碼區輸入以下代碼:

  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程序傳送過來的參數

  Case "Max"

  Me.WindowState = 2

  Info = Info + vbNewLine + "窗體已被最大化"

  Case "ShowTime"

  Info = Info + vbNewLine + "最后一次運行這個程序的時間是:" + Str(Now)

  Case "Count"

  lngCount = lngCount + 1

  Info = Info + vbNewLine + "你已經第" + Str(lngCount) + "次重復調用這個程序。" _

  + 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程序并發送數據/參數

  picDDE.LinkMode = 2’ |“|”為管道符,是“退格鍵”旁邊的豎線,

  picDDE.LinkExecute Msg’-- 不是字母或數字!

  t = picDDE.LinkTimeout ’--

  picDDE.LinkTimeout = 1 ’ |______終止DDE通道。當然,也可以用別的方法

  picDDE.LinkMode = 0 ’ |這里用的是超時強制終止的方法

  picDDE.LinkTimeout = t ’--

  End Sub

  Private Sub Form_Load()

  If App.PrevInstance Then ’ 程序是否已經運行

  Me.LinkTopic = "" ’ 這兩行用于清除新運行的程序的DDE服務器屬性,

  Me.LinkMode = 0’ 否則在連接DDE程序時會出亂子的

  LinkAndSendMessage "Max" ’--

  LinkAndSendMessage "Count" ’ |-----連接DDE接受程序并傳送數據/參數

  LinkAndSendMessage "ShowTime" ’--

  If Command <> "" Then ’ 如果有命令行參數,就傳遞過去

  LinkAndSendMessage COMMANDLINE + Command

  End If

  End ’ 結束新程序的運行

  End If

  End Sub

  測試一下:

  把工程“P1”編譯成EXE文件(設名稱為 P1.EXE )

  1、打開“我的電腦”,找到 P1.EXE 并執行。可以看到程序正常運行了。

  2、再運行一次,這次新程序沒有運行成功,而原來運行的程序卻被最大化了,而且文本框中有以下字符:

  窗體已被最大化

  你已經第 1次重復調用這個程序。

  但怕您不多給工資,所以只運行了一個 ^_^

  最后一次運行這個程序的時間是:00-2-6 7:11:01

  3、打開 MS-DOS方式 ,用命令行方式再次運行程序,如 “P1 How Are You?”

  這時原來運行的程序文本框中又多了幾行字:

  窗體已被最大化

  你已經第 2次重復調用這個程序。

  但怕您不多給工資,所以只運行了一個 ^_^

  最后一次運行這個程序的時間是:00-2-6 7:14:32

  新程序曾以命令行形式運行

  命令行為:

  How Are You?

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

  當然,這只是一些個人心得,如有疏漏之出,還請各位大蝦指正。

  相關推薦:2010年上半年全國計算機等考報名時間匯總
       2010年全國計算機等級二級VB考試題型與解題技巧
       免費版:2010年計算機等級考試二級VB模擬試題11套
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
主站蜘蛛池模板: 久久久婷婷 | 黄色成人毛片 | 亚洲黄色影视 | 天天干天天操天天舔 | 国产精品免费入口视频 | 无遮挡一级毛片 | 日本人与亚洲人hd | 欧美一级免费观看 | 天天插天天射天天操 | 精品国产日韩亚洲一区二区 | 国产免费人成在线视频视频 | 日本a在线 | 精品亚洲视频在线 | 一个人www免费观看视频 | 国产精品揄拍一区二区 | 国内外成人免费在线视频 | 伊人网青青草 | 色免费观看 | 午夜激情一区 | 干干干操操操 | 亚洲永久精品一区二区三区 | 日本aaaa级| 91成人免费观看在线观看 | 亚洲欧美日韩国产综合久 | 国产一级片免费视频 | 性色xxx视频 | 黄色三级视频在线观看 | 欧美特级黄色 | 免费国产人做人视频在线观看 | 黄色欧美视频 | 波多野结衣精品一区二区三区 | 婷婷成人亚洲 | 国产成人精品一区二三区2022 | 亚洲三级视频 | 欧美乱人伦中文在线观看不卡 | 国产免费高清在线精品一区 | 五月激情久久 | 国产a∨一区二区三区香蕉小说 | 日韩欧美一区二区三区不卡视频 | 国产综合欧美 | 日韩欧美亚洲综合久久99e |