Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 有人能解释一下这到底在做什么吗?_Vba_Excel_User32 - Fatal编程技术网

Vba 有人能解释一下这到底在做什么吗?

Vba 有人能解释一下这到底在做什么吗?,vba,excel,user32,Vba,Excel,User32,我一直在寻找一种使用vba关闭windows资源管理器的方法,我发现了一些有效的方法。然而,我实际上不知道它实际上在做什么,或者它的任何意义。有人能解释一下下面发生了什么吗 Private Const CLOSE_WIN = &H10 Dim Hwnd As Long Private Declare Function apiFindWindow _ Lib "user32" Alias "FindWindowA" _ (ByVal lpClassname As Stri

我一直在寻找一种使用vba关闭windows资源管理器的方法,我发现了一些有效的方法。然而,我实际上不知道它实际上在做什么,或者它的任何意义。有人能解释一下下面发生了什么吗

Private Const CLOSE_WIN = &H10
Dim Hwnd As Long

Private Declare Function apiFindWindow _
    Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassname As String, _
    ByVal lpWindowName As String) _
    As Long

Private Declare Function apiPostMessage _
    Lib "user32" Alias "PostMessageA" _
    (ByVal Hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) _
    As Long

    Hwnd = apiFindWindow("CabinetWClass", vbNullString)

    Dim retval As Long
    If (Hwnd) Then
       retval = apiPostMessage(Hwnd, CLOSE_WIN, 0, ByVal 0&)
    End If

谢谢

我认为这里的关键是
CabinetWClass
是Windows资源管理器的类名(它最初被称为文件柜,而不是资源管理器)。您正在与Windows内置API进行交互。找到具有该类名的窗口,然后将其传递给该
apiPostMessage
,并告诉它关闭所找到的特定窗口的
WIN
&H10
)。最后5行是这里真正的代码。上面的所有内容都只是声明与此处所需的windows API交互的函数和常量。我假设上面的代码段缺少从
Hwnd=apiFindWindow开始的所有内容的封闭函数签名(…
结束,如果
?就目前而言,它不会编译。这种骗局正是像
CabinetWClass
这样的遗留名称继续存在的原因--以确保像这样构思不周的代码继续工作..阅读文档,可能不会那么混乱。我还想看看。它使用的是Win32 API函数要找到一个
CabinetWClass
窗口,然后向该窗口发送一条
&H10
窗口消息,将其关闭-如果您不明白这意味着什么,请在顶部添加一条注释,上面写着
''这里是龙
,然后继续;在阅读了有关Win32 API函数和window me的机制后,再返回该窗口一个太宽泛的主题,在这里用一个像样的答案无法涵盖。