捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 > 原创文章 > 正文
22 2014.07

delphi做桌面气泡提醒程序

点击次数:2251 更新时间:2014/7/22 13:06:18  【打印此页

气泡提醒如图:

delphi源码

准备:GifImageD7组件(实现透明背景,否则image控件无法加载GIF图片)

 

源码如下:

uses  ExtCtrls;

// 取得桌面存放图标的listview句柄
function GetDesktopLvHand: THandle;
begin
  Result := FindWindow('progman', nil);
  Result := GetWindow(Result, GW_Child);
  Result := GetWindow(Result, GW_Child);
end;

// 取得图标的坐标位置
function GetIcoPosition(h: THandle; idx: Integer): TPoint;
var
  hpro, pid, dm, i: Cardinal;
  p: Pointer;
begin
  GetWindowThreadProcessId(h, pid);
  hpro := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
  if hpro <> 0 then
    try
      p := VirtualAllocEx(hpro, nil, SizeOf(TPoint), MEM_COMMIT,
        PAGE_READWRITE);
      ListView_GetItemPosition(h, idx, TPoint(p^));
      ReadProcessMemory(hpro, p, @Result, SizeOf(Result), dm);
    finally
      VirtualFreeEx(hpro, p, 0, MEM_RELEASE);
      CloseHandle(hpro);
    end;
end;

// 取得图标的文本
function ListView_GetItemText_Ex(hwndLV: HWND; i, iSubItem: Integer;
  pszText: PChar; cchTextMax: Integer): Integer;
var
  LVItem: TLVItem;
  ProcessID, ProcessHD, Temp: DWORD;
  MemPoint: Pointer;
begin
  GetWindowThreadProcessId(hwndLV, ProcessID);

  ProcessHD := OpenProcess
    (PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False,
    ProcessID);

  MemPoint := VirtualAllocEx(ProcessHD, nil, SizeOf(TLVItem) + cchTextMax,
    MEM_COMMIT, PAGE_READWRITE);

  LVItem.iSubItem := iSubItem;
  LVItem.cchTextMax := cchTextMax;
  LVItem.pszText := PChar(Integer(MemPoint) + SizeOf(TLVItem));

  WriteProcessMemory(ProcessHD, MemPoint, @LVItem, SizeOf(TLVItem), Temp);
  Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Integer(MemPoint));

  ReadProcessMemory(ProcessHD, Pointer(Integer(MemPoint) + SizeOf(TLVItem)),
    pszText, cchTextMax, Temp);

  VirtualFreeEx(ProcessHD, MemPoint, SizeOf(TLVItem) + cchTextMax,
    MEM_DECOMMIT);
  VirtualFreeEx(ProcessHD, MemPoint, 0, MEM_RELEASE);
end;

function GetIcoItemText(i: Integer): string;
var
  TextBuffer: array [0 .. 100] of char;
  FDeskTopLvHandle: THandle;
begin
  FDeskTopLvHandle := GetDesktopLvHand;
  ListView_GetItemText_Ex(FDeskTopLvHandle, i, 0, TextBuffer, 100);
  Result := TextBuffer;
end;

 

procedure TForm1.FormCreate(Sender: TObject);
var
  IcoCount, i: Integer;
  DeskToplvhandle: THandle;
  IcoPoint: TPoint;
begin
  // 取得桌面存放图标的Listview句柄
  DeskToplvhandle := GetDesktopLvHand;
  // 取得桌面图标的个数
  IcoCount := Listview_GetItemCount(DeskToplvhandle);

  for i := 0 to IcoCount - 1 do
  begin
    IcoPoint := GetIcoPosition(DeskToplvhandle, i);
        if GetIcoItemText(i)='我的电脑' then //桌面快捷方式名称
        begin
          form1.Top:=IcoPoint.Y-32; //提醒气泡位置
          form1.Left:=IcoPoint.X+32; //提醒气泡位置
        end;
  end;
end;

最后运行效果图:

图我随便做了下。。要漂亮的话还得花点心思

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:2251 更新时间:2014/7/22 13:06:18  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修