Private Sub Timer1_Timer()
Dim winHwnd As Long Dim RetVal As Long winHwnd = FindWindow(vbNullString, "internet")
MsgBox winHwnd
If winHwnd〈〉0 Then RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&) If RetVal = 0 Then MsgBox "关闭出错!" End If Else MsgBox "internet程序没有运行。" End IfEnd Sub 在运行了ie后,以上程序为什么还总显示“internet程序没有运行“
如何解决??????????
Dim winHwnd As Long Dim RetVal As Long winHwnd = FindWindow(vbNullString, "internet")
MsgBox winHwnd
If winHwnd〈〉0 Then RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&) If RetVal = 0 Then MsgBox "关闭出错!" End If Else MsgBox "internet程序没有运行。" End IfEnd Sub 在运行了ie后,以上程序为什么还总显示“internet程序没有运行“
如何解决??????????
解决方案 »
- 求高效的取高字节VB6的函数
- 如果能让 text1 内含有空格删除?
- 请帮帮小女子吧!急用Data Matrix条码编码规则!!
- 急,VB如何将某一目录下的所有图片导入到SQL2000中,在线等。。。
- 哪位高手可否介绍一下远程控制(即当我进行键盘、鼠标操作时,远程电脑也跟我做同样的操作)的原理?
- Microsoft activex data objects 2.7 library
- 为什么我的程序在2000下正常,XP却不能执行!我是小鸟
- 快帮帮我, 我给你200 分
- 调用SHFileOperation问题进行文件COPY的取消问题
- 一个简单的问题如何使COMMAND上文本变成别的颜色?
- 提示出错了!“from子句语法错误,adodc1.refresh方法失败!”(初学者)
- 100分悬赏,局域网内文件传输。
下面的代码通过测试,可以关闭计算器:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_CLOSE = &H10
Private Sub Command1_Click()
Dim winHwnd As Long Dim RetVal As Long winHwnd = FindWindow(vbNullString, "计算器")
MsgBox winHwnd
If winHwnd <> 0 Then RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&) If RetVal = 0 Then MsgBox "关闭出错!" End If Else MsgBox "程序没有运行。" End IfEnd Sub
"internet"要是窗口的全称才行。
好好看看,你的代码写的有问题,正确的结果应该是出现这个提示。首先你要保证你的IE标题是“internet”,可是你如何保证?IE标题是很敏感的,多一个空格少一个空格都是不同的东西,如此,你可能会想到打开一个空的IE。即将IE的设置里面把默认的主页改成“about:blank”,这样一来,你寻找的IE标题就应该是“about:blank - Microsoft Internet Explorer”。精简之后的代码如下(不要用Timer事件):
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_CLOSE = &H10Private Sub Command1_Click()
Dim winHwnd As Long Dim R As Long winHwnd = FindWindow(vbNullString, "about:blank - Microsoft Internet Explorer")
MsgBox winHwnd
If winHwnd〈〉0 Then R = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
End If If R = 0 Then MsgBox "关闭出错!"
Else MsgBox "internet程序没有运行。" End If
End Sub
以下是在Form1中:
Option Explicit
Dim IE() As InternetExplorer
Dim C1() As Class1 ' Class1 是自定义的类
Dim Doc
Private Sub Form_Load()
Dim tmp As Long
Text1.Text = ""
Timer1.Interval = 500 ' 定时扫描新的IE窗口
Timer1_Timer
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
Dim i As Integer
Dim SWs As New ShellWindows ' Windows级所有活动窗口的集合
ReDim IE(SWs.Count) As InternetExplorer ' 根据窗口数目来动态定义
ReDim C1(SWs.Count) As Class1
If Len(Text1.Text) > 0 Then
End If
Text1 = vbCrLf + vbCrLf
For i = 0 To SWs.Count - 1
Set IE(i) = SWs.Item(i)
Set Doc = IE(i).Document
If TypeName(Doc) = "HTMLDocument" Then ' 判断是否为IE窗口
Text1 = Text1 + Doc.Title + vbCrLf
Debug.Print Doc.Title
If InStr(Doc.Title, "搜狐首页") > 0 Then ' 注意这个"搜狐首页",如果是英文IE对大小写是很敏感的~我是用搜狐首页来试的,你可以换成其他的,但不能是空的,我前面之所以拿空的举例,只是一个说法~因为我比较懒,想不到别的,IE的标题通常都很长,实在懒的写
Text1 = Text1 + "搜狐首页------查到一个符合条件的窗口,已经关闭" + vbCrLf 'vbCrLf换行符
IE(i).Quit
Timer1.Enabled = False ' 关闭之后Timer1停止
End If
Set C1(i) = New Class1
C1(i).Begin IE(i) ' 启动对该IE窗口的监控
End If
NextEnd Sub
以下是在类模块(Class1)中:
' 自定义类的代码(Class1.cls)
Option Explicit
Dim WithEvents TheIE As InternetExplorer
Public Sub Begin(IE1 As InternetExplorer) ' 类的初始化
Set TheIE = IE1
End Sub