Imports?System.Runtime.InteropServices
創(chuàng)新互聯(lián)公司服務項目包括伊川網站建設、伊川網站制作、伊川網頁制作以及伊川網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,伊川網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到伊川省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
Module?winapi
DllImport("User32.dll",?CallingConvention:=CallingConvention.StdCall,?EntryPoint:="GetWindowThreadProcessId")?_
Function?GetWindowThreadProcessId(ByVal?hwnd?As?IntPtr,?ByRef?procId?As?UInt32)?As?UInt32
End?Function
DllImport("kernel32.dll",?CallingConvention:=CallingConvention.StdCall,?EntryPoint:="OpenProcess")?_
Function?OpenProcess(ByVal?access?As?UInt32,?ByVal?inherit?As?Boolean,?ByVal?procid?As?UInt32)?As?IntPtr
End?Function
DllImport("kernel32.dll",?CallingConvention:=CallingConvention.StdCall,?EntryPoint:="CloseHandle")?_
Function?CloseHandle(ByVal?handle?As?IntPtr)?As?Boolean
End?Function
DllImport("psapi.dll",?CallingConvention:=CallingConvention.StdCall,?EntryPoint:="GetModuleFileNameExW",?Charset:=CharSet.Unicode)?_
Function?GetModuleFileNameExW(ByVal?hProc?As?IntPtr,?ByVal?hMod?As?IntPtr,?ByVal?arrName()?As?Char,?ByVal?arrSize?As?UInt32)?As?UInt32
End?Function
End?Module
Public?Class?Form1
Private?Sub?Button1_Click(sender?As?Object,?e?As?EventArgs)?Handles?Button1.Click
Dim?procid?As?UInt32
GetWindowThreadProcessId(Me.Handle,?procid)
Dim?handle?As?IntPtr
handle?=?OpenProcess(1040,?False,?procid)
Dim?name(65536)?As?Char
Dim?nameSize?As?UInt32?=?GetModuleFileNameExW(handle,?IntPtr.Zero,?name,?65536)
Dim?strName?As?String?=?New?String(name,?0,?nameSize)
CloseHandle(handle)
MsgBox(strName)
End?Sub
End?Class
可惡……我不會vb……臨時去七拼八湊查了點語法……盡力了
句柄是 Windows 系統(tǒng)中的概念,和VB.NET無關。
通俗地講,句柄就是一個數(shù)字,也就是一個編號。
比如說,你電腦中有10個窗口,每個窗口都會有一個編號,這是操作系統(tǒng)區(qū)分各個窗口的依據(jù)
首先聲明一下API
在你窗口最頂?shù)奈恢蒙蠈懮?/p>
Private Declare Function 取窗口句柄 Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'由于VB支持中文的 我就定義成 取窗口句柄 這個了
'在窗體中添加一個按鈕里面放進下面代碼就OK了
Private Sub Command1_Click()
Dim 窗口句柄 As Long '聲明窗口句柄變量存儲
窗口句柄 = 取窗口句柄(vbNullString, "新建 文本文檔.txt - 記事本") '取窗口標題的句柄 把得到窗口標題句柄賦予給剛才 窗口句柄 這變量里
If 窗口句柄 = 0 Then '判斷窗口句柄是否等于0 如果等于0表示無法找到窗口句柄
MsgBox "無法找到需要的窗口句柄"
Else
MsgBox "已找到窗口句柄 句柄數(shù)為:" 窗口句柄
End If
End Sub
FindWindowEx
VB聲明
Declare Function FindWindowEx Lib "user32" Alias
"FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As
String, ByVal lpsz2 As String) As Long
說明
在窗口列表中尋找與指定條件相符的第一個子窗口
返回值
Long,找到的窗口的句柄。如未找到相符窗口,則返回零。會設置GetLastError
參數(shù)表
參數(shù)
類型及說明
hWnd1
Long,在其中查找子的父窗口。如設為零,表示使用桌面窗口(通常說的頂級窗口都被認為是桌面的子窗口,所以也會對它們進行查找)
hWnd2
Long,從這個窗口后開始查找。這樣便可利用對FindWindowEx的多次調用找到符合條件的所有子窗口。如設為零,表示從第一個子窗口開始搜索
lpsz1
String,欲搜索的類名。零表示忽略
lpsz2
String,欲搜索的類名。零表示忽略
因為你窗口關閉的時候Time并沒有釋放,但是此時Label已經不能訪問了
才會出現(xiàn)窗口句柄出錯,你試試加上下面的話
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
timer1.Close()
timer2.Close()
End Sub
應該就不會報錯了。
希望能幫到你。