




已閱讀5頁,還剩1頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/ShowForum.aspx?id=36&ClassID=57對法恩特插件進行外部操作1 想必大家對法恩特的插件不陌生的;大概是第一款完整的標準件的插件; 空閑的時候做了個小程序,用來對FNT插件進行外部操作,目的是用其他外部程序控制法恩特的軟件窗口工作;首先用到win32 api函數:findwindows;Private Declare Function FindWindow Lib user32 Alias FindWindowA (ByVal lpClassName As String, ByVal lpWindowName As String) As Long把這句話加到vb程序的聲明中,這樣在程序里面就能調用findwindows函數來尋找FNT的窗口了,本質上來說每個windows窗口都有一個唯一的句柄,可惜每次運行窗口的時候句柄的值是變動的;hwnd = FindWindow(vbNullString, 法恩特標準件庫-螺栓)如果“法恩特標準件庫-螺栓”這個窗口是打開著的,我們就能利用上面的語句找到這個窗口的句柄;hwnd這個函數的真值就是句柄;這是第一步,只有找到了句柄才能夠對這個特定的窗口進行操作;如果需要對其他窗口操作把語句中的窗口名稱換掉即可:如:hwnd = FindWindow(vbNullString, 法恩特標準件庫-軸承) hwnd = FindWindow(vbNullString, 法恩特標準件庫-螺母) hwnd = FindWindow(vbNullString, 法恩特標準件庫-墊圈)hwnd = FindWindow(vbNullString, 法恩特標準件庫-密封件)這個是隨意換的;如果想操作solidworks窗口,就換成:hwnd = FindWindow(vbNullString, Solidworks Office Premium 2007)一樣可以得到sw軟件的運行窗口;抱歉我用的是sw2007;機器破,沒辦法;補充一點:在用上面的hwnd語句之前,要加一個hwnd的定義:Dim hwnd As Long這樣就把hwnd的類型規定為長整型;找到hwnd,也就是上面所說的句柄是打算干什么呢?當然是為了找到這個窗口里面顯示的其他控件;怎么找呢? 下次再寫給大家;我們說到hwnd是句柄,也就是法恩特窗口的句柄;我們來看上圖: 圖中有“確定”“取消”按鍵,這是我們軟件中經常有的東西,這種東西有個專有名稱叫控件,是專門做出來的一個軟件集合,可以供編程者調用; 圖中也還有其他種類的控件,我們可以數一下,一共是12個控件;其中包括“標準件類型”這樣的字段也是用控件的形式做出來的。 我們介紹上面控件的目的是要通過窗體的hwnd(句柄)來得到,窗體內控件的hwnd,沒想到吧,窗體內的控件也有句柄哦。 那么,我們用一句程序來調用查找控件的模塊程序:Call EnumChildWindows(hwnd, AddressOf EnumChildWindowProc, lParam) 注意 hPwnd 是父窗口的句柄下面我就要列出查找控件的模塊了,基本的意思是用枚舉法遍歷所有在窗口中的控件;找出控件的hwnd(也就是句柄);Public Function EnumChildWindowProc(ByVal hwnd As Long, ByRef lParam As Long) As LongDim strTitle As StringDim strClassName As StringlParam = 1Call GetTitleClass(hwnd, strTitle, strClassName)那么在這個模塊之前,我們當然要聲明一下EnumChildWindowProc這個過程了,這個部分有興趣的朋友可以查閱win32 Api函數,VB里面也有帶這個的查找器。Public Declare Function EnumWindows Lib user32 (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long那么好了,請看上面最后一句:Call GetTitleClass(hwnd, strTitle, strClassName)這明顯是調用了另外一段程序,也就是GetTitleClass,那么我們給出這段程序:Public Sub GetTitleClass(ByVal hwnd As Long, Title As String, ClassName As String)Dim nSize As LongDim strTitle As StringDim strClassName As StringnSize = GetWindowTextLength(hwnd)If nSize 0 ThenstrTitle = Space(255)Call GetWindowText(hwnd, strTitle, Len(strTitle)strTitle = Trim(strTitle)ElsestrTitle = No TitleEnd IfstrClassName = Space(255)Call GetClassName(hwnd, strClassName, Len(strClassName)strClassName = Trim(strClassName)Title = strTitleClassName = strClassNameMsgBox ClassNameMsgBox strTitleEnd Sub用上面這段小程序能得到每個控件的三個值:A、hwnd 句柄值B、strTitle 就是控件的標題C、ClassName 控件的類型;也就是說EnumChildWindowProc要遍歷每個控件,然后通過GetTitleClass,得到每個控件的句柄值,控件的標題,控件的類型。今天我們繼續討論上次我貼出來的一段小程序:Public Sub GetTitleClass(ByVal hwnd As Long, Title As String, ClassName As String)Dim nSize As LongDim strTitle As StringDim strClassName As StringnSize = GetWindowTextLength(hwnd)If nSize 0 ThenstrTitle = Space(255)Call GetWindowText(hwnd, strTitle, Len(strTitle)strTitle = Trim(strTitle)ElsestrTitle = No TitleEnd IfstrClassName = Space(255)Call GetClassName(hwnd, strClassName, Len(strClassName)strClassName = Trim(strClassName)Title = strTitleClassName = strClassNameMsgBox ClassNameMsgBox strTitleEnd Sub上段程序中加紅色的代碼是win32 api,需要進行聲明的,如下:Private Declare Function GetClassName Lib user32 Alias GetClassNameA (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As LongPrivate Declare Function GetWindowText Lib user32 Alias GetWindowTextA (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As LongPrivate Declare Function GetWindowTextLength Lib user32 Alias GetWindowTextLengthA (ByVal hwnd As Long) As Long我們聲明了api函數以后就可以順利運行程序了,通過下面兩句可以輕松得到每個控件的名字和標題,這樣我們就能夠有很大收獲了。MsgBox ClassNameMsgBox strTitle然后可以找張紙把得到的classname和strtiltle記錄下來,然后再來分析具體的控件情況。接下來:我說明一下我們的編程思路:第一步:找到總窗口的句柄第二步:通過總窗口的句柄遍歷窗口中的控件,得到每個控件的種類和標題第三步:按控件的種類和標題,對控件進行一一對應,找出我們需要操作的控件,比如“確定”控件(按鈕控件)。第四步:對我們需要操作的控件提取出控件的hwnd(控件句柄);第五步:用控件句柄hwnd操作控件;第六步:結合VB的相關其他界面和編程要求對控件實現控制,比如輸入、輸出、順序動作等。 下一節,我會將得到的控件列出來,以便大家參考。(原創)solidworks開發教程27-例題 VB對尺寸的操作 歡迎參與調查 下面的例子是用VB程序對零件的尺寸參數進行操作,注意:目前絕大多數的API函數的單位是米; Private Sub Command1_Click() 建立一個按鈕,這是點按鈕的事件驅動;Dim Part As Object 定義Partdim strFileName as string 定義sTrFileName 串數據類型;dim longstatus as long 定義長型類型;dim d1 as integerdim d2 as integerdim h as Singleif Dir(strFileName)= then 檢查文件是否存在 MsgBox (文件不存在,請檢查路徑: & vbCrlf & strFileName ) exit sub 如果不存在就退出end ifstrFileName =App.Path+墊圈.sldprt 文件地址;Set swApp=CreateObject (SldWorks.Application) 創建swAppswApp.Visible=True swApp 可見set Part=swApp.OpenDoc4(strFileName,1,0,longsstatues) 用API打開文件set Part=swApp.ActivateDoc (墊圈) 激活ProgressBar1.value=4d1=text1.text 分別從text1到text3中取值;text1-3是text控件;d2=text2.texth=text3.textdebug.Print d1,d2,hstrFileName=墊圈.sldprtPart.Parameter(d1草圖1&strFileName).systemValue=d1/1000 賦值Part.Parameter(d2草圖1&strFileName).systemValue
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金色花荷葉母親教學設計
- 2025唐山市樂亭縣汀流河鎮社區工作者考試真題
- 浙江省A9協作體2024-2025學年高一下學期4月期中聯考試題化學
- 輕法式浪漫家居中的納帕牛皮軟裝設計
- 顱底骨折個案護理查房
- 游戲闖關數學課件
- 膨脹加強帶、后澆帶施工方案
- 蘇教版語文七年級上冊第17課《夏》教學提綱
- 2025年高考政治選必二《法律與生活》主觀題背誦模板
- 青春期性心理健康教育
- GB/T 22235-2008液體黏度的測定
- CAD輸入文字時提示“找不到主詞典無法啟動拼寫檢查程序”怎么辦
- -活出心花怒放的生命 課件 心理健康
- 給水泵檢修方案
- 設備出入庫管理辦法
- KEGG代謝通路中文翻譯
- 消火栓月檢查表
- GB∕T 17832-2021 銀合金首飾 銀含量的測定 溴化鉀容量法(電位滴定法)
- 低成本自動化的開展與案例77頁PPT課件
- 人防工程竣工資料(全套)
- 梅州市部分飲用水源保護區調整方案
評論
0/150
提交評論