vb.net檢測指定進程 vb 根據(jù)進程id獲取窗體句柄

VB.net在Windows7下檢測進程是否存在

VB.net(VS2008)里面比C#還好弄,不需要自己加manifest,直接在項目屬性的“應(yīng)用程序”里面點擊“查看UAC設(shè)置”,在新打開的app.manifest里面把 requestedExecutionLevel level="asInvoker" uiAccess="false" / 替換成 requestedExecutionLevel level="requireAdministrator" uiAccess="false" / 再編譯就行了。

創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,公司以成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上千,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風格,為不同客戶提供各種風格的特色服務(wù)。

vb 如何快速檢測某進程是否正在運行?并且獲得這個進程所在的路徑呢? 謝啦!

方法一:系統(tǒng)任務(wù)欄上鼠標右鍵啟動任務(wù)管理器---進程選項中可查到你要的!

方法二:鍵盤按Ctrl+Alt+Delete 直接啟動任務(wù)管理器

錯了 你說的是VB中 我看錯了呵呵 我查查再回答哈

Private Sub Form_Load()

If App.PrevInstance Then

End

End If

End Sub

用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ù)),然后在窗體中攔截并進行處理,但這樣做要修改窗體的標準消息處理程序,用在VC,BC或DELPHI編寫的程序中還行,但在VB中工作量太大,并且容易發(fā)生“一般保護行錯誤”使VB崩潰,不太可?。ó斎?,如果你有足夠的信心和不怕崩潰的精神,也可以試一下 ^_^ )。

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通道。當然,也可以用別的方法

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)用的你的程序中了。

求大神指點vb.net怎么獲取指定進程的狀態(tài)

Process.GetProcessesByName("進程名")‘不帶擴展名

找不到 就是沒有在運行,但不知道能不能判斷已暫停狀態(tài)。

如何用VB監(jiān)測指定進程是否已被掛起或被結(jié)束了,發(fā)現(xiàn)則重啟機器。

寫個DLL,注入系統(tǒng)進程,系統(tǒng)進程關(guān)了電腦也掛了

整那個只會被當作病毒

要么就用waitforobject,但是監(jiān)視別人的進程也可能被人殺了

文章題目:vb.net檢測指定進程 vb 根據(jù)進程id獲取窗體句柄
文章地址:http://muchs.cn/article20/dojhsco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站改版ChatGPT商城網(wǎng)站、標簽優(yōu)化自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)