|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Обновление элементов интерфейса .dll |
|
|
C/C++ - [решено] Обновление элементов интерфейса .dll
|
|
Пользователь Сообщения: 76 |
Добрый вечер! Пишу небольшой проект в ams (lua), у меня есть настройки которые только после перезапуска проводника, меню пуск, dwm применяются. Нашел интересный скрипт на powershell. Но на более менее старых компьютерах и ноутбуков выполняется до 10сек и больше. В AMS есть возможность подключить по запросу dll и вызвать функцию. Не поможете собрать на C#, C++ данный скрипт? Пользовался онлайн компиляторами, из 30 два наверное смогли без ошибок собрать, но чтобы скачать там начинается, премиум и т.п. Вот скрипт на ps:
# Restart Start menu
# Перезапустить меню "Пуск"
Stop-Process -Name StartMenuExperienceHost -Force
# Refresh desktop icons, environment variables and taskbar without restarting File Explorer
# Обновить иконки рабочего стола, переменные среды и панель задач без перезапуска "Проводника"
$UpdateEnvExplorerAPI = @{
Namespace = "WinAPI"
Name = "UpdateEnvExplorer"
Language = "CSharp"
MemberDefinition = @"
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
private const int WM_SETTINGCHANGE = 0x1a;
private const int SMTO_ABORTIFHUNG = 0x0002;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern IntPtr SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, string lParam, int fuFlags, int uTimeout, IntPtr lpdwResult);
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
public static void Refresh()
{
// Update desktop icons
SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
// Update environment variables
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 100, IntPtr.Zero);
// Update taskbar
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, "TraySettings");
}
"@
}
IF (-not ("WinAPI.UpdateEnvExplorer" -as [type]))
{
Add-Type @UpdateEnvExplorerAPI
}
[WinAPI.UpdateEnvExplorer]::Refresh()
// Framework: .NET Framework
// Technology Stack: WinAPI
// Restart Start menu
// Перезапустить меню "Пуск"
System.Diagnostics.Process.Start("taskkill", "/F /IM StartMenuExperienceHost.exe");
// Refresh desktop icons, environment variables and taskbar without restarting File Explorer
// Обновить иконки рабочего стола, переменные среды и панель задач без перезапуска "Проводника"
using System;
using System.Runtime.InteropServices;
namespace WinAPI
{
public static class UpdateEnvExplorer
{
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
private const int WM_SETTINGCHANGE = 0x1a;
private const int SMTO_ABORTIFHUNG = 0x0002;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern IntPtr SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, string lParam, int fuFlags, int uTimeout, IntPtr lpdwResult);
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
public static void Refresh()
{
// Update desktop icons
SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
// Update environment variables
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 100, IntPtr.Zero);
// Update taskbar
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, "TraySettings");
}
}
}
// Call the Refresh method to perform the updates
WinAPI.UpdateEnvExplorer.Refresh();
|
|
|
Отправлено: 17:30, 13-12-2024 |
|
Deadooshka Сообщения: 2565
|
Профиль | Отправить PM | Цитировать https://godbolt.org/z/coK4veEz6
если .net установлен, то компилятор там есть (примерно c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe или в папке Framework64, если система 64-битная) |
|
Отправлено: 08:09, 14-12-2024 | #2 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Цитата Sham:
|
|
|
Отправлено: 12:09, 14-12-2024 | #3 |
|
Пользователь Сообщения: 76
|
Профиль | Отправить PM | Цитировать Цитата a1ek9:
Не подскажешь еще момент, убрал лишнее с скрипта PS, теперь компиляция завершается неудачей. $UpdateEnvExplorerAPI = @{
Namespace = "WinAPI";
Name = "UpdateEnvExplorer";
Language = "CSharp";
MemberDefinition = @"
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
private const int WM_SETTINGCHANGE = 0x1a;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);
public static void Refresh()
{
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, "TraySettings");
}
"@
}
IF (-not ("WinAPI.UpdateEnvExplorer" -as [type]))
{
Add-Type @UpdateEnvExplorerAPI
}
[WinAPI.UpdateEnvExplorer]::Refresh()
поля или методы). p.s. Исправил, вот как надо было // Framework: .NET
using System;
using System.Runtime.InteropServices;
namespace WinAPI
{
public static class UpdateEnvExplorer
{
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
private const int WM_SETTINGCHANGE = 0x1a;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);
public static void Refresh()
{
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, "TraySettings");
}
}
class Program
{
static void Main()
{
if (Type.GetType("WinAPI.UpdateEnvExplorer") == null)
{
// Type not found, handle accordingly if needed.
}
UpdateEnvExplorer.Refresh();
}
}
}
|
|
|
Последний раз редактировалось a1ek9, 14-12-2024 в 17:35. Отправлено: 17:18, 14-12-2024 | #4 |
|
Deadooshka Сообщения: 2565
|
Профиль | Отправить PM | Цитировать и короче можно, зачем классы городить
|
|
|
Отправлено: 19:05, 14-12-2024 | #5 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Интерфейс - Изменение элементов интерфейса в Windows 7 | MilesEdgeworth07 | Microsoft Windows 7 | 0 | 16-07-2021 10:55 | |
| Интерфейс - [решено] Размер элементов интерфейса/кнопки управления окном | pandarianin | Microsoft Windows 8 и 8.1 | 2 | 15-06-2016 03:04 | |
| Помогите сбить перехватчиков c user32.dll, advapi32.dll, netapi.dll | Pr0ga | Лечение систем от вредоносных программ | 3 | 26-06-2010 18:06 | |
| Ошибка - точка входа в процедуру не найдена в библиотеке DLL Core.dll | Finch000 | Microsoft Windows 2000/XP | 7 | 07-09-2009 04:03 | |
| Разное - [решено] dwmapi.dll; mpr.dll; shlwapi.dll | Reset5 | Microsoft Windows 2000/XP | 2 | 14-06-2008 16:31 | |
|