Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Вниз

Update   Найти похожие ветки 

 
aga   (2003-02-02 16:45) [0]

Привет всем!
Вот появился вопрос: есть проги которые "заставляют" Windows
перерисовать все значки, как такое можно сделать с помощью API
или без?


 
Rouse_   (2003-02-02 17:06) [1]

Рабочий стол представляет собой обычный оконный элемент, средствами WinAPI возможно сделать с ним все что угодно :)
Или Вам нужен код?

Желаю успехов


 
aga   (2003-02-02 19:46) [2]

Ну если можно покажите код, правда я сомниваюсь что получится...


 
___ALex___   (2003-02-03 16:58) [3]

рабочий стол скорее представляет холст описатель контекста которого можно получить ф-не GetDC(0), но что это ОКНО первый раз слышу! окно можно свернуть, переместить...
если я не прав докажи кодом, покажи как тогда можно получить описатель декстопа...я в этои сильно сомневаюсь


 
___ALex___   (2003-02-03 17:05) [4]

беру свои слова назад
это ф-ия HWND GetDesktopWindow(VOID) уже нашёл...


 
___ALex___   (2003-02-03 20:45) [5]

что я только не пробовал сделать чтоб обновить рабстол!!!
как только не пробовал программно нажать клавишу F5 на рабочем столе!не получилось, но я НАШЁЛ как это сделать!
вот лови
ShellExecute(0, "open", "C:\Windows\rundll32",
"user,repaintscreen", nil, 0);
вот ещё нашёл недокументированную процедуру по активированию окна
может пригодится
procedure SwitchToThisWindow(hWnd_: HWND; Restore: BOOL); stdcall; external "user32.dll" name "SwitchToThisWindow";
hWnd - хэндл окна
Restore - развернуть окно, если оно минимизировано.
Удачи!




 
Nick_N_A   (2003-02-04 07:24) [6]

Сколько кодов, поздравляю.
InvalidateRect(0, nil, true);// перерисовать весь экран
или
InvalidateRect(0, nil, false);


 
aga   (2003-02-05 16:12) [7]

Нет, конечно это всё хорощо и спасибо вам всем но коды не работают :(


 
Nick_N_A   (2003-02-06 05:46) [8]

A мой (Nick_N_A) не работает ?


 
Романов Р.В.   (2003-02-06 08:32) [9]

SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);


 
aga   (2003-02-07 15:55) [10]

2Романов Р.В.
вам тоже спасибо но неработает - мне нужно перерисовать все иконки винды...


 
DVM   (2003-02-07 17:18) [11]


Microsoft"s Tweak UI has a feature "rebuild icon cache now".
Windows then rebuilds its internal cache of icons.
Unfortunately, there is no single API to do this.
}

uses
Registry;

function RefreshScreenIcons : Boolean;
const
KEY_TYPE = HKEY_CURRENT_USER;
KEY_NAME = "Control Panel\Desktop\WindowMetrics";
KEY_VALUE = "Shell Icon Size";
var
Reg: TRegistry;
strDataRet, strDataRet2: string;

procedure BroadcastChanges;
var
success: DWORD;
begin
SendMessageTimeout(HWND_BROADCAST,
WM_SETTINGCHANGE,
SPI_SETNONCLIENTMETRICS,
0,
SMTO_ABORTIFHUNG,
10000,
success);
end;


begin
Result := False;
Reg := TRegistry.Create;
try
Reg.RootKey := KEY_TYPE;
// 1. open HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
if Reg.OpenKey(KEY_NAME, False) then
begin
// 2. Get the value for that key
strDataRet := Reg.ReadString(KEY_VALUE);
Reg.CloseKey;
if strDataRet <> "" then
begin
// 3. Convert sDataRet to a number and subtract 1,
// convert back to a string, and write it to the registry
strDataRet2 := IntToStr(StrToInt(strDataRet) - 1);
if Reg.OpenKey(KEY_NAME, False) then
begin
Reg.WriteString(KEY_VALUE, strDataRet2);
Reg.CloseKey;
// 4. because the registry was changed, broadcast
// the fact passing SPI_SETNONCLIENTMETRICS,
// with a timeout of 10000 milliseconds (10 seconds)
BroadcastChanges;
// 5. the desktop will have refreshed with the
// new (shrunken) icon size. Now restore things
// back to the correct settings by again writing
// to the registry and posing another message.
if Reg.OpenKey(KEY_NAME, False) then
begin
Reg.WriteString(KEY_VALUE, strDataRet);
Reg.CloseKey;
// 6. broadcast the change again
BroadcastChanges;
Result := True;
end;
end;
end;
end;
finally
Reg.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RefreshScreenIcons
end;


{
The result is Window"s erasing all its icons, and recalculating them
based on the registry settings.
This means if you have changed a DefaultIcon key within the registry for
some application or file, Windows will display the new icon when the
refresh is completed.

Original source:
www.mvps.org/vbnet/index.html?code/reg/screenrefresh.htm
Translated from VB by Thomas Stutz
}



 
Ricks   (2003-02-07 22:52) [12]

Тоже самое, но в более человечком виде :-)

function RebuildIconChache:Boolean;
var R : TRegistry;
OldS : string;
NewS : string;
Ok : Cardinal;
begin
Result:=false;

R:=TRegistry.Create;
try
R.RootKey:=HKEY_CURRENT_USER;
if R.OpenKey("Control Panel\Desktop\WindowMetrics", false) then begin
OldS:=R.ReadString("Shell Icon size");
if OldS <> "" then begin
NewS:=IntToStr(StrToInt(OldS)-1);
R.WriteString("Shell Icon size", NewS);
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 10000, Ok);
R.WriteString("Shell Icon size", OldS);
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 10000, Ok);
Result:=true;
end;
end;
finally
R.Free;
end;
end;


 
aga   (2003-02-08 14:19) [13]

>>Ricks
>>DVM
ААА-ААА-А!!!СУпер!!А можете поделится где вы это достали??


 
aga   (2003-02-08 14:23) [14]

А... сорри.. уже понял...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.008 c
1-19677
Levova
2003-03-26 10:28
2003.04.07
string -> char


3-19436
grusty
2003-03-18 13:34
2003.04.07
Открытие файла базы данных, игнорируя индексный файл...


14-19757
petr_v_a
2003-03-22 17:33
2003.04.07
MSSQL 7 Все ли я правильно понял?


1-19664
Delphi-Beginner
2003-03-26 08:53
2003.04.07
Работа с динамической памятью


4-19919
Step[B.M.]
2003-02-09 16:20
2003.04.07
Смена фокуса компонентов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский