delphi高手请进

xiaojianace 2009-12-24 08:22:21
delphi中如何使用windows API函数实现打开桌面图标 最好有一个例子
...全文
101 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanguomi 2009-12-25
  • 打赏
  • 举报
回复
第一个函数要加
uses
commctrl;
sanguomi 2009-12-25
  • 打赏
  • 举报
回复
楼主只要组装下,应该大部分文件就可以打开了
其他的我懒得写了,
sanguomi 2009-12-25
  • 打赏
  • 举报
回复
遍历桌面,桌面也是个SysListView32 系统标准控件,然后取内容,

var
TextBuffer: array[0..100] of Char;
Count: Integer;
I: Integer;
H: HWND;

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;
begin
Result := False;
H := FindWindow('Progman', 'Program Manager');
H := GetWindow(H, GW_CHILD);
H := GetWindow(H, GW_CHILD);

Count := SendMessage(H, LVM_GETITEMCOUNT, 0, 0);
for I := 0 to Count - 1 do
begin
ListView_GetItemText_Ex(H, i, 0, TextBuffer, 100); //TextBuffer 为桌面内容
end;
end;


如果是系统的
比如 我的电脑这些
Shellexecute(0, 'open',pchar('::{20D04FE0-3AEA-1069-A2D8-08002B30309D}'), nil, nil, sw_show); 这只是打开我的电脑,其他的你自己找
如果是快捷方式
根据快捷方式,取得文件路径
函数

function GetTargetOfShorCut(LinkFile: string): string;
const
IID_IPersistFile: TGUID = '{0000010B-0000-0000-C000-000000000046}';
var
intfLink: IShellLink;
IntfPersist: IPersistFile;
pfd: _WIN32_FIND_DATA;
bSuccess: Boolean;
T:TStringList;
begin
Result := '';
CoInitialize(nil);
T:=TStringList.Create;
IntfLink := CreateComObject(CLSID_ShellLink) as IShellLink;
SetString(Result, nil, MAX_PATH);
bSuccess := (IntfLink <> nil) and
SUCCEEDED(IntfLink.QueryInterface(IID_IPersistFile, IntfPersist))
and SUCCEEDED(IntfPersist.Load(PWideChar(WideString(LinkFile)), STGM_READ))
and
SUCCEEDED(intfLink.GetPath(PAnsiChar(Result), MAX_PATH, pfd, SLGP_RAWPATH));
if not bSuccess then
Result := '';
CoUninitialize;
end

取得文件路径,再Shellexecute

另外的,比如文件什么的
系统盘 + :\Documents and Settings\' + 当前用户名+'\桌面\开始取的文件名
再一起Shellexecute





yshuui 2009-12-25
  • 打赏
  • 举报
回复
取桌面文件夹的路径,显示下面的文件就可以了。
lxh524 2009-12-24
  • 打赏
  • 举报
回复
你可以用ShellListView 和ShellTreeView 以及 ShellComboBox配合用,不是很简单
xiaojianace 2009-12-24
  • 打赏
  • 举报
回复
就是用delphi语言加windows api 函数打开桌面上的“我的电脑、我的文档,IE”等等图标
yshuui 2009-12-24
  • 打赏
  • 举报
回复
打开桌面图标?什么意思?
xiaojianace 2009-12-24
  • 打赏
  • 举报
回复
具体一点
xiaojianace 2009-12-24
  • 打赏
  • 举报
回复
能举例说明一下吗
贝隆 2009-12-24
  • 打赏
  • 举报
回复
也可以使用sendmessage来发送点击消息
hjkto 2009-12-24
  • 打赏
  • 举报
回复
可以根据桌面的快捷方式图标打开它的程序
gyk120 2009-12-24
  • 打赏
  • 举报
回复
桌面图标没法用API打开,只能模拟点击
相关推荐
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2009-12-24 08:22
社区公告
暂无公告