Saving desktops icons dosen't work...

Started by
2 comments, last by Vortez 11 years, 6 months ago
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.
Advertisement
Try using Fences (see the link below)! These are a time saver when I remote into my dual screen work PC from a single screen machine. Because I've saved my how my fences are setup (through their GUI) they automatically re-position themselves when I return to sitting directly in front of my work machine.

http://www.stardock.com/products/fences/
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).

Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

Thx a lot dude, it work now!

This topic is closed to new replies.

Advertisement