• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

用Delphi编程如何判断电脑中运行的QQ号是多少

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

如果QQ在托盘显示,则可以在托盘中查找。
uses CommCtrl,ShellAPI;

var id: array[0..100] of integer;

{$R *.dfm}

procedure TFrmTray.FormCreate(Sender: TObject);
var
  v_hShellTray: THandle;
  v_hTrayNotify: THandle;
  v_hToolBar: THandle;
  v_SysPager: THandle;
  i, j, k: integer;
  Info: _TBBUTTON;
  buffer: pchar;
  PID: THandle;
  PRC: THandle;
  R: Cardinal;
  S: array[0..1024] of char;
  MaxWidth: integer;
begin
  k := 0;
  CheckListBox1.Items.Clear;
  v_hShellTray := FindWindow('Shell_TrayWnd', nil);
  v_hTrayNotify := FindWindowEx(v_hShellTray, 0, 'TrayNotifyWnd', nil);
  v_SysPager := FindWindowEx(v_hTrayNotify, 0, 'SysPager', nil);
  v_hToolBar := FindWindowEx(v_SysPager, 0, 'ToolbarWindow32', nil);
  if v_hToolBar=0 then Exit;
 
  GetWindowThreadProcessId(v_hToolBar, @PID);
  PRC := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, PID);
  Buffer := VirtualAllocEx(PRC, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);

  j := SendMessage(v_hToolBar, TB_BUTTONCOUNT, 0, 0);
  for i := 0 to j - 1 do
  begin
    FillChar(Info, SizeOf(Info), 0);
    WriteProcessMemory(PRC, Buffer, @Info, SizeOf(Info), R);

    SendMessage(v_hToolBar, TB_GETBUTTON, i, integer(Buffer));
    ReadProcessMemory(PRC, Buffer, @Info, SizeOf(Info), R);
    if Info.iString <> -1 then
    begin
      k := k + 1;
      if not Boolean(SendMessage(v_hToolBar, TB_ISBUTTONHIDDEN, Info.idCommand, 0)) then
      begin
        SendMessage(v_hToolBar, TB_GETBUTTONTEXT, Info.idCommand, integer(integer(@Buffer[0]) + SizeOf(Info)));
        ReadProcessMemory(PRC, Pointer(integer(@Buffer[0]) + SizeOf(Info)), @S[0], SizeOf(S), R);
        id[k - 1] := Info.idCommand;
        CheckListBox1.Items.Add(S);
        CheckListBox1.Checked[k - 1] := false;
      end
      else
      begin
        SendMessage(v_hToolBar, TB_GETBUTTONTEXT, Info.idCommand, integer(integer(@Buffer[0]) + SizeOf(Info)));
        ReadProcessMemory(PRC, Pointer(integer(@Buffer[0]) + SizeOf(Info)), @S[0], SizeOf(S), R);
        id[k - 1] := Info.idCommand;
        CheckListBox1.Items.Add(S);
        CheckListBox1.Checked[k - 1] := true;
      end;
    end;
  end;
  VirtualFreeEx(PRC, Buffer, 0, MEM_RELEASE);
  CloseHandle(PRC);

  MaxWidth := 0;
  for i := 0 to CheckListBox1.Items.Count - 1 do
    if MaxWidth < CheckListBox1.Canvas.TextWidth(CheckListBox1.Items.Strings[i]) then
      MaxWidth := CheckListBox1.Canvas.TextWidth(CheckListBox1.Items.Strings[i]);
  SendMessage(CheckListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth + 40, 0);
end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi助手类发布时间:2022-07-18
下一篇:
【STM32F407的DSP教程】第3章 Matlab简易使用之基础操作发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap