有两个方法可行,一是用socket,但是有点太大动干戈了
另一种很简单的方法是剪贴板,迅雷有个功能是监视剪贴板,就是比如我写下一个链接,然后选中,复制的话迅雷就会d出下载。其实实现起来很简单,在mfc中有个OnTimer,在这里加入监控剪贴板代码的话就会一直监控。具体代码如下
新建一个工程,在默认对话框类中加入一个editbox,添加control变量c_show,然后在OnInitDialog中加入SetTimer(1,1,NULL)开始计时器
添加OnTimer消息,代码
void
CMy1Dlg::OnTimer(UINT_PTR
nIDEvent)
{
//
TODO:
在此添加消息处理程序代码和/或调用默认值
CString
s
HANDLE
hClip
if(OpenClipboard())
//打开剪贴板
{
hClip=GetClipboardData(CF_TEXT)//取出内存句柄
char
*buff
buff=(char
*)GlobalLock(hClip)//锁定内存,取出数据
s=buff//转换成CString
GlobalUnlock(hClip)//解锁
CloseClipboard()//关闭剪贴板
//这里要加入一定的判断条件了,迅雷只有监控到是链接才有反应,这里我们也可以加自己的条件,你的情况有两个,比如可以这样发现包含mystr:时就是第一种情况,第二种情况就是myip:
if(s.Find(_T("myip:"))>=0)
c_show.SetWindowTextW(s)//做出各种反应
}
CDialog::OnTimer(nIDEvent)
}
这就是接收程序了,发送程序比如作为按钮消息,按钮代码如下
CString
s
s=_T("myip:192.168.1.1")//要发送的消息,记得加上面说的特定的标志,两者要一致
HGLOBAL
hClip
if(OpenClipboard())
{
EmptyClipboard()
hClip=GlobalAlloc(GMEM_MOVEABLE,s.GetLength()+1)
char
*buff
buff=(char*)GlobalLock(hClip)
strcpy(buff,s)//如果你用了Unicode这里会报错,改成strcpy(buff,cs2ca(s))
cs2ca函数见最后
GlobalUnlock(hClip)
SetClipboardData(CF_TEXT,hClip)
CloseClipboard()
}
char
*
cs2ca(CString
str)
{
char
*ptr
#ifdef
_UNICODE
LONG
len
len
=
WideCharToMultiByte(CP_ACP,
0,
str,
-1,
NULL,
0,
NULL,
NULL)
ptr
=
new
char
[len+1]
memset(ptr,0,len
+
1)
WideCharToMultiByte(CP_ACP,
0,
str,
-1,
ptr,
len
+
1,
NULL,
NULL)
#else
ptr
=
new
char
[str.GetAllocLength()+1]
sprintf(ptr,_T("%s"),str)
#endif
return
ptr
}
直接调用ShellExecute即可:
ShellExecute(NULL,TEXT("OPEN"),/*在此输入需要打开的文件名,例如"abc.txt"*/,NULL,NULL,SW_SHOWNORMAL)欢迎分享,转载请注明来源:内存溢出
评论列表(0条)