怎么知道 某个窗口是否是 QQ的窗口? 如题。达人呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你参考一下我的一个程序的一个函数,挑你要用的。procedure TfrmMain.OnAttachedTailer(var Msg: TMessage);var hLastWin, hButton: THandle; szWindowText: array[0..MAX_PATH] of Char; szTextLength: Integer; sTailer, sQQName: string; DataObject: TDataObject;begin if not bRunState then Exit; // 如果是暂停 hLastWin := GetForegroundWindow; GetClassName(hLastWin, szWindowText, SizeOf(szWindowText)); if szWindowText <> '#32770' then Exit; szTextLength := SendMessage(hLastWin, WM_GETTEXT, MAX_PATH, Integer(@szWindowText[0])); szWindowText[szTextLength] := #0; if (Pos('聊天中', szWindowText) > 0) or (Pos('群', szWindowText) > 0) then begin sQQName := Copy(szWindowText, Pos(' ', szWindowText) + 1, Pos('聊天中', szWindowText) - Pos(' ', szWindowText) - 2); hLastWin := FindWindowEx(hLastWin, THandle(nil), '#32770', nil); if hLastWin = 0 then Exit; hButton := FindWindowEx(hLastWin, THandle(nil), nil, '发送(&S)'); //if hButton = 0 then Exit; //hLastWin := FindWindowEx(hLastWin, THandle(nil), 'AfxWnd42', nil); if hLastWin = 0 then Exit; hLastWin := FindWindowEx(hLastWin, THandle(nil), 'RICHEDIT', nil); if hLastWin = 0 then Exit; // 获取数据长度 //szTextLength := SendMessage(hLastWin, WM_GETTEXT, MAX_PATH, Integer(@szWindowText[0])); //if szTextLength <= 0 then Exit; // 获取数据 DataObject := GetCurrentDataByName(sQQName, GetGroupByName(sQQName), reSendText); if DataObject <> nil then begin sTailer := DataObject.TextObject.sSendText; if Trim(cbLine.Text) <> '' then sTailer := string(#10) + Trim(cbLine.Text) + string(#10) + sTailer // 加一回车换行 else sTailer := string(#10) + sTailer; // 加一回车换行 end; // 发送数据 //SendMessage(hLastWin, EM_REPLACESEL, 180, Integer(PChar(sTailer))); Clipboard.AsText := sTailer; KEYBD_EVENT(VK_CONTROL, 0, 0, 0); KEYBD_EVENT(Ord('V'), 0, 0, 0); KEYBD_EVENT(Ord('V'), 0, KEYEVENTF_KEYUP, 0); KEYBD_EVENT(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); PostMessage(handle, WM_CLICKSENDBOTTON, WParam(DataObject), LParam(hButton)); end;end;procedure TfrmMain.OnClickSendBotton(var Msg: TMessage);var DataObject: TDataObject; hButton: THandle;begin DataObject := TDataObject(Msg.WParam); hButton := Integer(Msg.LParam); //Sleep(200); PostMessage(hButton, WM_LBUTTONDOWN, 0, 0); // 现在不用 PostMessage(hButton, WM_LBUTTONUP, 0, 0); // 更新数据 PostMessage(handle, WM_UPDATECURRENTDATA, WParam(DataObject), 0);end; TDataObject;是不是 d7才有的啊~ 我d5 没 TDataObject是自己写的一个类,跟你没关系,可以删除。 谢谢~~ 有没有什么好办法可以检控windows窗口的产生?用 findwindow(ex) 这样好象效率不高哦 初学者遇到的小问题,请大家指教!谢谢! 关于Frame的简单问题!在线等。 哈哈,已到了猴年马月!!放分...,新老朋友一齐来吧,你祝好运! 关于动态库的一个问题 大家帮忙解决一下 怎样动态改变vcl组件的事件响应代码? 简单的form的问题。 数据库备份还原的问题 如何使我的程序模块在最小化时在任务栏有图标,就象Excel,每个文件都有。 自动计算字段如何排序? 渴求PC to Phone的问题解决 在delphi中新建一个没加任何东西的工程,运行立刻出现CPU调试窗口,请赐教!
procedure TfrmMain.OnAttachedTailer(var Msg: TMessage);
var
hLastWin, hButton: THandle;
szWindowText: array[0..MAX_PATH] of Char;
szTextLength: Integer;
sTailer, sQQName: string;
DataObject: TDataObject;
begin
if not bRunState then Exit; // 如果是暂停 hLastWin := GetForegroundWindow;
GetClassName(hLastWin, szWindowText, SizeOf(szWindowText));
if szWindowText <> '#32770' then Exit;
szTextLength := SendMessage(hLastWin, WM_GETTEXT, MAX_PATH, Integer(@szWindowText[0]));
szWindowText[szTextLength] := #0;
if (Pos('聊天中', szWindowText) > 0) or (Pos('群', szWindowText) > 0) then
begin
sQQName := Copy(szWindowText, Pos(' ', szWindowText) + 1, Pos('聊天中', szWindowText) - Pos(' ', szWindowText) - 2);
hLastWin := FindWindowEx(hLastWin, THandle(nil), '#32770', nil);
if hLastWin = 0 then Exit;
hButton := FindWindowEx(hLastWin, THandle(nil), nil, '发送(&S)');
//if hButton = 0 then Exit;
//hLastWin := FindWindowEx(hLastWin, THandle(nil), 'AfxWnd42', nil);
if hLastWin = 0 then Exit;
hLastWin := FindWindowEx(hLastWin, THandle(nil), 'RICHEDIT', nil);
if hLastWin = 0 then Exit;
// 获取数据长度
//szTextLength := SendMessage(hLastWin, WM_GETTEXT, MAX_PATH, Integer(@szWindowText[0]));
//if szTextLength <= 0 then Exit; // 获取数据
DataObject := GetCurrentDataByName(sQQName, GetGroupByName(sQQName), reSendText);
if DataObject <> nil then
begin
sTailer := DataObject.TextObject.sSendText;
if Trim(cbLine.Text) <> '' then
sTailer := string(#10) + Trim(cbLine.Text) + string(#10) + sTailer // 加一回车换行
else
sTailer := string(#10) + sTailer; // 加一回车换行
end; // 发送数据
//SendMessage(hLastWin, EM_REPLACESEL, 180, Integer(PChar(sTailer)));
Clipboard.AsText := sTailer;
KEYBD_EVENT(VK_CONTROL, 0, 0, 0);
KEYBD_EVENT(Ord('V'), 0, 0, 0);
KEYBD_EVENT(Ord('V'), 0, KEYEVENTF_KEYUP, 0);
KEYBD_EVENT(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
PostMessage(handle, WM_CLICKSENDBOTTON, WParam(DataObject), LParam(hButton));
end;
end;procedure TfrmMain.OnClickSendBotton(var Msg: TMessage);
var
DataObject: TDataObject;
hButton: THandle;
begin
DataObject := TDataObject(Msg.WParam);
hButton := Integer(Msg.LParam);
//Sleep(200);
PostMessage(hButton, WM_LBUTTONDOWN, 0, 0); // 现在不用
PostMessage(hButton, WM_LBUTTONUP, 0, 0); // 更新数据
PostMessage(handle, WM_UPDATECURRENTDATA, WParam(DataObject), 0);end;
是不是 d7才有的啊~ 我d5 没