因為process.start(EXEA)是VB.net
為偃師等地區(qū)用戶提供了全套網頁設計制作服務,及偃師網站建設行業(yè)解決方案。主營業(yè)務為成都網站設計、網站制作、偃師網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
debug下這個exe打開的,所以如果EXEA里面用到了相對路徑,那必然是指向VB.net
debug下的,除非在EXEA中使用絕對路徑,如果EXEA你無法更改則只能用VB.net
debug下這個exe來控制了,比如EXEA如果要在他自己的目錄下去找一個文件,那你就用exe把這個文件復制到VB.net
debug下
調用過程,調用過程有諸多技巧,它們與過程的類型、位置以及在應用程序中的使用方式有關。下面說明如何調用 Sub 過程和 Function 過程。
調用 Sub 過程
與 Sub 過程不同,在表達式中,Sub 過程不能用其名字調用。調用 Sub 過程的是一個獨立的語句。Sub 過程還有一點與函數(shù)不一樣,它不會用名字返回一個值。但是,與 Function過程一樣,Sub 過程也可以修改傳遞給它們的任何變量的值。
調用 Sub 過程有兩種方法:
'以下兩個語句都調用了名為 MyProc 的 Sub 過程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意,當使用 Call 語法時,參數(shù)必須在括號內。若省略 Call 關鍵字,則也必須省略參數(shù)兩邊的括號
調用函數(shù)過程
通常,調用自行編寫的函數(shù)過程的方法和調用 Visual Basic 內部函數(shù)過程(例如 Abs)的方法一樣;即在表達式中寫上它的名字。
'下面的語句都調用函數(shù) ToDec。
Print 10 * ToDec
X = ToDec
If ToDec = 10 Then Debug.Print "Out of Range"
X = AnotherFunction ( 10 * ToDec)
就像調用 Sub 過程那樣,也能調用函數(shù)。下面的語句都調用同一個函數(shù):
Call Year (Now)
Year Now
當用這種方法調用函數(shù)時,Visual Basic 放棄返回值。
調用其它模塊中的過程
在工程中的任何地方都能調用其它模塊中的公用過程??赡苄枰付ㄟ@樣的模塊,它包含正在調用的過程。調用其它模塊中的過程的各種技巧,取決于該過程是在窗體模塊中、類模塊中還是標準模塊中。
窗體中的過程
所有窗體模塊的外部調用必須指向包含此過程的窗體模塊。如果在窗體模塊 Form1 包含 SomeSub 過程,則可使用下面的語句調用 Form1 中的過程:
Call Form1.SomeSub(arguments)
類模塊中的過程
與窗體中調用過程類似,在類模塊中調用過程要調用與過程一致并且指向類實例的變量。例如,DemoClass 是類 Class1 的實例:
Dim DemoClass as New Class1
DemoClass.SomeSub
但是不同于窗體的是,在引用一個類的實例時,不能用類名作限定符。必須首先聲明類的實例為對象變量(在這個例子中是 DemoClass )并用變量名引用它。
標準模塊中的過程
如果過程名是唯一的,則不必在調用時加模塊名。無論是在模塊內,還是在模塊外調用,結果總會引用這個唯一過程。如果過程僅出現(xiàn)在一個地方,這個過程就是唯一的。
如果兩個以上的模塊都包含同名的過程,那就有必要用模塊名來限定了。在同一模塊內調用一個公共過程就會運行該模塊內的過程。例如,對于 Module1 和 Module2 中名為 CommonName 的過程,從 Module2 中調用 CommonName 則運行 Module2 中的 CommonName 過程,而不是 Module1 中的 CommonName 過程。
從其它模塊調用公共過程名時必須指定那個模塊。例如,若在 Module1 中調用 Module2 中的 CommonName 過程,要用下面的語句:
Module2.CommonName (arguments)
Public ? 用于聲明對所有模塊中的所有其它過程都可以使用的過程。?
Private ?用于聲明只能在包含該聲明的模塊中使用的過程。
兩種方法
1.
Shell(""Explorer.exe", AppWinStyle.NormalFocus")
2.
Dim proc As New Process
proc.StartInfo.FileName="Explorer.exe"
proc.Start
方法2給予更多的控制,如結束進程的方法Kill
DLL(動態(tài)鏈接庫)是一個很有用的東西,在開發(fā)大項目的時候顯得非常重要,因為多人合作開發(fā)時,可以給每個人分配一個任務,用DLL完成,最后組合起來,就不會出現(xiàn)互相沖突的問題。這里給出最簡單的DLL編寫與調用的示例
首先,我們打開VB.NET,選擇類庫,名稱改為test
然后輸入以下代碼
Public?Class?test
Public?Function?test(ByVal?a?As?Long,?ByVal?b?As?Long)?As?Long
Return?a?+?b
End?Function
End?Class
保存后,生成DLL文件。
這就是最簡單的一個DLL,下面是調用該DLL的示例
新建一個工程,單擊“項目” -- 添加引用
找到剛才生成的DLL,雙擊它
添加引用以后,似乎什么也沒發(fā)生,這時我們輸入以下代碼:
Imports test.test
這樣,就包含了該DLL的類。
然后我們定義一個類
Dim test As New test.test
這樣,就可以使用里面的函數(shù)了,下面是程序示例
Imports?test.test
Public?Class?Form1
Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load
Dim?test?As?New?test.test
MsgBox(test.test(1,?2))
End?Sub
End?Class
運行該程序,可以看到,調用了DLL內的函數(shù)。
這就是最簡單的DLL示例,可以將一些復雜的代碼集成到DLL里,以后升級或重用都比較方便。
Imports?System.Text
Imports?System.Runtime.InteropServices
Public?Class?Form1
'?相關API函數(shù)聲明,注釋掉的這里沒用到,但是也比較常用吧,這些函數(shù)的功能都能搜到。
Private?Declare?Function?FindWindow?Lib?"user32"?Alias?"FindWindowA"?(ByVal?lpClassName?As?String,?ByVal?lpWindowName?As?String)?As?IntPtr
Private?Declare?Function?FindWindowEx?Lib?"user32"?Alias?"FindWindowExA"?(ByVal?hWnd1?As?IntPtr,?ByVal?hWnd2?As?IntPtr,?ByVal?lpsz1?As?String,?ByVal?lpsz2?As?String)?As?IntPtr
Private?Delegate?Function?EnumChildProc(ByVal?hWnd?As?IntPtr,?ByVal?lParam?As?Integer)?As?Boolean
Private?Declare?Function?EnumChildWindows?Lib?"user32.dll"?(ByVal?hWndParent?As?IntPtr,?ByVal?lpEnumFunc?As?EnumChildProc,?ByVal?lParam?As?Integer)?As?Boolean
Private?Declare?Auto?Function?SendMessage?Lib?"User32.dll"?(ByVal?hWnd?As?IntPtr,?ByVal?Msg?As?Integer,?ByVal?wParam?As?Integer,?ByVal?lParam?As?String)?As?Integer
'Private?Declare?Function?CheckDlgButton?Lib?"user32"?Alias?"CheckDLGButtonA"?(ByVal?hDlg?As?IntPtr,?ByVal?nIDButton?As?IntPtr,?ByVal?wCheck?As?Integer)?As?Integer
Private?Declare?Function?GetClassName?Lib?"user32"?Alias?"GetClassNameA"?(ByVal?hWnd?As?IntPtr,?ByVal?lpClassName?As?StringBuilder,?ByVal?nMaxCount?As?Integer)?As?Integer
'Private?Declare?Function?GetWindowThreadProcessId?Lib?"user32"?Alias?"GetWindowThreadProcessId"?(ByVal?hwnd?As?IntPtr,?ByVal?lpdwProcessId?As?Long)?As?Integer
Private?Declare?Auto?Function?GetWindowTextLength?Lib?"user32"?Alias?"GetWindowTextLength"?(ByVal?hwnd?As?IntPtr)?As?Integer
Private?Declare?Function?GetWindowText?Lib?"user32"?Alias?"GetWindowTextA"?(ByVal?hwnd?As?IntPtr,?ByVal?lpString?As?StringBuilder,?ByVal?cch?As?Integer)?As?Integer
'?相關消息定義,也有沒用到的
Const?WM_SETTEXT?=?HC
Const?WM_GETTEXT?=?HD
'Const?WM_SETFOCUS?=?H7
'Const?WM_KILLFOCUS?=?H8
'Const?WM_CLOSE?=?H10
'Const?WM_SYSCOMMAND?=?H112
'Const?SC_CLOSE?=?HF060
'Const?SC_MINIMIZE?=?HF020
Const?BM_GETCHECK?=?HF0
Const?BM_SETCHECK?=?HF1
Const?BM_GETSTATE?=?HF2
Const?BM_SETSTATE?=?HF3
Const?BM_SETSTYLE?=?HF4
Const?BM_CLICK?=?HF5
'Const?BM_GETIMAGE?=?HF6
'Const?BM_SETIMAGE?=?HF7
Const?BST_UNCHECKED?=?O0
Const?BST_CHECKED?=?O1
Const?BST_INDETERMINATE?=?O2
'?儲存窗口句柄
Dim?WindowHandle?As?IntPtr
'?儲存兩個(或者多個)編輯框句柄
Dim?EditHandle?As?New?List(Of?IntPtr)
Dim?EditWindowsText?As?List(Of?String)
'?儲存復選框句柄
Dim?CheckHandle?As?IntPtr?=?0
Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load
Button1_Click(sender,?e)
End?Sub
'?EnumChildWindows?回調函數(shù),該函數(shù)名作為API函數(shù)EnumChildWindows?的一個參數(shù)
'?該函數(shù)實現(xiàn)了枚舉各個子窗口,找出編輯框屬性的功能
Public?Function?EnumChildProcC(ByVal?hwnd?As?IntPtr,?ByVal?lParam?As?Integer)?As?Boolean
Dim?dwWindowClass?As?StringBuilder?=?New?StringBuilder(100)
'?獲得某一個句柄的類名
GetClassName(hwnd,?dwWindowClass,?100)
If?dwWindowClass.ToString.Contains("EDIT")?Or?dwWindowClass.ToString.Contains("Edit")?Then?????'?類名包含EDIT的為編輯框
EditHandle.Add(hwnd)????????????????????????'?存儲該句柄
End?If
'?返回?True?一直枚舉完
Return?True
End?Function
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
WindowHandle?=?FindWindow(vbNullString,?"登陸")
If?WindowHandle.ToInt32?=?0?Then
MsgBox("未捕獲到窗口"?+?"登陸")
Return
End?If
'?枚舉所有主窗口的子窗口(控件),枚舉時自動調用回調函數(shù),完成編輯框句柄的獲取
EnumChildWindows(WindowHandle,?AddressOf?EnumChildProcC,?0)
'?尋找復選框
CheckHandle?=?FindWindowEx(WindowHandle,?IntPtr.Zero,?vbNullString,?"記住密碼")
Dim?str?As?New?StringBuilder
Dim?j?As?Integer?=?0
'?對編輯框文本賦值
For?j?=?0?To?EditHandle.Count?-?1
SendMessage(EditHandle(j),?WM_SETTEXT,?0,?"Text")
'GetWindowText(EditHandle(j),?str,?20)
'EditWindowsText.Add(Str.ToString)
'Str.Clear()
Next
If?EditHandle.Count?=?0?Then
MsgBox("未找到輸入框!")
End?If????????
If?CheckHandle.ToInt32??0?Then
'CheckDlgButton(WindowHandle,?id,?1)
'?對復選框進行鼠標單擊操作
SendMessage(CheckHandle,?BM_CLICK,?0,?0)
'SendMessage(CheckHandle,?BM_SETCHECK,?True,?0)
End?If
End?Sub
End?Class