Sign in to follow this  
Vortez

Saving desktops icons dosen't work...

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:
[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;
}
}
[/code]

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

Share this post


Link to post
Share on other sites
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.

[url="http://www.stardock.com/products/fences/"]http://www.stardock.com/products/fences/[/url]

Share this post


Link to post
Share on other sites
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this