VB 中如何实现关闭其他程序打开的窗口

VB 中如何实现关闭其他程序打开的窗口,第1张

根据标题文本找到窗体句柄,然后发送关闭消息

以下代码放在一个标准模块中,enumwindows可以枚举窗口列表中的所有父窗口(顶级和被所有窗口),getwindowtext可以获得窗口标题,sendmessage发送WM_CLOSE消息到你要关闭的窗体就可以了

Declare

Function

EnumWindows

Lib

"user32"

(ByVal

lpEnumFunc

As

Long,

ByVal

lParam

As

Long)

As

Boolean

Declare

Function

GetWindowText

Lib

"user32"

Alias

"GetWindowTextA"

(ByVal

hwnd

As

Long,

ByVal

lpString

As

String,

ByVal

cch

As

Long)

As

Long

Declare

Function

GetWindowTextLength

Lib

"user32"

Alias

"GetWindowTextLengthA"

(ByVal

hwnd

As

Long)

As

Long

Declare

Function

SendMessage

Lib

"user32"

Alias

"SendMessageA"

(ByVal

hwnd

As

Long,

ByVal

wMsg

As

Long,

ByVal

wParam

As

Long,

lParam

As

Any)

As

Long

Public

Const

WM_CLOSE

=

&H10

'这个函数是enumwindows回调用的,在这里加入处理代码就行

Public

Function

EnumWindowsProc(ByVal

hwnd

As

Long,

ByVal

lParam

As

Long)

As

Boolean

Dim

sSave

As

String,

Ret

As

Long

Ret

=

GetWindowTextLength(hwnd)

sSave

=

Space(Ret)

GetWindowText

hwnd,

sSave,

Ret

+

1

Form1Print

Str

$(hwnd)

+

"

"

+

sSave

'这行代码在窗体上显示所有窗口句柄和标题,把这行代码换成在标题中查找要限制的文本,如果找到就向这个窗口SendMessage

hwnd,

WM_CLOSE,

0,

0就可以了

EnumWindowsProc

=

True

End

Function

以下为窗体模块中调用的代码,放在时间事件中,例如每4秒中检查一次窗口标题中是否包含限制文本

EnumWindows

AddressOf

EnumWindowsProc,

ByVal

0&

请使用winsock 建立连接,然后远程发送字符串 "your_path\your_exe_filenameexe", 另一端用 shell "your_path\your_exe_filenameexe" 即可执行。这个方法你要写两个软件,一个在主机运行,另一个在服务器端运行。以下是MSDN的内容

要创建一个 TCP 服务器,请按照以下步骤执行:

创建新的 Standard EXE 工程。

将缺省窗体的名称改为 frmServer。

将窗体的标题改为“TCP 服务器”。

在窗体中放入一个 Winsock 控件,并将它的名字改为 tcpServer。

在窗体上添加两个 TextBox 控件。将第一个命名为 txtSendData,第二个为 txtOutput。

为窗体添加如下的代码。

Private Sub Form_Load()

'将 LocalPort 属性设置为一个整数。

'然后调用 Listen 方法。

tcpServerLocalPort = 1001

tcpServerListen

frmClientShow '显示客户端的窗体。

End Sub

Private Sub tcpServer_ConnectionRequest _

(ByVal requestID As Long)

'检查控件的 State 属性是否为关闭的。

'如果不是,

'在接受新的连接之前先关闭此连接。

If tcpServerState <> sckClosed Then _

tcpServerClose

'接受具有 requestID 参数的

'连接。

tcpServerAccept requestID

End Sub

Private Sub txtSendData_Change()

'名为 txtSendData 的 TextBox 控件中

'包含了要发送的数据。当用户往文本框中

'键入数据时,使用 SendData 方法

'发送输入的字符串。

tcpServerSendData txtSendDataText

End Sub

Private Sub tcpServer_DataArrival _

(ByVal bytesTotal As Long)

'为进入的数据声明一个变量。

'调用 GetData 方法,并将数据赋予名为 txtOutput

'的 TextBox 的 Text 属性。

Dim strData As String

tcpServerGetData strData

txtOutputText = strData

End Sub

上面的步骤创建了一个简单的服务器应用程序。为了使它能够工作,还必须为它创建一个客户端的应用程序。

要创建 TCP 客户端,请按照以下步骤执行:

在工程中添加一个新的窗体,将其命名为 frmClient。

将窗体的标题改为“TCP Client”。

在窗体中添加一个 Winsock 控件,并将其命名为 tcpClient。

在 frmClient 中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个为 txtOutput。

在窗体上放一个 CommandButton 控件,并将其命名为 cmdConnect。

将 CommandButton 控件的标题改为 Connect。

在窗体中添加如下的代码。

重点 必须将 RemoteHost 属性值修改为您的计算机的名字。

Private Sub Form_Load()

'Winsock 控件的名字为 tcpClient。

'注意:要指定远程主机,可以使用

' IP 地址(例如:"12111111"),也可以使用

'计算机的“好听的名字”如下所示。

tcpClientRemoteHost = "RemoteComputerName"

tcpClientRemotePort = 1001

End Sub

Private Sub cmdConnect_Click()

'调用 Connect 方法,初始化连接。

tcpClientConnect

End Sub

Private Sub txtSendData_Change()

tcpClientSendData txtSendText

End Sub

Private Sub tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

tcpClientGetData strData

txtOutputText = strData

End Sub

VB实现打开另一程序可以调用API函数ShellExecute当然最简单的还是用Shell了如果程序后缀为EXE或是COM的话,可以直接用[shell

"完整文件路径/完整程序名",逗号后可以加参数设置运行方式如:shell

"d:\我的文档\桌面\1exe"]如果程序不是EXE或是COM的话,可以这样用:shell

"cmd

/c

start

d:\我的文档\桌面\123txt"调用CMD来运行程序

希望能对你有所帮助

“外接程序管理器”

是用于加载和移除集成开发环境 (IDE) 中的外接程序以及指定它们的加载行为的工具。

“外接程序管理器”

列出了在 Visual Studio 中注册的所有外接程序。

“外接程序管理器”对话框使用“外接程序管理器”

,可以:立即加载或卸载外接程序。

指定外接程序在环境启动时加载。

指定外接程序在通过命令行(如使用生成或创建 *** 作)启动环境时加载。

这个可能性不太大,因为VB对底层的 *** 作比较差,不过你可以这样,用钩子拦截系统的信息流,判断,当系统的焦点要离开测验程序时(不要相信VB自己的那个窗体事件,在失去焦点这个事件上,VB根本判断不出来),测验程序记录入成绩并退出,再加上说明,这样就会让人无法离开测验程序后

再回来

了。当然,记录的成绩要保管好,最好用不同的

加密算法

加密后存到文件和注册表中各一份,每次启动测验程序后都要读出以前的两份成绩并对比,以保证没有被修改。

这样虽然严格了点,但应该可以对付一般的情况了,不过很可能对付不了那些

游戏修改工具

软件,还有VB生成的程序也有可能被破解,所以只能对付一般情况。

关键就是“某些键盘按钮失灵,点击以后让它没反应”这一点上,要想实现这一点,你就必须去拦截Windows的信息流,不让他得到“按键被按下”这个事件,而VB里的事件处理只是针对VB生成的程序本身的,你在VB里再怎么设置,顶多只是让VB生成的程序不对“按键被按下”这个事件有什么反应,Windows还是会得到这个事件,实际上Windows会在VB生成的程序前得到这个事件,所以,还是得用钩子,至于你说用钩子会变慢,那是一定的,就看慢多少了。

首先Shell函数使你可以从VBA过程里直接打开任意程序。

比如打开记事本,Shell "notepadexe", vbMaximizedFocus

SendKeys语句允许你将许多的按键发送到活动应用程序窗口,你可以发送一个或组合键并且得到直接使用键盘的同样效果。

”自动控制“允许你访问和 *** 纵另一种应用程序的对象。你可以通过自动控制编写VBA过程,通过引用其它应用程序的对象、属性和方法来控制其它应用程序。

当和另外一个应用程序交流时,你可能需要更多的功能,而不只是激活它来发送按键。例如,

你可能需要在该应用程序里创建和 *** 纵对象,你可以在Excel电子表格力插入整个Word文档。因为Excel和Word都支持自动控制,所以,你可以在Excel里编写一个VBA过程在 *** 作Word

对象,比如文档或者段落。支持自动控制的应用程序称为自动控制服务器(Automation servers)或者自动控制对象(Automation objects)。能够 *** 作服务器对象的应用程序称为自动控制控件。有些应用程序只能是服务器或者控件,而其它的则既可以是服务器也可以是

控件。Microsoft Office 2000和2002都可以作为自动控制服务器和控件。自动控制控件可以是安装在你电脑上的各种ActiveX控件。

Visual Basic 语言参考

Shell 函数

运行一个可执行程序,并且如果该程序仍然在运行,则返回一个包含该程序的进程 ID 的整数。

Public Function Shell( _

ByVal Pathname As String, _

Optional ByVal Style As AppWinStyle = AppWinStyleMinimizedFocus, _

Optional ByVal Wait As Boolean = False, _

Optional ByVal Timeout As Integer = -1 _

) As Integer

参数

Pathname

必选项。字符串。要执行的程序名以及任何需要的参数和命令行开关。Pathname 还可以包括驱动器和目录路径或文件夹。

Style

可选项。AppWinStyle。从 AppWinStyle 枚举中选择的值,该枚举与要在其中运行程序的窗口样式相对应。如果省略 Style,则 Shell 使用 AppWinStyleMinimizedFocus,这将使程序以最小化启动并具有焦点。

Style 参数可以有以下设置之一:

枚举值 说明

AppWinStyleHide 隐藏窗口并为隐藏的窗口提供焦点。

AppWinStyleNormalFocus 为窗口提供焦点,并以最近的大小和位置显示窗口。

AppWinStyleMinimizedFocus 为窗口提供焦点,并以图标的形式显示窗口。

AppWinStyleMaximizedFocus 为窗口提供焦点,并以全屏方式显示窗口。

AppWinStyleNormalNoFocus 将窗口设置为最近的大小和位置。当前活动窗口保持焦点。

AppWinStyleMinimizedNoFocus 以图标的形式显示窗口。当前活动窗口保持焦点。

Wait

可选项。Boolean。指示 Shell 函数是否应等待程序完成的值。如果省略 Wait,则 Shell 使用 False。

Timeout

可选项。Integer。Wait 为 True 时等待完成的毫秒数。如果省略 Timeout,则 Shell 使用 -1,表示没有超时,Shell 直到程序完成时才返回。因此,如果省略 Timeout 或将它设置为 -1,则 Shell 可能永远不会将控制返回给程序。

异常/错误

异常类型 错误号 条件

ArgumentException 5 Style 不在 0 到 9(包含 0 和 9)范围内。

FileNotFoundException 53 Shell 无法启动指定的程序。

备注

Shell 函数的返回值取决于 Pathname 中指定的程序在 Shell 返回时是否仍在执行。如果将 Wait 设置为 True 并且程序在超时过期前结束,Shell 返回零。如果超时过期或者省略 Wait 或将它设置为 False,则 Shell 返回程序的进程 ID。进程 ID 是标识正在运行的程序的唯一数字。

如果 Shell 函数无法启动指定的程序,则出现 SystemIOFileNotFoundException 错误。例如,当试图从使用 SystemWindowsForms 的应用程序运行 16 位程序(如 commandcom)时,可能会发生这种情况。解决办法是运行将调用所需的 16 位程序的 32 位程序。如果是 commandcom,则可以将运行 cmdexe 作为另一种选择。

默认情况下,Shell 函数异步运行程序。这意味着用 Shell 函数启动的程序在 Shell 函数后面的语句执行前可能没有结束执行。如果想等待程序结束后再继续,请将 Wait 设置为 True。

整个路径和文件规范应该始终用引号引起来,如以下示例所示:

ID = Shell("""C:\Program Files\MyFileexe"" -a -q", , True, 100000)

字符串内每对相邻的双引号 ("") 被解释为字符串中的一个双引号字符。因此,前面的示例表示 Shell 函数的下列字符串:

"C:\Program Files\MyFileexe" -a -q

如果路径没有用引号引起来,Windows 就会在 C:\ 目录中查找名为 Programexe 的文件,而不是在 C:\Program Files 目录中查找 MyFileexe 文件。

安全说明 如果路径和文件规范没有用引号引起来,那么当文件名或路径节点包含空格时,就会出现安全风险。在上面的示例中,路径节点 \Program Files 包含一个空格。如果规范不在引号中,并且名为 Programexe 的程序(例如通过非法的破坏)安装在 C:\ 中,Windows 就会执行 Programexe 程序而不是 MyFileexe。

安全说明 Shell 函数需要非托管代码权限,这可能会对它在部分信任情况下的执行产生影响。有关更多信息,请参见 SecurityPermission 类和代码访问权限。

示例

本示例使用 Shell 函数运行一个用户指定的应用程序。通过将 AppWinStyleNormalFocus 指定为第二个参数,以正常大小打开应用程序并为它提供焦点。

Dim ProcID As Integer

' Run Calculator

ProcID = Shell("C:\Windows\system32\calcexe", AppWinStyleNormalFocus)

' The preceding path is for Windows XP;

' The Windows 2000 path is C:\WINNT\system32\calcexe

以上就是关于VB 中如何实现关闭其他程序打开的窗口全部的内容,包括:VB 中如何实现关闭其他程序打开的窗口、怎么用VB实现远程桌面并运行指定程序、vb打开另一个程序的代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9476074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存