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

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 }

 

 

你可能感兴趣的:(管理)