可以用OpenClipboard函数打开剪贴板,再用SetClipboardDate函数把数据放在具有指定的剪贴板格式的剪贴板上,最后要记得用CloseClipboard关闭剪贴板呀!
另外要实时监控剪贴板只要用一个记时器就好了,把原来剪贴板中的内容写如一个临时文件中,再把读出新的和原来的进行比较不就好了吗?其实不用记时器也可以,还可以用触发消息写!!
另外要实时监控剪贴板只要用一个记时器就好了,把原来剪贴板中的内容写如一个临时文件中,再把读出新的和原来的进行比较不就好了吗?其实不用记时器也可以,还可以用触发消息写!!
给出总分:10
您给的分数总和不是20。, 返回上一页。这是怎么回事?
我在一个程序中找到下面代码,如果想把它移植到自己的程序里
(目的是将剪贴板内容写到指定RichEdit)
该做什么改动?我对下面代码中
hClipData = GetClipboardData(CF_TEXT);和GlobalLock(hClipData);存在很大疑问。 case ID_SPEAK_FROMCLIPBOARD://接受COMMAND消息
{
PTSTR pszClipboard;
HANDLE hClipData;
BOOL fRet; fRet = OpenClipboard(NULL);
if (!fRet) {
//打开剪贴板失败
return 0;
} if (!(hClipData = GetClipboardData(CF_TEXT)))//CF_TEXT是什么意思?
{
// 设置剪贴板数据失败
return 0;
} if (!(pszClipboard = (PTSTR)GlobalLock(hClipData)))//这是判断什么的?
{
CloseClipboard();
return 0;
} GlobalUnlock(hClipData);
CloseClipboard();
break;
}
}
break;
最后同样祝你新年快乐!!!
{
PTSTR pszClipboard;
HANDLE hClipData;
BOOL fRet; fRet = OpenClipboard(NULL);
if (!fRet)
{
//打开剪贴板失败
//return 0;
} if (!(hClipData = GetClipboardData(CF_TEXT)))//把剪贴板内容赋值给hClipData
{
//剪贴板为空
//return 0;
} if (!(pszClipboard = (PTSTR)GlobalLock(hClipData)))//把剪贴板内容赋值给pszClipboard
{
CloseClipboard();
//return 0;
}SetDlgItemText(m_hWnd,IDE_EDITBOX,pszClipboard);//把剪贴板内容写到RICHEDIT框
GlobalUnlock(hClipData);
CloseClipboard();
HandleSpeak();//朗读RICH编辑框中中文文本,就是剪贴板内容
TTSAppStatusMessage( m_hWnd, _T("正在朗读剪贴板\r\n") );//提示用户正在朗读
}
break;
我想不通clipboard owner 是什么东西。我常识了WM_COPY消息,也不行,根本没有响应。我的方法如下:(八成错了吧?)
我在主窗口函数DlgProcMain(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)中等消息// Call the appropriate function to handle the messages switch(uMsg)
{
//监控剪贴板
case WM_COPY:
MessageBox( NULL, _T("你已经成功的检测到了剪贴板消息!"), _T("成功"), MB_OK );
break;
//其他代码·········
}一点效果都没有,
所以软件可以自动解析<html>的“<”标记,跳过超文本,直接朗读网页内容···
(暂时不能识别JAVASCRIPT,这个解决起来倒是很轻松···)
哦?你在OICQ上,我来了!
char fname[100];
void LogFile(char *p)//p是字符串指针,为网页文本内容
{
FILE *fp=fopen(fname,"a+");//采用追加方式带开文件
fprintf(fp,"%s\n",p);
fclose(fp);
}
BOOL HttpClient(void)//核心函数
{
WSADATA ws; //WINSOCK数据
SOCKET s; //套接字
struct sockaddr_in addr;
int iResult;
long lResult;
char strSubAddr[100], strBuffer[100];//地址字符数组和文件内容
lResult = WSAStartup(0x0101,&ws);
s = socket(AF_INET,SOCK_STREAM,0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr("168.160.224.185"); // 计算机世界日报
iResult=connect(s,(struct sockaddr *)&addr, sizeof(addr));
if(SOCKET_ERROR == iResult)
{
// 连接失败
WSACleanup();
return FALSE;
}
else {
// 连接成功
strcpy(strSubAddr, "GET /99/ \r\n");
strcpy(fname, "index.html");
iResult = send(s, strSubAddr,strlen(strSubAddr),0);
// 下载文件
do {
strset(strBuffer,' ');
iResult = recv(s,strBuffer,sizeof(strBuffer),0);
LogFile(strBuffer);
} while( iResult !=0 );
}
WSACleanup();
return TRUE;
}编译成功,LINK过程出现错误,如下--------------------Configuration: TTSApp - Win32 Debug--------------------
Compiling resources...
Compiling...
globals.cpp
Skipping... (no relevant changes detected)
childwin.cpp
dlgmain.cpp
winmain.cpp
Linking...
dlgmain.obj : error LNK2001: unresolved external symbol __imp__recv@16
dlgmain.obj : error LNK2001: unresolved external symbol __imp__send@16
dlgmain.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
dlgmain.obj : error LNK2001: unresolved external symbol __imp__connect@12
dlgmain.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
dlgmain.obj : error LNK2001: unresolved external symbol __imp__htons@4
dlgmain.obj : error LNK2001: unresolved external symbol __imp__socket@12
dlgmain.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
Debug/ttsapp.exe : fatal error LNK1120: 8 unresolved externals
Error executing link.exe.ttsapp.exe - 9 error(s), 0 warning(s)不知道如何解决!
// 下载文件
do {
strset(strBuffer,' ');
iResult = recv(s,strBuffer,sizeof(strBuffer),0);SetDlgItemText( m_hWnd, IDE_EDITBOX, strBuffer);//此处是后添加的代码
//error C2065: 'm_hWnd' : undeclared identifier
//这样“m_hWnd”不行,能不能用postmessage传递消息? LogFile(strBuffer);
我需要在该WINSOCK对话框里加一个edit框用来写URL
URL一般为http://***.***.***.***/dir/somefile.htm(或者html\xmp\asp\cgi\pl\php\php3等等)因为winsock是先连接***.***.***.***站点通过80端口
然后send(SOCKET s, "GET /dir/",strlen("GET /dir/somefile.htm"),0);
打开目录
之后再recv(SOCKET s,strBuffer,sizeof(strBuffer),0);
····我必须把用户输入到edit框里的char* URL分解成几部分“http://”//用if(前7个字符=“http://")则URL+=7;IP //可以通过目录哦,OICQ上见到你了,我来拉!
用ReBar可以么?把ReBar建立在对话框程序了是不是有些小题大做?
我找到ReBar的API建立代码
HWND WINAPI CreateRebar(HWND hwndOwner)
{
REBARINFO rbi;
REBARBANDINFO rbBand;
RECT rc;
HWND hwndCB, hwndTB, hwndRB;
DWORD dwBtnSize;
INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_COOL_CLASSES¦ICC_BAR_CLASSES;
InitCommonControlsEx(&icex); hwndRB = CreateWindowEx(WS_EX_TOOLWINDOW,
REBARCLASSNAME,
NULL,
WS_CHILD¦WS_VISIBLE¦WS_CLIPSIBLINGS¦
WS_CLIPCHILDREN¦RBS_VARHEIGHT¦CCS_NODIVIDER,
0,0,0,0,
hwndOwner,
NULL,
g_hinst,
NULL);
if(!hwndRB)
return NULL; // Initialize and send the REBARINFO structure.
rbi.cbSize = sizeof(REBARINFO); // Required when using this struct.
rbi.fMask = 0;
rbi.himl = (HIMAGELIST)NULL;
if(!SendMessage(hwndRB, RB_SETBARINFO, 0, (LPARAM)&rbi))
return NULL; // Initialize structure members that both bands will share.
rbBand.cbSize = sizeof(REBARBANDINFO); // Required
rbBand.fMask = RBBIM_COLORS ¦ RBBIM_TEXT ¦ RBBIM_BACKGROUND ¦
RBBIM_STYLE ¦ RBBIM_CHILD ¦ RBBIM_CHILDSIZE ¦
RBBIM_SIZE;
rbBand.fStyle = RBBS_CHILDEDGE ¦ RBBS_FIXEDBMP;
rbBand.hbmBack= LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_BACKGRND));
// Create the combo box control to be added.
hwndCB = CreateComboBox(hwndRB);
// Set values unique to the band with the combo box.
GetWindowRect(hwndCB, &rc);
rbBand.lpText = "Combo Box";
rbBand.hwndChild = hwndCB;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = rc.bottom - rc.top;
rbBand.cx = 200; // Add the band that has the combo box.
SendMessage(hwndRB, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand); // Create the toolbar control to be added.
hwndTB = CreateToolbar(hwndOwner, dwStyle); // Get the height of the toolbar.
dwBtnSize = SendMessage(hwndTB, TB_GETBUTTONSIZE, 0,0); // Set values unique to the band with the toolbar.
rbBand.lpText = "Tool Bar";
rbBand.hwndChild = hwndTB;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = HIWORD(dwBtnSize);
rbBand.cx = 250; // Add the band that has the toolbar.
SendMessage(hwndRB, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand); return (hwndRB);
}是不是可以移植到程序中?
我刚才用SPY++查了剪贴板消息,在剪贴板执行了“复制”之后的消息是WM_DESTROYCLIPBOARD我现在尝试获取这个消息,我想到的问题是,剪贴板消息能公用么?
switch(uMsg)
{ case WM_DESTROYCLIPBOARD:
//自动朗读剪贴板内容 return TRUE;//下面省略}为什么收不到消息?
是不是跟进程有关系?
spy++是怎么工作的?
是不是要用HOOK?
毕竟分代表不了什么,我再问你一下,我想SetClipboardViewer后通过按钮控制让程序停止监控剪贴板,那该用什么函数?
SetClipboardViewer(其他窗口)?