我正在制作一个需要 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,但我更多地将其用作学习目的,而不是制作工作工具。