获取资源管理器路径复制到剪贴板

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 }

 

 

posted @ 2013-05-21 22:06  vitah  阅读(576)  评论(0编辑  收藏  举报