Skip to content

Commit f5150d8

Browse files
committed
Convert Shlwapi interop code
1 parent 778f276 commit f5150d8

File tree

8 files changed

+44
-93
lines changed

8 files changed

+44
-93
lines changed

src/System.Windows.Forms.Primitives/src/Interop/Shlwapi/Interop.SHACF.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/System.Windows.Forms.Primitives/src/Interop/Shlwapi/Interop.SHAutoComplete.cs

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/System.Windows.Forms.Primitives/src/Interop/Shlwapi/Interop.SHLoadIndirectString.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/System.Windows.Forms.Primitives/src/NativeMethods.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ SetViewportOrgEx
224224
SetWindowExtEx
225225
SetWindowOrgEx
226226
SetWindowsHookEx
227+
SHAutoComplete
227228
SHCreateItemFromParsingName
228229
SHBrowseForFolder
229230
SHCreateShellItem
@@ -234,6 +235,7 @@ SHGetPathFromIDList
234235
SHGetSpecialFolderLocation
235236
ShowCursor
236237
SHGetSpecialFolderLocation
238+
SHLoadIndirectString
237239
SHParseDisplayName
238240
SIATTRIBFLAGS
239241
SIGDN
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
namespace Windows.Win32
6+
{
7+
internal static partial class PInvoke
8+
{
9+
public static HRESULT SHAutoComplete<T>(in T hwndEdit, SHELL_AUTOCOMPLETE_FLAGS flags) where T : IHandle<HWND>
10+
{
11+
HRESULT result = SHAutoComplete(hwndEdit.Handle, flags);
12+
GC.KeepAlive(hwndEdit.Wrapper);
13+
return result;
14+
}
15+
}
16+
}

src/System.Windows.Forms/src/System/Windows/Forms/ComboBox.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3315,7 +3315,7 @@ private void SetAutoComplete(bool reset, bool recreate)
33153315
{
33163316
if (AutoCompleteCustomSource.Count == 0)
33173317
{
3318-
Shlwapi.SHAutoComplete(new HandleRef(this, _childEdit.Handle), Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF);
3318+
PInvoke.SHAutoComplete(new HandleRef<HWND>(this, _childEdit.HWND), SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF);
33193319
}
33203320
else
33213321
{
@@ -3342,7 +3342,7 @@ private void SetAutoComplete(bool reset, bool recreate)
33423342
{
33433343
if (_itemsCollection.Count == 0)
33443344
{
3345-
Shlwapi.SHAutoComplete(new HandleRef(this, _childEdit.Handle), Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF);
3345+
PInvoke.SHAutoComplete(new HandleRef<HWND>(this, _childEdit.HWND), SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF);
33463346
}
33473347
else
33483348
{
@@ -3365,34 +3365,34 @@ private void SetAutoComplete(bool reset, bool recreate)
33653365
{
33663366
// Drop Down List special handling
33673367
Debug.Assert(DropDownStyle == ComboBoxStyle.DropDownList);
3368-
Shlwapi.SHAutoComplete(new HandleRef(this, _childEdit.Handle), Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF);
3368+
PInvoke.SHAutoComplete(new HandleRef<HWND>(this, _childEdit.HWND), SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF);
33693369
}
33703370
}
33713371
else
33723372
{
3373-
Shlwapi.SHACF mode = Shlwapi.SHACF.DEFAULT;
3373+
SHELL_AUTOCOMPLETE_FLAGS mode = SHELL_AUTOCOMPLETE_FLAGS.SHACF_DEFAULT;
33743374
if (AutoCompleteMode == AutoCompleteMode.Suggest)
33753375
{
3376-
mode |= Shlwapi.SHACF.AUTOSUGGEST_FORCE_ON | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF;
3376+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_ON | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF;
33773377
}
33783378

33793379
if (AutoCompleteMode == AutoCompleteMode.Append)
33803380
{
3381-
mode |= Shlwapi.SHACF.AUTOAPPEND_FORCE_ON | Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF;
3381+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_ON | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF;
33823382
}
33833383

33843384
if (AutoCompleteMode == AutoCompleteMode.SuggestAppend)
33853385
{
3386-
mode |= Shlwapi.SHACF.AUTOSUGGEST_FORCE_ON;
3387-
mode |= Shlwapi.SHACF.AUTOAPPEND_FORCE_ON;
3386+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_ON;
3387+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_ON;
33883388
}
33893389

3390-
Shlwapi.SHAutoComplete(new HandleRef(this, _childEdit.Handle), (Shlwapi.SHACF)AutoCompleteSource | mode);
3390+
PInvoke.SHAutoComplete(new HandleRef<HWND>(this, _childEdit.HWND), (SHELL_AUTOCOMPLETE_FLAGS)AutoCompleteSource | mode);
33913391
}
33923392
}
33933393
else if (reset)
33943394
{
3395-
Shlwapi.SHAutoComplete(new HandleRef(this, _childEdit.Handle), Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF);
3395+
PInvoke.SHAutoComplete(new HandleRef<HWND>(this, _childEdit.HWND), SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF);
33963396
}
33973397
}
33983398

src/System.Windows.Forms/src/System/Windows/Forms/InputLanguage.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Diagnostics;
66
using System.Diagnostics.CodeAnalysis;
77
using System.Globalization;
8-
using System.Text;
98
using Microsoft.Win32;
109
using Windows.Win32.UI.TextServices;
1110
using static Interop;
@@ -283,11 +282,16 @@ Look in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\000
283282
{
284283
if (layoutDisplayName is not null)
285284
{
286-
var sb = new StringBuilder(512);
287-
HRESULT res = Shlwapi.SHLoadIndirectString(layoutDisplayName, sb, (uint)sb.Capacity, IntPtr.Zero);
288-
if (res == HRESULT.S_OK)
285+
unsafe
289286
{
290-
return sb.ToString();
287+
int len = 512;
288+
var ppvReserved = (void*)IntPtr.Zero;
289+
PWSTR buffer = stackalloc char[len];
290+
HRESULT res = PInvoke.SHLoadIndirectString(layoutDisplayName, buffer, (uint)len, ref ppvReserved);
291+
if (res == HRESULT.S_OK)
292+
{
293+
return new string(buffer.AsSpan().SliceAtFirstNull());
294+
}
291295
}
292296
}
293297

src/System.Windows.Forms/src/System/Windows/Forms/TextBox.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -796,24 +796,24 @@ private void SetAutoComplete(bool reset)
796796
{
797797
if (IsHandleCreated)
798798
{
799-
Shlwapi.SHACF mode = Shlwapi.SHACF.DEFAULT;
799+
SHELL_AUTOCOMPLETE_FLAGS mode = SHELL_AUTOCOMPLETE_FLAGS.SHACF_DEFAULT;
800800
if (AutoCompleteMode == AutoCompleteMode.Suggest)
801801
{
802-
mode |= Shlwapi.SHACF.AUTOSUGGEST_FORCE_ON | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF;
802+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_ON | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF;
803803
}
804804

805805
if (AutoCompleteMode == AutoCompleteMode.Append)
806806
{
807-
mode |= Shlwapi.SHACF.AUTOAPPEND_FORCE_ON | Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF;
807+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_ON | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF;
808808
}
809809

810810
if (AutoCompleteMode == AutoCompleteMode.SuggestAppend)
811811
{
812-
mode |= Shlwapi.SHACF.AUTOSUGGEST_FORCE_ON;
813-
mode |= Shlwapi.SHACF.AUTOAPPEND_FORCE_ON;
812+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_ON;
813+
mode |= SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_ON;
814814
}
815815

816-
Shlwapi.SHAutoComplete(this, (Shlwapi.SHACF)AutoCompleteSource | mode);
816+
PInvoke.SHAutoComplete(this, (SHELL_AUTOCOMPLETE_FLAGS)AutoCompleteSource | mode);
817817
}
818818
}
819819
}
@@ -830,7 +830,7 @@ private void ResetAutoComplete(bool force)
830830
{
831831
if ((AutoCompleteMode != AutoCompleteMode.None || force) && IsHandleCreated)
832832
{
833-
Shlwapi.SHAutoComplete(this, (Shlwapi.SHACF)AutoCompleteSource.AllSystemSources | Shlwapi.SHACF.AUTOSUGGEST_FORCE_OFF | Shlwapi.SHACF.AUTOAPPEND_FORCE_OFF);
833+
PInvoke.SHAutoComplete(this, (SHELL_AUTOCOMPLETE_FLAGS)AutoCompleteSource.AllSystemSources | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOSUGGEST_FORCE_OFF | SHELL_AUTOCOMPLETE_FLAGS.SHACF_AUTOAPPEND_FORCE_OFF);
834834
}
835835
}
836836

0 commit comments

Comments
 (0)