zoukankan      html  css  js  c++  java
  • 获取资源管理器路径复制到剪贴板

    1、电脑上安装了Clover,故资源管理器与一般电脑上不一样。Clover:http://cn.ejie.me/ 但是,想法应该是类似的。

    2、Spy++:是一个基于 Win32(最新版本支持Win64) 的实用工具,它提供系统的进程、线程、窗口和窗口消息的图形视图。

    用到的函数介绍:

    EnumWindows:枚举所有屏幕上的顶层窗口

    EnumChildWindows:枚举一个父窗口的所有子窗口

      有了上述两个函数,可以先找到资源管理器的窗口,然后再找到子窗口地址栏所对应的那个窗口获取地址栏内地址。

    代码:

     1 /*
     2     Test_5 - 无界面,获取当前目录,复制到剪贴板
     3                                 ——20130516
     4 */
     5 
     6 #include <windows.h>
     7 
     8 #define MAXSIZE 100
     9 
    10 BOOL CALLBACK lpEnumFunc(HWND hwnd, LPARAM lParam);      //枚举窗口回调函数
    11 BOOL CALLBACK lpEnumChildFunc(HWND hwnd,LPARAM lParam);  //枚举子窗口回调函数
    12 void CopyToClipboard(char *cd,HWND hwnd);                //复制地址到剪贴板
    13 
    14 char *name=NULL;  //路径名保存数组
    15 
    16 int main()
    17 {
    18     while (1)
    19     {
    20         EnumWindows(lpEnumFunc,0);
    21         Sleep(1000);
    22     }
    23 
    24     return 0;
    25 }
    26 
    27 
    28 void CopyToClipboard(char *str,HWND hwnd)
    29 {
    30     GLOBALHANDLE hGlobal;
    31     PTSTR pGlobal;
    32     int length=strlen(str);
    33 
    34     hGlobal=GlobalAlloc(GHND|GMEM_SHARE,length+1);
    35     pGlobal=(char *)GlobalLock(hGlobal);
    36     
    37     for(int i=0;i<length;i++)
    38         *pGlobal++=*str++;
    39     
    40     GlobalUnlock(hGlobal);
    41     OpenClipboard(hwnd);
    42     EmptyClipboard();
    43     SetClipboardData(CF_TEXT,hGlobal);
    44     CloseClipboard();
    45     free(name);
    46 }
    47 
    48 BOOL CALLBACK lpEnumChildFunc(HWND hwnd,LPARAM lParam)
    49 {
    50     char childname[MAXSIZE]={0};      //存储子窗口的窗口名,即地址字符串
    51     char childclass[MAXSIZE]={0};      //保存子窗口的类名
    52     char child[]="ToolbarWindow32";   //用Spy++提前获得对应窗口的类名
    53     int length;   //地址字符串长度
    54     int i;
    55     
    56     GetWindowText(hwnd,childname,MAXSIZE);     //根据子窗口句柄获得窗口名
    57     GetClassName(hwnd,childclass,MAXSIZE);     //获得子窗口类
    58     
    59     if( strcmp(childname,"")!=0  && strcmp(childclass,child)==0 ){
    60         
    61         length=strlen(childname);
    62         name=(char *)malloc(length-5);
    63         
    64         //去除窗口名前的“地址:”子串
    65         for(i=6;i<length;i++)
    66             *(name+i-6)=childname[i];
    67         *(name+i-6)='\0';
    68         
    69         //调用函数——复制路径到剪贴板
    70         CopyToClipboard(name,hwnd);
    71         return false;
    72     }
    73     
    74     return 1;
    75 }
    76 
    77 
    78 
    79 BOOL CALLBACK lpEnumFunc(HWND wnd, LPARAM lParam)
    80 {
    81     char WindowName[MAXSIZE]={0};
    82     char windowclass[MAXSIZE]={0};
    83 
    84     char cloverclass[]="Clover_WidgetWin_0";   //用Spy++提前获取窗口类
    85     
    86     if (IsWindowVisible(wnd)){                     
    87         GetWindowText(wnd,WindowName,MAXSIZE);     //根据窗口句柄获得窗口名
    88         GetClassName(wnd,windowclass,MAXSIZE);       //获得窗口类
    89         
    90         if(strcmp(cloverclass,windowclass)==0){
    91             EnumChildWindows(wnd,lpEnumChildFunc,0);
    92             return false;
    93         }
    94     }
    95     
    96     return 1;
    97 }
  • 相关阅读:
    GIT的使用
    C# DataTable.Select() 筛选数据
    Oracle数据库使用游标查询结果集所有数据
    清除PLSQL Developer访问数据库连接的历史记录
    C#关于DateTime得到的当前时间的格式和用法
    C++中string的用法
    ACM讲课之字符串
    第二场周赛(递归递推个人Rank赛)——题解
    ACM团队招新赛题解
    线段树详解
  • 原文地址:https://www.cnblogs.com/vitah/p/3091719.html
Copyright © 2011-2022 走看看