-->
ビルドパッケージ(ソース+バイナリ) : seticon.exe ブラウザでダウンロード デスクトップ活用支援Windows のデスクトップ上のアイコンの位置を変更します。 以下のようにすると、画面の外に移動して見えなくなります。 seticon.exe "マイ コンピュータ" -100 -100 但し、ログオンしなおすと画面内に表示されます。 ※ 全ての環境と条件下においてテストしたわけではありません。 // ********************************************************* // デスクトップのアイコンを指定位置に移動する // // 【例】seticon.exe lightbox.xls 1000 700 // 【例】seticon.exe "マイ コンピュータ" -100 -100 // // ※ 画面の外を指定すると、表示されなくなります // ( ログインしなおすと表示されます ) // ※ 位置情報取得のサンプルを使用すると、位置保存が可能です // ※ スペースを含む名前は "" で囲んで下さい // ********************************************************* #include <tchar.h> #include "lightbox\lightbox.h" #pragma comment( lib, "lightbox\\lightbox.lib" ) #pragma comment( lib, "shlwapi.lib" ) #define DEBUG 0 int _tmain(int argc, _TCHAR* argv[]) { HWND hWnd; // デスクトップの ListView のウインドウハンドル hWnd = FindWindow("Progman", "Program Manager"); hWnd = FindWindowEx(hWnd, NULL, "SHELLDLL_DefView", NULL); hWnd = FindWindowEx(hWnd, NULL, "SysListView32", NULL); DWORD pid; // プロセス ID GetWindowThreadProcessId(hWnd,&pid); // プロセスのハンドル HANDLE ph; ph = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, false, pid); // そのプロセスでメモリを確保 LPVOID ptr; ptr = VirtualAllocEx(ph,NULL,4096, MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE); // アイテム数取得 int nCount; nCount = ListView_GetItemCount( hWnd ); int i,target; char buff[1024]; DWORD numRead; LVITEM li; // 対象アイテムの取得 for( i = 0; i < nCount; i++ ) { li.mask = LVIF_TEXT; li.iItem = i; li.iSubItem = 0; li.cchTextMax = 1024; li.pszText = ((LPTSTR)ptr)+1024; WriteProcessMemory( ph, ptr, &li, sizeof(LVITEM), &numRead ); SendMessage( hWnd, LVM_GETITEM , 0, (LPARAM)ptr); ReadProcessMemory( ph, ((LPTSTR)ptr)+1024, buff, 1024, &numRead ); if ( lstrcmp( argv[1], buff ) == 0 ) { target = i; i = -1; break; } #if DEBUG == 1 printf( "%s\n", buff ); #endif } // 対象アイテム無し if ( i != -1 ) { VirtualFreeEx(ph,ptr,0,MEM_RELEASE); CloseHandle(ph); return 0; } // いちおう、ここでは使わないが位置情報取得のサンプル #if DEBUG == 1 POINT p; int ret; ret = SendMessage(hWnd, LVM_GETITEMPOSITION, i, (LPARAM)ptr); ReadProcessMemory(ph,ptr,&p,sizeof(POINT),&numRead); printf( "%ld:%ld\n", p.x, p.y ); #endif // 位置設定 SendMessage(hWnd, LVM_SETITEMPOSITION, target, MAKELPARAM((int) atoi(argv[2]), (int) atoi(argv[3]) ) ); // 後処理 VirtualFreeEx(ph,ptr,0,MEM_RELEASE); CloseHandle(ph); return 0; } |