Heh, chodziło mi ukrycie belki która pokazywała sie po minimalizacji(poza eksplorerem), poruszając temat Hooka, napomknąłeś o SPI_SETMINIMIZEDMETRICS, właśnie o taką opcje mi chodziło, googlując dalej natknąłem się na coś takiego:
http://www.codeplex.com/shell/Wiki/View.aspx?title=Shell%20Startup&version=8
nie trzeba zakładać żadnego hook'a aby ukryć tą belkę, wystarczy ustawić tę opcję, z flagą w strukturze ARW_HIDE i teoretycznie belek nie powinno już być, teoretycznie bo ta flaga coś nie chce działać i belki są dalej, nie mogę także wywalić ich poza ekran, jak bym nie ustawiał struktury MINIMIZEDMETRICS nie mogę się pozbyć belek z wyświetlanego obszaru(choć teoretycznie już sama flaga ARW_HIDE powinna to robić), zaraz mnie krew zaleje :-[
kod:
MINIMIZEDMETRICS mm; SystemParametersInfo(SPI_GETMINIMIZEDMETRICS,sizeof(MINIMIZEDMETRICS),&mm,SPIF_SENDCHANGE);
mm.iArrange|=ARW_HIDE;
SystemParametersInfo(SPI_SETMINIMIZEDMETRICS,sizeof(MINIMIZEDMETRICS),&mm,SPIF_SENDCHANGE);
czy też uzupełniając ręcznie strukturę wartościami(z uwzględnieniem ARW_HIDE) i tak nie mogę się pozbyc tych prymitywnych belek [glowa]
Rzeczywiście trzeba założyć Hooka, aby ARW_HIDE działało,
dzięki Sapero za twoją bardzo pomocną wypowiedź, wiesz pytam się, nie chcę tracić czasu na szukanie, skoro ktoś to wie i może mnie oświecić ;-)
No i moje kolejne denerwujące pytanie :)
Kwestia przekazywania fokusu pomiędzy oknami, otóż gdy kliknę na swoje okno, zostaje przekazany mu fokus, chcę zapobiec temu zjawisku, nie wiem na etapie jakiego komunikatu ustawiany jest fokus, ale jest to już wcześniej niż WM_NCHITTEST, także coś takiego nie będzie wystarczające:
case WM_SETFOCUS:
SetFocus((HWND)wPar);
...
bo fokus nadal zostanie przekazany na ułamki sekund, ale zostaje przekazany, szukam odpowiedzi ale nie mogę zbyt wiele znaleźć,
co prawda wymyśliłem już inny sposób rozwiązania problemu, ale jest on trochę pokrętny i mocno kombinowany, więc wolałbym, zrobić to poprzez wykluczenie przyjmowania fokusu przez moje okno....
Pół dnia siedzę i zastanawiam się dlaczego to nie chce się załadować zaraz zgłupieje całkiem [glowa]
Moja Dllka:
extern "C"
{
LRESULT CALLBACK NHookProc(int nCode,WPARAM wPar,LPARAM lPar)
{
//coś tam
}
}
Exec:
...
NHookDLL=LoadLibrary(L"NHook.dll");
if(!NHookDLL) MessageBoxA(DskWnd,"bla bla bla.","Brak biblioteki \"NHook.dll\"",MB_ICONERROR);
LRESULT(__stdcall *NHookProc)(int,WPARAM,LPARAM);
NHookProc=(LRESULT(__stdcall *)(int,WPARAM,LPARAM))GetProcAddress(NHookDLL,"NHookProc");
if(!NHookProc) MessageBoxA(DskWnd,"Nie można załadować funkcji \"NHookProc\".","Błąd biblioteki \"NHook.dll\"",MB_ICONERROR);
...
Nie mogę załadować NShellProc, pół dnia szukam powodu, na moje oko powinno to śmigać [glowa]
Exec jest w UNIKODZIE ale to chyba nie ma znaczenia bo nazwy funkcji win i tak zapisuje w ANSCI, znając życie błąd jest w małym szczególe którego nie zauważam przez pół dnia [glowa]