QTP和Clipboard(剪切板)完美组合解决QQ聊天记录获得的问题 推荐
2010-01-04 15:02
435 查看
问题和背景:
需要得到QQ2009中聊天记录无法获取的问题,由于QQ整个软件都是直画的,用QTP的SPY根本就无法获得QQ聊天对话框内容,因此也无法判断发送的聊天记录是否在聊天历史记录中有显示。为此非常困顿,某日和曾爷诉苦的过程中,突然想到剪切版,如果内取得剪切版内容那么我在打开聊天窗体的时候,在历史聊天记录中来个Ctrl+c 问题不就解决了吗。听上去感觉是很土的八路做法,不过关键是抗战能够胜利即可。照着这个思路顺利的解决了这个问题,特将代码和过程贴如下
C#,提供DLL解决取得剪切版内容的问题:
首先需要新建类库工程, ClipboardHelp。需要引用System.Forms等库若干,需要新建窗体类,因为主要使用窗体消息机制来实现的。
原代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ClipboardHelp
{
public partial class ClipboardForm : Form
{
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr SetClipboardViewer(IntPtr hwnd);
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr ChangeClipboardChain(IntPtr hwnd, IntPtr hWndNext);
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
const int WM_DRAWCLIPBOARD = 0x308;
const int WM_CHANGECBCHAIN = 0x30D;
IntPtr NextClipHwnd;
private String _cText ;
public string cText
{
get { return this._cText; }
set { this._cText = value; }
}
public ClipboardForm()
{
InitializeComponent();
}
private void ClipboardForm_Load(object sender, EventArgs e)
{
NextClipHwnd = SetClipboardViewer(this.Handle);
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_DRAWCLIPBOARD:
//将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);
IDataObject iData = Clipboard.GetDataObject();
//检测文本
if (iData.GetDataPresent(DataFormats.Text) | iData.GetDataPresent(DataFormats.OemText))
需要得到QQ2009中聊天记录无法获取的问题,由于QQ整个软件都是直画的,用QTP的SPY根本就无法获得QQ聊天对话框内容,因此也无法判断发送的聊天记录是否在聊天历史记录中有显示。为此非常困顿,某日和曾爷诉苦的过程中,突然想到剪切版,如果内取得剪切版内容那么我在打开聊天窗体的时候,在历史聊天记录中来个Ctrl+c 问题不就解决了吗。听上去感觉是很土的八路做法,不过关键是抗战能够胜利即可。照着这个思路顺利的解决了这个问题,特将代码和过程贴如下
C#,提供DLL解决取得剪切版内容的问题:
首先需要新建类库工程, ClipboardHelp。需要引用System.Forms等库若干,需要新建窗体类,因为主要使用窗体消息机制来实现的。
原代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ClipboardHelp
{
public partial class ClipboardForm : Form
{
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr SetClipboardViewer(IntPtr hwnd);
[System.Runtime.InteropServices.DllImport("user32")]
private static extern IntPtr ChangeClipboardChain(IntPtr hwnd, IntPtr hWndNext);
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
const int WM_DRAWCLIPBOARD = 0x308;
const int WM_CHANGECBCHAIN = 0x30D;
IntPtr NextClipHwnd;
private String _cText ;
public string cText
{
get { return this._cText; }
set { this._cText = value; }
}
public ClipboardForm()
{
InitializeComponent();
}
private void ClipboardForm_Load(object sender, EventArgs e)
{
NextClipHwnd = SetClipboardViewer(this.Handle);
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_DRAWCLIPBOARD:
//将WM_DRAWCLIPBOARD消息传递到下一个观察链中的窗口
SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);
IDataObject iData = Clipboard.GetDataObject();
//检测文本
if (iData.GetDataPresent(DataFormats.Text) | iData.GetDataPresent(DataFormats.OemText))
相关文章推荐
- QTP和Clipboard(剪切板)完美组合解决QQ聊天记录获得的问题
- QQ登录失败,文件读取出错(错误码0x0006000d)保留聊天记录解决办法
- mac上qq 聊天记录中图片不显示 的解决办法
- 朗成开发板的串口硬件问题——QQ聊天记录。
- 【问题记录】解决,打开app时,EditView的自动获得焦点,并且软键盘弹出
- 避免使用count(*)获得表的记录数,解决其延迟问题
- 下拉刷新加载聊天记录出现的问题以及解决方法
- 关于解决QQ聊天打开重启问题
- 避免使用count(*)获得表的记录数,解决其延迟问题
- 在word或qq聊天记录中点超链接无法打开内容的解决办法
- Windows没有北京时间(GMT+8时区)的问题,及QQ聊天栏中显示的时间错误的问题解决办法
- QQforMacQQforMac聊天记录/登录信息的保存路径 QQ for Mac使用问题
- wine qq安装及问题记录与解决
- QQ卡机问题解决方法(信息记录过大时)
- 对c#剪切板Clipboard占用的问题一点解决方法
- PowerTalkBox聊天控件,问题解决聊天记录,希望对大家遇见类似问题有所帮助
- 避免使用count(*)获得表的记录数,解决其延迟问题
- Qt程序聊天弹屏问题简单解决方法(类似QQ聊天聊天窗口弹屏)
- 简单解决——使用Clipboard实现剪切板,用require引入js资源,会报错Clipboard is not defined的问题
- Lync问题解决之在Lync客户端中,无法查看到聊天记录