我从谷歌找到了这个网站,我认为这里有人帮助解决编码问题。
我正在为应用程序创建一个badword过滤器,但我遇到了问题。 目前我正在从应用程序入口点创建一个线程,线程流程如下:
while(true)
{
if (!OpenClipboard(NULL))
ExitProcess(0); //TODO: Try opening clipboard again.
h = GetClipboardData(CF_TEXT); //h is HANDLE.
std::string CB_Data = (char*)h;
if(CB_Data.size() != NULL) //An attempt to check if it's not empty
{
if ( std::regex_search(CB_Data.c_str(), BADWORD_FILTER))
{
try
{
EmptyClipboard();
SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern."
}
catch(...)
{
//TODO: Error logging
}
}
else if ( std::regex_search(CB_Data.c_str(), BADWORD_FILTER2))
{
try
{
EmptyClipboard();
SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern."
}
catch(...)
{
//TODO: Error logging
}
EmptyClipboard();
SetClipboardData(CF_TEXT, INFORMATION); //INFORMATION is converted to char from HANDLE. INFORMATION = "Bad word filter detected forbidden words pattern."
}
}
CloseClipboard();
Sleep(1000); //Check every 1 second for the forbidden words.
}
所以这个应用程序监视来自禁止词的剪贴板。但是,大多数时候我遇到了“表达式:无效的null指向”-error,而且我不熟悉Visual Studio调试器。我试过了,但显然没有成功。
以下是错误:http://i.stack.imgur.com/wACnA.png
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
您收到错误,因为GetClipboardData()
未返回const char*
指针而std::string
构造函数尝试将您的参数读为const char*
。
正如您在问题中所述,GetClipboardData()
会返回HANDLE
。有关如何使用此功能的正确示例,请参阅this主题。
其他有用的提示:
CB_Data.size()
是无符号整数值(字符串的长度),而不是指针。不要将它与NULL
进行比较!