¿Cómo obtener las coordenadas y el tamaño de un acceso directo del escritorio de Windows en la programación de Windows?
DWORD dwProcessId;
HWND hDeskTop
hDeskTop = ::FindWindow( "programman", NULL
hDeskTop = : :FindWindowEx( hDeskTop, 0, "shelldll_defview", NULL );
hDeskTop = ::FindWindowEx( hDeskTop, 0, "syslistview32", NULL //Obtener el identificador de la ventana del escritorio
GetWindowThreadProcessId(hDeskTop, &dwProcessId);//Obtenga el PID del proceso donde se encuentra esta ventana a través del identificador de la ventana del escritorio, que en realidad es el proceso del explorador
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE , dwProcessId);// Abra el proceso PID especificado y obtenga el identificador del proceso
LPVOID lpvPt = VirtualAllocEx(hProcess,NULL,sizeof(POINT),MEM_COMMIT,PAGE_READWRITE);//Solicite un espacio de POINI tamaño de la estructura en el proceso especificado.
POINT pt;
ListView_GetItemPosition(hDeskTop,1,lpvPt);//Obtiene las coordenadas del primer icono y guárdalas en lpvPt
ReadProcessMemory(hProcess,lpvPt,&pt, sizeof(POINT),NULL
//lpvPt no está en este proceso y no se puede utilizar, por lo que es necesario
Utilice ReadProcessMemory para leerlo del proceso especificado
VirtualFreeEx(hProcess, lpvPt, 0, MEM_RELEASE
Libere el espacio solicitado
CloseHandle(hProcess); );//Cierra el identificador
Finalmente: El pt es la coordenada que deseas, esta es la coordenada del primer icono
ListView_GetItemPosition(hDeskTop,1,lpvPt); p>
Si quieres cambiarlo por otra cosa, cambia 1. Solo selecciona el que quieras
También tengo un programa para obtener los nombres de todos los iconos del escritorio si quieres. , deje su dirección de correo electrónico