首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

GetClipboardData(IN UINT uFormat) 获取剪切板内容失败解决思路

2012-05-20 
GetClipboardData(IN UINT uFormat) 获取剪切板内容失败需要在文档粘贴数据之时根据当前程序的类型控制粘

GetClipboardData(IN UINT uFormat) 获取剪切板内容失败
需要在文档粘贴数据之时根据当前程序的类型控制粘的内容,但是现在在返回剪切板内容时出现异常上,无法返回内容,望高手指点。。
代码如下:

//#include "detours.h"
#include "NtHookEngine.h"
HANDLE WINAPI Real_GetClipboardData(UINT uFormat);

HANDLE (WINAPI *pOriGetClipboardData)(UINT uFormat);
  



char* UnsignedShortToCharp(unsigned short *strU)

UINT nStrULength=WideCharToMultiByte(CP_ACP,0,(LPCWSTR)strU,-1,NULL,NULL,NULL,NULL);
LPSTR lpStr;
lpStr=(LPSTR) malloc(nStrULength); 
WideCharToMultiByte(CP_ACP,0,(LPCWSTR)strU,-1,lpStr,nStrULength,NULL,NULL);
return lpStr;
}

HANDLE __stdcall Real_GetClipboardData(IN UINT uFormat)
{

int result = GetState(0);
if(result == 20)//如果粘贴目标程序需要加密{
  return NULL;
  }

   
HANDLE hMem = pOriGetClipboardData(uFormat); //执行至此程序死机

return (hMem);

}


BOOL ProcessAttach() 


//hook剪切板
HookFunction((ULONG_PTR) GetProcAddress(LoadLibrary(_T("USER32.dll")),
"GetClipboardData"), 
(ULONG_PTR) &Real_GetClipboardData);
pOriGetClipboardData = (HANDLE (WINAPI *)(UINT uFormat))
GetOriginalFunction((ULONG_PTR) Real_GetClipboardData);//保存原始剪切板

return TRUE;


BOOL ProcessDetach() 

if (GetOriginalFunction == NULL) {
return(FALSE);
}
UnhookFunction((ULONG_PTR) GetProcAddress(LoadLibrary(_T("USER32.dll")), 
"GetClipboardData"));
return TRUE; 



[解决办法]
是不是要先 OpenClipboard 一下
[解决办法]
感觉是在hookapi
[解决办法]

探讨

是不是要先 OpenClipboard 一下

热点排行