• Advertisement
Sign in to follow this  

Saving desktops icons dosen't work...

This topic is 2002 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi everyone, im trying to make a small project but i ran into a snag. The goal is to save the position of my icon on the
desktop so that if they get messed up by, say, an old game of mine that swich resolution, i could rearrange them with
the push of a button. Seem simple enough.

The first thing i've done is check with Spy++ what kind of control it was, it's a syslistview32, so, basically, a listview.
So, i started by sending the LVM_GETITEMCOUNT message to it to get the number of icons, it worked. So far, so good. If i add or
delete some icons, the number change accordingly. Then, that's when it get weird... When i try to get the position of each
icon, using the LVM_GETITEMPOSITION message, or by using the macro ListView_GetItemPosition that do the same exact thing,
the POINT structure im passing is not getting filled. The same thing happen when trying to get the text with LVM_GETITEMTEXT.
The weird thing is, if i monitor the message LVM_GETITEMPOSITION for example, using Spy++, i can see that my messages have
been sent and received, and i can see the value that should be in my POINT structure, but it's not there...
I can't see what the hell is going on.

Here's the code:

#include "Windows.h"
#include "COMMCTRL.H"
void main()
{
// The window always have this handle on XP, unless it crash...
DWORD DesktopHandle = 0x00010088;
// A little kludge...
HWND hDesktop = NULL;
memcpy(&hDesktop, &DesktopHandle, 4);

// This work (both of em)...

//int NumItems = SendMessage(hDesktop, LVM_GETITEMCOUNT, 0, 0);

int NumItems = ListView_GetItemCount(hDesktop);

for(int Cpt = 0; Cpt < NumItems; Cpt++){

POINT Pos;
ZeroMemory(&Pos, sizeof(POINT));
// This dosen't work (again, both of em)

//SendMessage(hDesktop, LVM_GETITEMPOSITION, Cpt, (LPARAM)(&Pos));
ListView_GetItemPosition(hDesktop, Cpt, (LPARAM)&Pos);
break;
}
}


If anyone could help me, that would be great, Thx.

Share this post


Link to post
Share on other sites
Advertisement
Vortez: You're passing a local pointer to a different application with its own heap. For that other application that pointer is probably pointing into invalid territory.

You need to allocate memory in the explorer process with VirtualAllocEx and use ReadProcessMemory and WriteProcessMemory to access it. Also, be sure to chose the right bitness (32bit vs. 64bit).

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement