リソースマネージャのパスを取得してクリップボードにコピーします.

12169 ワード

1、コンピュータにCloverが設置されていますので、リソースマネージャは一般のコンピュータとは違います.Clover:http://cn.ejie.me/ しかし、考えは似ているはずです.
2、Spy+:Win 32(最新バージョンはWin 64をサポートしています)に基づくユーティリティツールであり、システムのプロセス、スレッド、ウィンドウおよびウィンドウメッセージのグラフィックビューを提供します.
 
使用する関数の紹介:
EnumWindows:すべての画面のトップウィンドウを列挙します.
EnumChildWindows:親ウィンドウを列挙するすべてのサブウィンドウ
上記の2つの関数があります.まずリソースマネージャのウィンドウを見つけて、サブウィンドウアドレスバーに対応するウィンドウを見つけてアドレス欄のアドレスを取得します.
コード:
 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 }