Skype ウィンドウからの情報を必要とするアプリケーションを作成しています。メイン ウィンドウと子ウィンドウが見つかりました。WM_GETTEXT を使用し、メッセージ ボックスにバッファを表示します。何度か連絡先を変えても動かないようです。数秒後にこれが壊れる理由を誰か推測できますか?
case 2000:
//Make options window here
int len;
char* buffer;
HWND hWnd; //Main Window
HWND chat; //Tconversation form, Caption is the contact's name.
hWnd = FindWindow(L"tSkMainForm", NULL); //tSkMainForm is SKYPE
chat = FindWindowEx(hWnd, NULL, L"TConversationForm", NULL); //GetWindow(hWnd,GW_CHILD);
if (IsWindowVisible(chat)) {
len = SendMessage(chat, WM_GETTEXTLENGTH, 0, 0);
buffer = new char[len];
SendMessageW(chat, WM_GETTEXT, (WPARAM) len + 1, (LPARAM) buffer);
MessageBox(HWND_DESKTOP, (LPCWSTR) buffer, L"Testing", MB_OK);
} else MessageBox(HWND_DESKTOP, L"We cannot find the window.", L"About Testing", MB_OK);
break;
イベントのタイムラインを提供するために、ここで何が起こるかを示します。
DLL を Skype に挿入すると、メニューが作成され、すべてが機能します。新しく作成したボタン (ID 2000) を押すと、連絡先の名前を取得したいと考えています。Spy++ は、「TConversationForm」のキャプションが連絡先の名前であることを教えてくれます。これは最初の数回の連絡先では機能しますが、その後 Skype がクラッシュします。
私は Skype API を使用できることを知っていますが、実用的なツールを作成するというよりも、学習目的としてこれを使用しています。