SyntaxHighlighter

StackEdit CSS

2012年12月22日土曜日

Windows7の付箋のデータを取得

普段使ってるWindows7の付箋のデータをバックアップしたくなったので、Win32APIを使って組んでみた。


#include<iostream>
#include<windows.h>

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lp){
    TCHAR name[1024];
    GetClassName(hwnd, name, 1024);
    if(lstrcmp(name, "Sticky_Notes_Note_Window") == 0){
        HWND child;
        child = FindWindowEx(hwnd, NULL, "DirectUIHWND", NULL);
        if(!child) return TRUE;
        child = FindWindowEx(child, NULL, "CtrlNotifySink", NULL);
        if(!child) return TRUE;
        child = FindWindowEx(child, NULL, NULL, NULL);
        if(!child) return TRUE;
        
        TCHAR text[1024];
        SendMessage(child, WM_GETTEXT, 1024, (LPARAM)text);
        std::cout << text << std::endl << std::endl;
    }
    return TRUE;
}

int main(){
    EnumWindows(EnumWindowsProc, 0);
    
    return 0;
}

 Spy++を使って付箋を見たら、"Sticky_Notes_Note_Window" - "DirectUIHWND" - "CtrlNotifySink" - ""のクラス名の順に子になっていた。一番下に、目的のデータがあるということが分かった。 
 目的のデータがあるハンドルを取得して、よしデータを取得しようと思って、17行目に
GetWindowText(child, text, 1024);
と書いたらtextには何も入っていなかった。MSDNをよく見たら、
他のアプリケーションのエディットコントロールのテキストをこの関数で取得することはできません。
とあった。知らなかったorz.. 下にあった、
他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を呼び出すのではなく、直接 WM_GETTEXT メッセージを送ります。
の通りにしたら動いた。 やったね!
参考
MSDN GetWindowText

0 件のコメント:

コメントを投稿