国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

VB中使用DDE技術為應用程序增輝

2024-07-21 02:20:42
字體:
來源:轉載
供稿:網友
上網的朋友一定都用過網絡螞蟻(net ants)的吧?不知你在使用過程中有沒有注意過,那就是如果你想調動兩個“螞蟻”為您效力是不可能的——它總會把新運行的關閉。 而“螞蟻”程序的妙處就在于:在重復運行“螞蟻”時它不僅拒絕運行,而且能把已經運行的“螞蟻”激活,這樣用上面的程序就無能為力了。但事實上實現拒絕運行并激活已運行的程序有多種方法:

  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次重復調用這個程序

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

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

  3、打開 ms-dos方式 ,用命令行方式再次運行程序,如 “p1 how are you?”,這時原來運行的程序文本框中又多了幾行字:

  窗體已被最大化
  你已經第 2次重復調用這個程序。
  但怕您不多給工資,所以只運行了一個
  最后一次運行這個程序的時間是:05-2-6 7:14:32

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

  命令行為:

  how are you?

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桓台县| 瑞安市| 中江县| 澳门| 密云县| 区。| 合作市| 龙岩市| 彩票| 成武县| 博湖县| 灵璧县| 景泰县| 通许县| 保靖县| 鲁甸县| 临夏市| 逊克县| 台州市| 黄浦区| 宣恩县| 缙云县| 大方县| 封丘县| 福建省| 麻栗坡县| 屏山县| 安达市| 应城市| 大同市| 辽宁省| 桂平市| 库车县| 通辽市| 稷山县| 句容市| 天津市| 通化县| 陇西县| 江都市| 武宣县|