博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win32编程实现剪贴板监控查看
阅读量:4166 次
发布时间:2019-05-26

本文共 1881 字,大约阅读时间需要 6 分钟。

网络上有很多使用MFC和.NET实现windows剪贴板监控的程序。这里参考《Windows程序设计(第五版)》实现了一个最简单的Win32剪贴板监控程序。采用原始的win32编程,不适用MFC和.NET等的封装库。

下面是需要修改的WndProc函数。(整个工程在)

////  函数: WndProc(HWND, UINT, WPARAM, LPARAM)////  目的: 处理主窗口的消息。////  WM_COMMAND	- 处理应用程序菜单//  WM_PAINT	- 绘制主窗口//  WM_DESTROY	- 发送退出消息并返回////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){	int wmId, wmEvent;	PAINTSTRUCT ps;	HDC hdc;	static HWND hwndNextViewer; 	HGLOBAL hGlobal;	PTSTR pGlobal;	RECT rect;	switch (message)	{	case WM_CREATE:		hwndNextViewer = SetClipboardViewer(hWnd);		break;	case WM_CHANGECBCHAIN:		if((HWND)wParam == hwndNextViewer)			hwndNextViewer = (HWND)lParam;		else if(hwndNextViewer)			SendMessage(hwndNextViewer, message, wParam, lParam);		//return 0;		break;	case WM_DRAWCLIPBOARD:		if(hwndNextViewer)			SendMessage(hwndNextViewer, message, wParam, lParam);		InvalidateRect(hWnd, NULL, TRUE);		//return 0;		break;	case WM_COMMAND:		wmId    = LOWORD(wParam);		wmEvent = HIWORD(wParam);		// 分析菜单选择:		switch (wmId)		{		case IDM_ABOUT:			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);			break;		case IDM_EXIT:			DestroyWindow(hWnd);			break;		default:			return DefWindowProc(hWnd, message, wParam, lParam);		}		break;	case WM_PAINT:		hdc = BeginPaint(hWnd, &ps);		// TODO: 在此添加任意绘图代码...		// OpenClipboard, GetClipboardData, CloseClipboard		GetClientRect(hWnd, &rect);		OpenClipboard(hWnd);#ifdef UNICODE		hGlobal = GetClipboardData(CF_UNICODETEXT);#else 		hGlobal = GetClipboardData(CF_TEXT);#endif		if(hGlobal != NULL)		{			pGlobal = (PTSTR)GlobalLock(hGlobal);			DrawText(hdc, pGlobal, -1, &rect, DT_EXPANDTABS);			GlobalUnlock(hGlobal);		}		CloseClipboard();		EndPaint(hWnd, &ps);		break;	case WM_DESTROY:		ChangeClipboardChain(hWnd, hwndNextViewer);		PostQuitMessage(0);		//return 0;		break;	default:		return DefWindowProc(hWnd, message, wParam, lParam);	}	return 0;}
转载:
你可能感兴趣的文章
sql判断字段是否为空
查看>>
利用typedef定义函数指针
查看>>
函数指针与链表结合举例
查看>>
数据结构基础——指针及动态内存分配(malloc)
查看>>
Linux下*.tar.gz文件解压缩命令(以及后台执行压缩命令,包括zip格式文件)
查看>>
回调函数的总结
查看>>
C++ 字节对齐的总结(原因和作用)
查看>>
Source Insight(vs2012,ultraedit) 中Tab键设置为4个空格代替
查看>>
stm32和51的区别
查看>>
Linux进程之alarm()信号传送闹钟函数
查看>>
字节转换为字符串-linux下的itoa函数和window下的spritf函数
查看>>
C++实现链表基本操作
查看>>
malloc与free
查看>>
调用malloc时发生了什么
查看>>
自己动手写内存分配函数malloc
查看>>
linux C之alarm函数
查看>>
如何自实现一个malloc函数(指定区间分配)
查看>>
sscanf中%s用法
查看>>
ps -aux中STAT列的标志位
查看>>
Linux fork() vfork()
查看>>