啊哈磊_编程从这里起步

标题: c语言剪切板操作代码,在啊哈不能编译哪里需要修改? [打印本页]

作者: ttszuo    时间: 2015-7-25 09:29
标题: c语言剪切板操作代码,在啊哈不能编译哪里需要修改?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

int main(int argc, char * argv[])
{
HGLOBAL hMemory;
LPTSTR lpMemory;
char * content = "蓝雨麦郎版权所有";   // 待写入数据
int contentSize = strlen(content) + 1;

if(!OpenClipboard(NULL))    // 打开剪切板,打开后,其他进程无法访问
{
  puts("剪切板打开失败");
  return 1;
}

if(!EmptyClipboard())       // 清空剪切板,写入之前,必须先清空剪切板
{
  puts("清空剪切板失败");
  CloseClipboard();
  return 1;
}

if((hMemory = GlobalAlloc(GMEM_MOVEABLE, contentSize)) == NULL)    // 对剪切板分配内存
{
  puts("内存赋值错误!!!");
  CloseClipboard();
  return 1;
}

if((lpMemory = (LPTSTR)GlobalLock(hMemory)) == NULL)             // 将内存区域锁定
{
  puts("锁定内存错误!!!");
  CloseClipboard();
  return 1;
}

memcpy_s(lpMemory, contentSize, content, contentSize);   // 将数据复制进入内存区域

GlobalUnlock(hMemory);                   // 解除内存锁定

if(SetClipboardData(CF_TEXT, hMemory) == NULL)
{
  puts("设置剪切板数据失败!!!");
  CloseClipboard();
  return 1;
}

system("pause");
return 0;
}



作者: 981013    时间: 2015-7-25 09:29
本帖最后由 981013 于 2015-7-25 14:43 编辑

啊哈C用的这个GCC还不支持memcpy_s,可以用memcpy代替,注意这两个函数的参数列表也是不同的。给出修改后的代码:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

int main(int argc, char * argv[])
{
HGLOBAL hMemory;
LPTSTR lpMemory;
char * content = "蓝雨麦郎版权所有";   // 待写入数据
int contentSize = strlen(content) + 1;

if(!OpenClipboard(NULL))    // 打开剪切板,打开后,其他进程无法访问
{
  puts("剪切板打开失败");
  return 1;
}

if(!EmptyClipboard())       // 清空剪切板,写入之前,必须先清空剪切板
{
  puts("清空剪切板失败");
  CloseClipboard();
  return 1;
}

if((hMemory = GlobalAlloc(GMEM_MOVEABLE, contentSize)) == NULL)    // 对剪切板分配内存
{
  puts("内存赋值错误!!!");
  CloseClipboard();
  return 1;
}

if((lpMemory = (LPTSTR)GlobalLock(hMemory)) == NULL)             // 将内存区域锁定
{
  puts("锁定内存错误!!!");
  CloseClipboard();
  return 1;
}

memcpy(lpMemory, content, contentSize);   // 将数据复制进入内存区域

GlobalUnlock(hMemory);                   // 解除内存锁定

if(SetClipboardData(CF_TEXT, hMemory) == NULL)
{
  puts("设置剪切板数据失败!!!");
  CloseClipboard();
  return 1;
}

system("pause");
return 0;
}[/mw_shl_code]



作者: ttszuo    时间: 2015-7-25 15:41
谢了,可以免费给我一个把变量写入到剪贴板和把剪贴板文字写入到变量的代码吗
作者: 981013    时间: 2015-7-25 19:34
ttszuo 发表于 2015-7-25 15:41
谢了,可以免费给我一个把变量写入到剪贴板和把剪贴板文字写入到变量的代码吗

WinAPI没有仔细研究过,所以很抱歉不行
作者: 981013    时间: 2015-7-25 19:35
ttszuo 发表于 2015-7-25 15:41
谢了,可以免费给我一个把变量写入到剪贴板和把剪贴板文字写入到变量的代码吗

WinAPI没有仔细研究过,所以很抱歉不行




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2