VB中執行一個EXE檔案,並對EXE視窗的控制元件進行操作
阿新 • • 發佈:2019-02-12
1,執行一個EXE程式
本例子將第一個引數設為PROCESS_TERMINATE Or PROCESS_QUERY_INFORMATION都可。
3,通過API函式SendMessage傳送一個WM_CLOSE訊息,關閉當前EXE視窗
帖子 如何關閉Shell開啟的視窗?
http://topic.csdn.net/t/20040804/14/3241643.html
帖子 用sendmessage實現自動點選指定視窗中的指定按鈕的問題
http://topic.csdn.net/t/20040819/03/3288355.html
用FindWindowEx找不到我要的Button,但EnumChildWindows可以遍歷到它???
http://topic.csdn.net/t/20060823/13/4969697.html
- Dim mProcID AsLong
- mProcID = Shell(FileName)
- Option Explicit
- Const PROCESS_QUERY_INFORMATION = &H400
- Const PROCESS_TERMINATE = &H1
- PrivateDeclareFunction OpenProcess Lib"kernel32" (ByVal dwDesiredAccess AsLong, ByVal bInheritHandle AsLong,
- PrivateDeclareFunction CloseHandle Lib"kernel32" (ByVal hObject AsLong) AsLong
- PrivateDeclareFunction TerminateProcess Lib"kernel32" (ByVal hProcess AsLong, ByVal uExitCode AsLong) AsLong
- Sub main()
- Dim mProcID AsLong
- Dim hProcess
- mProcID = Shell("notepad.exe", 1) '此處利用了 Shell當函式使用時返回的任務標識
- hProcess = OpenProcess(PROCESS_TERMINATE Or PROCESS_QUERY_INFORMATION,False,mProcID)
- Call TerminateProcess(hProcess, 3838)
- EndSub
本例子將第一個引數設為PROCESS_TERMINATE Or PROCESS_QUERY_INFORMATION都可。
3,通過API函式SendMessage傳送一個WM_CLOSE訊息,關閉當前EXE視窗
- Private
- PrivateDeclareFunction FindWindow Lib"user32"Alias"FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName AsString) AsLong
- PrivateDeclareFunction SendMessage Lib"user32"Alias"SendMessageA" (ByVal hwnd AsLong, ByVal wMsg AsLong, ByVal wParam AsLong, lParam As Any) AsLong
- hwnd = FindWindow(0&, "搜尋視窗的標題Title")
- Call SendMessage(hwnd,WM_CLOSE, 0,ByVal 0&)
- PrivateDeclareFunction SendMessage Lib"user32"Alias"SendMessageA" (ByVal hwnd AsLong, ByVal wMsg AsLong, ByVal wParam AsLong, lParam As Any) AsLong
- PrivateDeclareFunction FindWindow Lib"user32"Alias"FindWindowA" (ByVal lpClassName AsString, ByVal lpWindowName AsString) AsLong
- PrivateDeclareFunction FindWindowEx Lib"user32"Alias"FindWindowExA" (ByVal hWnd1 AsLong, ByVal hWnd2 AsLong, ByVal lpsz1 AsString, ByVal lpsz2 AsString) AsLong
- PrivateConst BM_CLICK = &HF5
- Dim fw as Long
- Dim hWnd as Long
- fw = FindWindow(vbNullString, "視窗標題Title")
- hWnd = FindWindowEx(fw, 0, "Button類名OR 0", Button的Caption)
- SendMessage hWnd, BM_CLICK, 0, ByVal 0&
Err: -2147417843 - Automation Error : An Out Going Call Cannot Be Made Because The Application Is Dispatching An Input Asynchronous Call
5,在實驗過程中用到的幾個API,也分享一下- DeclareFunction GetClassName Lib"user32.dll"Alias"GetClassNameA" _
- (ByVal hWnd AsLong, ByVal lpClassName AsString, ByVal nMaxCount AsLong) AsLong
- DeclareFunction GetWindowText Lib"user32"Alias"GetWindowTextA" ( _
- ByVal hWnd AsLong, _
- ByVal sWndTitle AsString, _
- ByVal cLen AsLong) AsLong
- DeclareFunction ShowWindow Lib"user32.dll" _
- (ByVal hWnd AsLong, ByVal nCmdShow AsLong) AsLong
- DeclareSub Sleep Lib"kernel32.dll" _
- (ByVal dwMillsecounds AsLong)
- PrivateConst SW_RESTORE = &H9
- PrivateConst BM_CLICK = &HF5
- Dim hWnd AsLong
- Dim hWndBtn AsLong
- Dim temp AsString
- hWnd = FindWindow(vbNullString, "視窗標題Title")
- Call ShowWindow(hWnd, SW_RESTORE) '視窗活性化
- hWndBtn = FindWindowEx(hWnd, 0&, 0&, "按鈕的Caption")
- temp = String(256, Chr(0))
- Call GetClassName(hWndBtn, temp, 256) '可以檢視物件類名
- temp = String(256, Chr(0))
- Call GetWindowText(hWndBtn, temp, 256) '可以檢視物件Caption
- Call SendMessage(hWndBtn, BM_CLICK, 0, ByVal 0&)
帖子 如何關閉Shell開啟的視窗?
http://topic.csdn.net/t/20040804/14/3241643.html
帖子 用sendmessage實現自動點選指定視窗中的指定按鈕的問題
http://topic.csdn.net/t/20040819/03/3288355.html
用FindWindowEx找不到我要的Button,但EnumChildWindows可以遍歷到它???
http://topic.csdn.net/t/20060823/13/4969697.html