From fe0153be088d8f82877d7ea06b46364a556c68f5 Mon Sep 17 00:00:00 2001
From: Garulf <535299+Garulf@users.noreply.github.com>
Date: Wed, 15 Dec 2021 05:21:40 -0500
Subject: [PATCH] Initial commit
---
Flow.Launcher/Flow.Launcher.csproj | 33 ++++++++++++
Flow.Launcher/ViewModel/MainViewModel.cs | 65 +++++++++++++++++++++++-
2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index f431504c2..117dececf 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -77,6 +77,24 @@
Designer
PreserveNewest
+
+ 1
+ 1
+ eab22ac0-30c1-11cf-a7eb-0000c05bae0b
+ 0
+ tlbimp
+ false
+ true
+
+
+ 0
+ 1
+ 50a7e9b0-70ef-11d1-b75a-00a0c90564fe
+ 0
+ tlbimp
+ false
+ true
+
PreserveNewest
@@ -110,6 +128,21 @@
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index abf3a1d14..cbe35e0f5 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -20,7 +20,9 @@ using Flow.Launcher.Infrastructure.Logger;
using Microsoft.VisualStudio.Threading;
using System.Threading.Channels;
using ISavable = Flow.Launcher.Plugin.ISavable;
-
+using System.Runtime.InteropServices;
+using System.Text;
+using SHDocVw;
namespace Flow.Launcher.ViewModel
{
@@ -720,6 +722,62 @@ namespace Flow.Launcher.ViewModel
OpenResultCommandModifiers = _settings.OpenResultModifiers ?? DefaultOpenResultModifiers;
}
+ private static string GetActiveExplorerPath()
+ {
+ // get the active window
+ IntPtr handle = GetForegroundWindow();
+
+ // Required ref: SHDocVw (Microsoft Internet Controls COM Object) - C:\Windows\system32\ShDocVw.dll
+ ShellWindows shellWindows = new SHDocVw.ShellWindows();
+
+ // loop through all windows
+ foreach (InternetExplorer window in shellWindows)
+ {
+ // match active window
+ if (window.HWND == (int)handle)
+ {
+ // Required ref: Shell32 - C:\Windows\system32\Shell32.dll
+ var shellWindow = window.Document as Shell32.IShellFolderViewDual2;
+
+ // will be null if you are in Internet Explorer for example
+ if (shellWindow != null)
+ {
+ // Item without an index returns the current object
+ var currentFolder = shellWindow.Folder.Items().Item();
+
+ // special folder - use window title
+ // for some reason on "Desktop" gives null
+ if (currentFolder == null || currentFolder.Path.StartsWith("::"))
+ {
+ // Get window title instead
+ const int nChars = 256;
+ StringBuilder Buff = new StringBuilder(nChars);
+ if (GetWindowText(handle, Buff, nChars) > 0)
+ {
+ return Buff.ToString();
+ }
+ }
+ else
+ {
+ return currentFolder.Path;
+ }
+ }
+
+ break;
+ }
+ }
+
+ return null;
+ }
+
+ // COM Imports
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr GetForegroundWindow();
+
+ [DllImport("user32.dll")]
+ static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
+
public void ToggleFlowLauncher()
{
if (!MainWindowVisibilityStatus)
@@ -734,6 +792,9 @@ namespace Flow.Launcher.ViewModel
public void Show()
{
+ string _explorerPath = GetActiveExplorerPath();
+
+ ChangeQueryText($"{_explorerPath}\\>");
if (_settings.UseSound)
{
MediaPlayer media = new MediaPlayer();
@@ -749,6 +810,8 @@ namespace Flow.Launcher.ViewModel
((MainWindow)Application.Current.MainWindow).WindowAnimator();
MainWindowOpacity = 1;
+
+
}
public async void Hide()