Здравствуйте, ononim, Вы писали:
_>>если хочется влезть в метроинтерфейс, то можно заинжектить в экплорер свою длл, которая должна выполнить примерно такой вот код в нем:
O>O>typedef HWND (WINAPI *CreateWindowInBandProc)(DWORD dwExStyle, LPCWSTR lpClassName,
O> LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
O> HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam, DWORD dwBand);
O> CreateWindowInBandProc pCreateWindowInBand = (CreateWindowInBandProc)
O> ::GetProcAddress(::GetModuleHandle(TEXT("user32.dll")), "CreateWindowInBand");
O> if (!pCreateWindowInBand)
O> {
O> ::MessageBox(0, TEXT("CreateWindowInBand not found"), TEXT("Hello"), MB_ICONWARNING);
O> return;
O> }
O> DWORD cy = ::GetSystemMetrics(SM_CYMAXIMIZED), y = 10, x = 10;
O> TCHAR txt[0x100] = {0};
O> for (DWORD i = 0; i<=0x20; ++i)
O> {
O> wsprintf(txt, TEXT("Band %u\n"), i);
O> HWND w = pCreateWindowInBand(WS_EX_TOPMOST, TEXT("Edit"), txt,
O> WS_VISIBLE|WS_OVERLAPPEDWINDOW, x, y, 200, 40, 0, 0, ::GetModuleHandle(0), 0, i);
O> if (!w)
O> {
O> wsprintf(txt, TEXT("Failed %u\n"), i);
O> pCreateWindowInBand(WS_EX_TOPMOST, TEXT("Edit"), txt,
O> WS_VISIBLE|WS_OVERLAPPEDWINDOW, x, y, 200, 40, 0, 0, ::GetModuleHandle(0), 0, 0);
O> }
O> if (( (y+= 40 ) +40)>=cy)
O> {
O> y = 10;
O> x+= 200;
O> }
O> }
O> ::MessageBox(0, TEXT("In loop.."), TEXT("Hello"), MB_ICONWARNING);
O>}
O>
А приходилось ли вам вызывать SetWindowBand?
Вроде как ее можно вызвать без инжекта и хука, перед этим вызвав недокументированную NtUserEnableIAMAccess.