mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-04-25 22:29:47 +08:00
create a setup builder impl from MicaSetup
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace MicaSetup.Shell.Dialogs;
|
||||
|
||||
#pragma warning disable CS8618
|
||||
|
||||
internal class ChangeNotifyLock
|
||||
{
|
||||
private readonly uint _event = 0;
|
||||
|
||||
internal ChangeNotifyLock(Message message)
|
||||
{
|
||||
var lockId = Shell32.SHChangeNotification_Lock(
|
||||
message.WParam, (int)message.LParam, out var pidl, out _event);
|
||||
try
|
||||
{
|
||||
Trace.TraceInformation("Message: {0}", (ShellObjectChangeTypes)_event);
|
||||
|
||||
var notifyStruct = pidl.MarshalAs<ShellNotifyStruct>();
|
||||
|
||||
var guid = new Guid(ShellIIDGuid.IShellItem2);
|
||||
if (notifyStruct.item1 != 0 &&
|
||||
(((ShellObjectChangeTypes)_event) & ShellObjectChangeTypes.SystemImageUpdate) == ShellObjectChangeTypes.None)
|
||||
{
|
||||
if (CoreErrorHelper.Succeeded(Shell32.SHCreateItemFromIDList(
|
||||
notifyStruct.item1, ref guid, out var nativeShellItem)))
|
||||
{
|
||||
nativeShellItem.GetDisplayName(ShellItemDesignNameOptions.FileSystemPath,
|
||||
out var name);
|
||||
ItemName = name;
|
||||
|
||||
Trace.TraceInformation("Item1: {0}", ItemName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ImageIndex = (int)notifyStruct.item1;
|
||||
}
|
||||
|
||||
if (notifyStruct.item2 != 0)
|
||||
{
|
||||
if (CoreErrorHelper.Succeeded(Shell32.SHCreateItemFromIDList(
|
||||
notifyStruct.item2, ref guid, out var nativeShellItem)))
|
||||
{
|
||||
nativeShellItem.GetDisplayName(ShellItemDesignNameOptions.FileSystemPath,
|
||||
out var name);
|
||||
ItemName2 = name;
|
||||
|
||||
Trace.TraceInformation("Item2: {0}", ItemName2);
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (lockId != 0)
|
||||
{
|
||||
Shell32.SHChangeNotification_Unlock(lockId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool FromSystemInterrupt => ((ShellObjectChangeTypes)_event & ShellObjectChangeTypes.FromInterrupt)
|
||||
!= ShellObjectChangeTypes.None;
|
||||
|
||||
public int ImageIndex { get; private set; }
|
||||
public string ItemName { get; private set; }
|
||||
public string ItemName2 { get; private set; }
|
||||
|
||||
public ShellObjectChangeTypes ChangeType => (ShellObjectChangeTypes)_event;
|
||||
}
|
||||
Reference in New Issue
Block a user