首先:鼠標API函數
目前累計服務客戶上千家,積累了豐富的產品開發及服務經驗。以網站設計水平和技術實力,樹立企業形象,為客戶提供網站制作、成都做網站、網站策劃、網頁設計、網絡營銷、VI設計、網站改版、漏洞修補等服務。創新互聯公司始終以務實、誠信為根本,不斷創新和提高建站品質,通過對領先技術的掌握、對創意設計的研究、對客戶形象的視覺傳遞、對應用系統的結合,為客戶提供更好的一站式互聯網解決方案,攜手廣大客戶,共同發展進步。
[DllImport("User32")]
public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
[DllImport("User32")]
public extern static void SetCursorPos(int x, int y);
[DllImport("User32")]
public extern static bool GetCursorPos(out POINT p);
public struct POINT
{
public int X;
public int Y;
}
public enum MouseEventFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
Wheel = 0x0800,
Absolute = 0x8000
}
其次:載入webBrowser
private void FormBrower_Load(object sender, EventArgs e)
{
webBrowser.Navigate("");
}
接著:根據鼠標API獲取到X,Y坐標區域。。
如何通過鼠標點擊,獲取的區域,導出網頁元素的XPATH?
解析步驟:
創建一個HtmlElment2的getBoundingClientRect方法得到元素矩形(Rect),即元素Webbrowser位置。再通過offsetTop, .offsetLeft, .offsetWidth, .offsetHeight四個屬性,獲取絕對位置。
我知道,WebBrowser.document.activeElement.ID能夠獲取到某元素的ID。
但是,,如何獲取到網頁元素的XPATH,始終搞不出來。。。
您好,在Visual Basic.NET中,是沒有像這樣的文件I/O操作的,一般都是通過System.IO.StreamReader和System.IO.StreamWriter類,System.IO.BinaryReader和System.IO.BinaryWriter類來讀寫文件以及利用My.Computer.FileSystem類讀寫文件,利用System.IO.Filestream類來創建文件,通過引用Microsoft Scripting Runtime來執行文件(夾)和驅動器的特殊操作,常用的是System.IO.StreamReader和System.IO.StreamWriter類。
例如說要讀取一個文件,我們可以利用System.IO.StreamReader類編寫一個方法(也就是函數),但是首先要在當前類的開頭添加一個引用,引用名稱:System.IO,添加引用的代碼如下
Imports System.IO
添加引用之后,就在當前類的內部創建方法:
Private Function ReadFile(ByVal FileURL As String) As String
Dim sr As StreamReader = New StreamReader(FileURL)
ReadFile = sr.ReadToEnd()
sr.Close()
sr = Nothing
End Function
示例說明:
該方法是一個返回String(字符串)數據的函數,FileURL作為參數是用來存放需要訪問的文件的URL,當然,要獲取一個文件的URL,就是利用這一句代碼實現的:
Dim sr As StreamReader = New StreamReader(FileURL)
當獲取了URL之后,就要對文件進行讀取操作了,然后將讀取的結果返回給方法:
ReadFile = sr.ReadToEnd()
讀取文件完畢之后,要對文件執行關閉操作:
sr.Close()
當然別忘了清理資源:
sr = Nothing
StreamReader類可以從流或文件中讀取字符,在創建StreamREader類的對象時,可以指定一個流對象,也可以指定一個文件URL,創建對象后就可以調用他的方法,從流中讀取數據,其常用方法如下:
Peek:返回下一個可用字符,但不使用它。
Read:讀取輸入流中下一個字符或一組字符并移動流或文件指針。
ReadBlock:從當前流中讀取最大數量字符并從index開始將數據寫入buffer。
ReadLine:從當前流中讀取一行字符并將字符作為String返回。
REadToEnd:從流的當前位置到末尾讀取流。
Close:關閉打開的對象,釋放資源。
注:流,一種新的數據格式,這種格式可通過System.IO命名空間下的類訪問。流用Stream類表示,所有的流都是從這個類中繼承的。流向用戶提供了一個一般的數據視圖,隱藏了操作系統和底層設備的實現細節,所有的流都支持讀寫操作。在打開文件時將返回對應的流對象,用戶可以對流對象進行讀寫操作。
如果要對文件執行按行讀取操作,這時就會用到枚舉,這時候,代碼就要更改一下了:
Private Function ReadFile(ByVal FileURL As String) As String
Dim sr As StreamReader = New StreamReader(FileURL)
For Each fLine As String In sr.ReadToEnd()
Line = sr.ReadLine()
ReadFile = ReadFile fLine
Next sr.ReadLine
sr.Close()
End Function
示例說明:
For Each…Next:派生于For…Next循環,用于枚舉一系列對象中的成員,而這些對象組成集合,如果集合中至少存在一個元素,程序就會靜茹For Each塊執行。其格式如下:
For Each 元素 [As 數據類型] In 元素集合
[循環體]
[Exit For]
[循環體]
Next [元素]
比如:
Dim CountNumber As ULong = 0
Dim FolderName() As String = New String() {" "}
For Each strFolder As String In My.Computer.FileSystem.GetDirectories("C:\")
CountNumber = CountNumber + 1
ReDim Preserve FolderName(1 To CountNumber)
FolderName = strFolder
Next strFolder
注:My.Computer.FileSystem.GetDirectories:主要用來枚舉指定目錄的子文件夾。
Preserve:主要用來避免重定義數組而不損失數組元素的原有數據。
另外,利用My.Computer.FileSystem也可以實現文件的讀取,其代碼如下:
Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt")
示例說明:
定義一個字符串變量利用My.Computer.FileSystem.ReadAllText來實現對“C:\test.txt”的讀取。
如果是已經編碼的文本,則可以使用My.Computer.FileSystem對象中的ReadAllText方法并提供路徑和文件編碼類型,將文本寫入字符串變量中,例如:
Dim fpReader As String = My.Computer.FileSystem.ReadAllText("C:\test.txt", _
System.Text.Encoding.UTF32)
當然,System.Text.Encoding的成員不止一個,它還有如下成員:
System.Text.Encoding.UTF8
System.Text.Encoding.UTF16
System.Text.Encoding.ASCII
System.Text.Encoding.Unicode
這些是常見的成員,也是主要的成員。
另外,利用My.Computer.Filesystem類無法實現文件的行操作,還有,如果您的計算機未安裝完整的Microsoft.NET Framework Runtime,則無法實現這種操作!
寫入文件的操作同樣簡單,Visual Basic.NET 允許用戶使用StreamWriter來對文件寫入內容,下面就讓我們來創建一個子例程,來實現文件的寫入:
Private Sub WriterFile(ByVal FileURL As String, ByVal FileCon As String)
Dim sr As StreamWriter = New StreamWriter(FileURL)
sr.Write(FileCon)
sr.Close()
sr = Nothing
End Sub
示例說明:
sr.Write(FileCon):將FileCon寫入文件FileURL之中。
另外,StreamWriter常用方法如下:
WriteLine:向流中寫入一行,后面跟結束符。
Write:寫入流,向流對象中寫入字符并移動流或文件指針。
Close:關閉打開的對象,釋放資源。
附:Visual Basic 6.0文件操作解說:
打開: Open 文件名 For Input | Output | Append As [#]文件號
Input打開讀入,文件不存在報錯。Output打開覆蓋寫入,文件不存在則創建。Append打 開追加寫入,文件不存在則創建。
讀: Line Input #文件號, 字符串變量
讀一行數據存入字符串變量,數據包括空格、Tab、等,不包括回車符和換行符,所以要顯示文件的換行效果,要手動添加回車符和換行符(vbCrLf)
Input #文件號, 變量1[, | ;] [變量2]...
這種方式可以存入多個變量,而且變量類型不限于字符串型。
寫: Print #文件號, 參數1[, | ;] [參數2]...
將各參數逐個寫入文件。參數間用逗號隔開時,文件中相應插入多個空格;用分號隔開時,插入一個空格。可以用Spc(n)、Tab(n)等進行排版。
Write #文件號, 參數1[, | ;] [參數2]...
這種寫入方式將自動添加界定符,對不同參數的類型加以界定。
Visual Basic 6.0文件操作函數:
Seek: Seek(文件號)
返回文件正在訪問的位置,返回值為長整型。對順序文件和二進制文件,返回值以字節為單位;對隨機訪問文件,返回值以記錄號為單位。
Seek: Seek [#]文件號,位置
定位文件到指定位置。位置單位同上所述。
Input: Input (字節數,[#]文件號)
從文件的訪問當前位置讀入指定字節數的數據。僅適用于順序文件和二進制文件。
EOF: EOF(文件號)
判斷文件的訪問位置是否在文件尾,如果是,返回True,否則,返回False。
LOF: LOF(文件號)
返回文件長度,單位為字節。
FileLen: FileLen (文件名)
返回文件名對應文件的長度,單位是字節。該函數取磁盤文件標識中的長度,即文件打開前的長度,可以取未打開的文件長度。
GetAttr: GetAttr (Pathname)
返回指定文件或文件夾的屬性。
FileAttr: FileAttr (文件號)
返回文件號對應文件的打開方式。
GetDateTime: GetDateTime (Pathname)
返回文件被創建或修改的最后日期和時間。
Free: FreeFile[(0|1)]
返回未被占用的文件號,Free或Free(0)返回1~255之間未占用的文件號,Free(1)返回256~511之間未占用的文件。
Dir: Dir (Pathname [,Attributes])
測試指定路徑是否有某文件,Attributes附加文件屬性條件,取值vbNormal、vbReadOnly、vbHidden、vbSystem、vbVolume、vbDirectory。
Kill: Kill (文件名)
刪除指定文件,文件名可包含路徑。
FileCopy: FileCopy 源文件,目標文件
拷貝文件。
Name: Name 舊文件名 As 新文件名
文件重命名。前后路徑不一致時,操作為移動文件并重命名。
MkDir: MkDir path
新建文件夾。
RmDir: Rmdir path
刪除文件夾。
ChDrive: ChDrive Drive
改變當前驅動器 ChDrive "D"
CurDir: CurDir [(driver)]
返回當前工作路徑,指定driver則返回目標驅動器的當前工作路徑。
舉例:
'新建文件,并寫入數據,關閉
Open "a.txt" For Output As #1
Print #1, "ABCDEFG"; vbCrLf; "HIJK"
Close #1
'打開文件,并全部寫入新文件,關閉
Open "a.txt" For Input As #2
Open "b.txt" For Output As #3
Dim str As String
While (Not EOF(2))
Line Input #2, str
Print #3, str
Wend
Close
注:關于Visual Basic 6.0的文件操作資料來自于
如果您覺得我的回答幫助了您解決難題,別忘了采納哦,如果我的回答未能解決您的問題,您可以在互聯網上尋找更多的解決方案!
C返回局部變量的值也沒問題啊
只是如果這個局部變量是指向棧上的內存的指針,由于函數結束后活動棧被清空,會導致指針失效。
VB.NET不支持指針語法,它不可能返回指向棧上的指針,所以用不著擔心這個問題。
你的理解
第一點理解是正確的,不過和這個問題關系不大。因為引用類型本來就不是分配在棧上的,它當然就不受函數的影響。
第二點,那個只是個語法問題。VB6沒有Return語句,所以它必然有另外一種語法來表明函數的返回值。這個和函數能否返回正確的對象沒有關系,就是一種表明函數返回值的語法。
編譯器確實定義了一個和函數同名的變量,那個變量就是一個普通的局部變量,作用域就在函數的局部域里。這個變量沒什么特別的,就是編譯器會在函數結束時把這個變量的值作為函數的返回值返回而已。
可以是可以,但是不建議。
建議先學通一門,再繼續學另一門。
另外,C語言面向過程,python面向對象,一起學習兩門語言的話,容易把自己搞混。
所以,建議先學好一門,再學python。當你學會了C語言之后,很快就能上手python了。所以不建議基礎不牢的情況下同時學兩門語言。
分享名稱:csdnvb.net的簡單介紹
網站網址:http://m.newbst.com/article26/phhijg.html
成都網站建設公司_創新互聯,為您提供網站維護、企業網站制作、建站公司、網站設計公司、微信小程序、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯