某电商项目选品时繁琐的ID复制拼接链接解决方法

  • 由于近期电商项目在选品过程中需要复制某平台上的商品ID再粘贴到表格拼接链接后上架的操作甚是繁琐、复杂,便决定自行编写一款软件来代替这烦人的流程。

     


  • 商品ID
    商品ID

选品过程中需要先复制该平台的某个商品ID

点击复制按钮

 

鼠标移动到商品ID处会显示”复制“按钮,点击复制。

商品ID复制成功

提示商品ID复制成功后内容将存储在剪贴板里。 

拼接链接

 

然后拼接链接以便用于软件后续的商品上架之用。


至此繁琐的操作问题出现了,如果每天需要选品达上百个,那一直的复制、粘贴、拼接,那岂不是手都要弄废掉?于是便想到了以下方法!

既然点击”复制按钮”商品ID便存储于剪贴板,那我们写个小程序来监制剪贴板不就事半功倍?! 

 干就完了!先上代码!


 窗口注册类

 
// 注册窗口类。

ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = WndProc;
	wcex.hInstance = hInstance;
	wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wcex.lpszClassName = "RainbowTools";

	return RegisterClassEx(&wcex);
}

 创建线程并循环读取windows消息,然后再创建一窗口并隐藏

 
// 循环读取windows消息 线程模块

static DWORD WINAPI GetMessage(LPVOID pParam)
{
	// 注册窗口类
	HINSTANCE hInst;
	hInst = GetModuleHandle(0);

	MyRegisterClass(hInst);

	// 创建窗口
	HWND hWnd = CreateWindow("RainbowTools", "Clipboard Monitor", WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);

	// 隐藏窗口
	ShowWindow(hWnd, SW_HIDE);

	// 循环接收消息
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return (int)msg.wParam;
}

 处理主窗口的消息(监控剪贴板内容),判断内容格式并检测是否为纯数字。

 
//  处理主窗口的消息(监控剪贴板内容)
//
//  WM_DRAWCLIPBOARD	-	粘贴板内容监控

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static HWND hwndNextViewer;
	switch (message)
	{
	case WM_DESTROY:
		// 设置Viewer链,移除本Viewer。
		ChangeClipboardChain(hWnd, hwndNextViewer);
		PostQuitMessage(0);
		break;
	case WM_CREATE:
		// 在窗口创建时,在粘贴板Viewer链中增加一个Viewer
		hwndNextViewer = SetClipboardViewer(hWnd);
		break;
	case WM_CHANGECBCHAIN: // Viewer链中的节点变化时会收到此消息
						   // 在链中增加本Viewer后,位于链的第一个节点
						   // 当链中有Viewer移除时,链中的第一个Viewer会收到此消息
						   // 如果是本Viewer的下一个Viewer移除,那么更新
		if ((HWND)wParam == hwndNextViewer)
			hwndNextViewer = (HWND)lParam;
		// 否则将消息向下一个Viewer传递
		else if (hwndNextViewer != NULL)
			SendMessage(hwndNextViewer, WM_CHANGECBCHAIN, wParam, lParam);
		break;
	case WM_DRAWCLIPBOARD: // 剪贴板的内容改变时执行此处代码
		// 打开剪贴板
		if (OpenClipboard(hWnd))
		{
			// 判断数据格式
			if (IsClipboardFormatAvailable(CF_TEXT))
			{
				HGLOBAL hClip1 = NULL;
				// 读取数据
				hClip1 = GetClipboardData(CF_TEXT);
				TCHAR *pBuf1 = NULL;
				pBuf1 = (TCHAR*)GlobalLock(hClip1);

				GlobalUnlock(hClip1);

				if (pBuf1 != '\0') 
				{
					CString Targets = NULL;
					Targets.Format(TEXT("%s"), pBuf1);

					// 判断 Targets 变量是否为数值
					if (Targets.SpanIncluding(_T("0123456789")) == Targets)
					{
						CString Links = NULL;
						Links.Format(TEXT("https://mobile.yangkeduo.com/goods.html?goods_id=%s\r\n"), Targets);

						CString Files = NULL;
						Files.Format(TEXT("%s\\%s-ID.txt"), szSelfPath, Times);

						CFile file(Files, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate);
						//将文件指针指向末尾
						file.SeekToEnd();
						//写入文件
						file.Write(Links, Links.GetLength());
						//关闭文件
						file.Close();
					}
				}
			}
		}
		// 关闭剪贴板
		CloseClipboard();
		// 将消息发送给Viewer链中的下一个窗口
		SendMessage(hwndNextViewer, WM_DRAWCLIPBOARD, wParam, lParam);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

效果演示


完整工具下载

【下载地址1】icon-default.png?t=N6B9https://wwrd.lanzoum.com/iqMHR148jsvc
【下载地址2】icon-default.png?t=N6B9https://download.youkuaiyun.com/download/qq_39190622/88152958

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rainbow Technology

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值