在现有的资源管理器的窗口上打开里面的文件夹

这个方法是通过寻找本地资源管理器的窗口句柄,再去找地址栏编辑框的句柄,然后地址栏末端加上文件夹名字,最后发送回车消息,完成操作。似乎有几个步骤可以省略,还需要回头完善一下,例如组合框的下拉会被点击,这个操作不知道能不能省略或者让点击事件不那么明显,我禁用了以后就不能执行了,感觉还可以优化一下。因为那一段代码抄的一位大佬的代码,所以没去细细琢磨下每个类和消息产生的作用,但整体思路是正确的。

#include "pch.h"
#include <windows.h>
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>
#pragma  warning (disable:4996) 
void TcharToChar(const TCHAR * tchar, char * _char)
{
    int iLength;
    //获取字节长度   
    iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);
    //将tchar值赋给_char    
    WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, NULL, NULL);
}
void CharToTchar(const char * _char, TCHAR * tchar)
{
    int iLength;
    iLength = MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, NULL, 0);
    MultiByteToWideChar(CP_ACP, 0, _char, strlen(_char) + 1, tchar, iLength);
}
int main()
{
    TCHAR str[1024] = TEXT("Hello World");
    HWND hwnd = NULL;
    HWND hToolbat;


    hwnd = FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);
    hwnd = FindWindowEx(hwnd, NULL, TEXT("WorkerW"), NULL);
    hwnd = FindWindowEx(hwnd, NULL, TEXT("ReBarWindow32"), NULL);
    hwnd = FindWindowEx(hwnd, NULL, TEXT("Address Band Root"), NULL);
    hwnd = FindWindowEx(hwnd, NULL, TEXT("msctls_progress32"), NULL);
    hToolbat = FindWindowEx(hwnd, NULL, TEXT("ToolbarWindow32"), NULL);
    SendMessage(hToolbat, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(0, 0));
    SendMessage(hToolbat, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(0, 0));
    SendMessage(hToolbat, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(0, 0));
    SendMessage(hToolbat, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(0, 0));


    hwnd = FindWindowEx(hwnd, NULL, TEXT("ComboBoxEx32"), NULL);
    hwnd = FindWindowEx(hwnd, NULL, TEXT("ComboBox"), NULL);
    hwnd = FindWindowEx(hwnd, NULL, TEXT("Edit"), NULL);

    if (hwnd == NULL)
    {
        wprintf(L"%s\n", L"error");
        return -1;
    }
    SendMessage(hwnd, WM_GETTEXT, 1024, (LPARAM)str);
    char b[1024];
    TcharToChar(str,b);
    strcat(b, "\\PanData");
    CharToTchar(b,str);
    //MessageBox(NULL, str, TEXT("Caption"), 0);
    
    SendMessage(hwnd, EM_SETSEL, 0, lstrlen(str));
    SendMessage(hwnd, EM_REPLACESEL, true, (LPARAM)str);
    SendMessage(hwnd, WM_KEYDOWN, VK_RETURN, NULL);
    //SetWindowText(hwnd, str);

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/suxia/p/11315737.html