Spy ++を使用して、デスクトップの背景のウィンドウを見つけることができます。私は、次の階層を参照してください、私のシステムで
:
- ウィンドウ000100098 "プログラムマネージャ" PROGMAN
- ウィンドウ0001009E "" SHELLDLL_DefView
- ウィンドウ00100A0 "FolderView" SysListView32
あなたはSysListView32 - すべてのアイコンが表示されたウィンドウを参照していると思います。 FindWindowExを使用すると、このウィンドウを見つけることができます。
FindWindowExとEnumerateChildWindowsの組み合わせを使用する必要があります。以下に提示するコードは次のようなコマンドライン]ボックスでコンパイルすることができます:ここではcl /EHsc finddesktop.cpp /DUNICODE /link user32.lib
#include <windows.h>
#include <iostream>
#include <string>
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
std::wstring windowClass;
windowClass.resize(255);
unsigned int chars = ::RealGetWindowClass(hwnd, &*windowClass.begin(), windowClass.size());
windowClass.resize(chars);
if (windowClass == L"SysListView32")
{
HWND* folderView = reinterpret_cast<HWND*>(lParam);
*folderView = hwnd;
return FALSE;
}
return TRUE;
}
int wmain()
{
HWND parentFolderView = ::FindWindowEx(0, 0, L"Progman", L"Program Manager");
if (parentFolderView == 0)
{
std::wcout << L"Couldn't find Progman window, error: 0x" << std::hex << GetLastError() << std::endl;
}
HWND folderView = 0;
::EnumChildWindows(parentFolderView, EnumChildProc, reinterpret_cast<LPARAM>(&folderView));
if (folderView == 0)
{
std::wcout << L"Couldn't find FolderView window, error: 0x" << std::hex << GetLastError() << std::endl;
}
HWND desktopWindow = ::GetDesktopWindow();
std::wcout << L"Folder View: " << folderView << std::endl;
std::wcout << L"Desktop Window: " << desktopWindow << std::endl;
return 0;
}
結果では、ウィンドウハンドルはかなり異なっている見ることができるようにfinddesktop.exe
Folder View: 000100A0
Desktop Window: 00010014
を実行した後です。
私はdesk = FindWindowEx(NULL、NULL、L "SysListView32"、NULL)で最初の行を変更します。同じ効果があるので、GetDesktopWindowと同じウィンドウを取得すると思います。 – Razvi