Skip to content

Commit e3a29fb

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

File tree

7 files changed

+32
-74
lines changed

7 files changed

+32
-74
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.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

src/System.Windows.Forms.Primitives/src/Interop/Shlwapi/Interop.SHAutoComplete.cs renamed to src/System.Windows.Forms.Primitives/src/Windows/Win32/PInvoke.SHAutoComplete.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,18 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System.Runtime.InteropServices;
6-
7-
internal static partial class Interop
5+
namespace Windows.Win32
86
{
9-
internal static partial class Shlwapi
7+
internal static partial class PInvoke
108
{
11-
[DllImport(Libraries.Shlwapi, ExactSpelling = true)]
12-
public static extern HRESULT SHAutoComplete(IntPtr hwndEdit, SHACF flags);
13-
14-
public static HRESULT SHAutoComplete(IHandle hwndEdit, SHACF flags)
9+
public static HRESULT SHAutoComplete(IHandle<HWND> hwndEdit, SHELL_AUTOCOMPLETE_FLAGS flags)
1510
{
1611
HRESULT result = SHAutoComplete(hwndEdit.Handle, flags);
1712
GC.KeepAlive(hwndEdit);
1813
return result;
1914
}
2015

21-
public static HRESULT SHAutoComplete(HandleRef hwndEdit, SHACF flags)
16+
public static HRESULT SHAutoComplete(HandleRef<HWND> hwndEdit, SHELL_AUTOCOMPLETE_FLAGS flags)
2217
{
2318
HRESULT result = SHAutoComplete(hwndEdit.Handle, flags);
2419
GC.KeepAlive(hwndEdit.Wrapper);

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)