C# 获取当前打开的文件夹2

这一个则比较投机,准确性不能保证,可以参考:

这个类获取当前进程的句柄:

public class MyProcess

{

private bool haveMainWindow = false;

private IntPtr mainWindowHandle = IntPtr.Zero;

private int processId = 0;

private delegate bool EnumThreadWindowsCallback(IntPtr hWnd, IntPtr lParam);

public IntPtr GetMainWindowHandle(int processId)

{

if (!this.haveMainWindow)

{

this.mainWindowHandle = IntPtr.Zero;

this.processId = processId;

EnumThreadWindowsCallback callback = new EnumThreadWindowsCallback(this.EnumWindowsCallback);

EnumWindows(callback, IntPtr.Zero);

GC.KeepAlive(callback);

this.haveMainWindow = true;

}

return this.mainWindowHandle;

}

private bool EnumWindowsCallback(IntPtr handle, IntPtr extraParameter)

{

int num;

GetWindowThreadProcessId(new HandleRef(this, handle), out num);

if ((num == this.processId) && this.IsMainWindow(handle))

{

this.mainWindowHandle = handle;

return false;

}

return true;

}

private bool IsMainWindow(IntPtr handle)

{

return (!(GetWindow(new HandleRef(this, handle), 4) != IntPtr.Zero) && IsWindowVisible(new HandleRef(this, handle)));

}

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

private static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]

public static extern IntPtr GetWindow(HandleRef hWnd, int uCmd);

[DllImport("user32.dll", CharSet = CharSet.Auto)]

public static extern bool IsWindowVisible(HandleRef hWnd);

}

下面的类获取在资源管理器中打开的窗口,并且筛选出哪些为文件夹:

public class TaskManager

{

[DllImport("User32")]

private extern static int GetWindow(int hWnd, int wCmd);

[DllImport("User32")]

private extern static int GetWindowLongA(int hWnd, int wIndx);

[DllImport("user32", CharSet = CharSet.Auto)]

private extern static int GetWindowTextLength(IntPtr hWnd);

[DllImport("user32.dll")]

private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);

private const int GW_HWNDFIRST = 0;

private const int GW_HWNDNEXT = 2;

private const int GWL_STYLE = (-16);

private const int WS_VISIBLE = 268435456;

private const int WS_BORDER = 8388608;

private static List GetRunApplicationList(int handle)

{

try

{

List appString = new List();

int hwCurr;

hwCurr = GetWindow(handle, GW_HWNDFIRST);

while (hwCurr > 0)

{

int isTask = (WS_VISIBLE | WS_BORDER);

int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE);

bool taskWindow = ((lngStyle & isTask) == isTask);

if (taskWindow)

{

int length = GetWindowTextLength(new IntPtr(hwCurr));

StringBuilder sb = new StringBuilder(2 * length + 1);

GetWindowText(hwCurr, sb, sb.Capacity);

string strTitle = sb.ToString();

if (!string.IsNullOrEmpty(strTitle))

{

appString.Add(strTitle);

}

}

hwCurr = GetWindow(hwCurr, GW_HWNDNEXT);

}

return appString;

}

catch (Exception ex)

{

throw new ApplicationException("读取应用程序信息时出错:" + ex.Message);

}

}

public static void PrintAppliction()

{

int pid = Process.GetCurrentProcess().Id;

IntPtr handl = new MyProcess().GetMainWindowHandle(pid);

List applictions = GetRunApplicationList(handl.ToInt32());

if (applictions != null)

{

foreach (string app in applictions)

{

if (Directory.Exists(app))

{

Console.WriteLine(app);

}

}

}

}

}

C# 获取当前打开的文件夹2

时间: 2024-10-28 21:40:33

C# 获取当前打开的文件夹2的相关文章

C# 获取当前打开的文件夹

最近做一个项目,有一个功能点需要获取当前打开的文件夹,网上查资料+自己摸索,整理出如下代码,鉴于网上完整的代码比较少,顾贴出来,以供参考.如有更好的建议,欢迎留言. 因demo,故没有完整的异常验证,转载请注明出处~win7下测试通过,xp有点不一样,具体请用spy++查看 class Program { public delegate bool CallBack(int hwnd, int y); //该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数. //回调函数返回

C#项目打开/保存文件夹/指定类型文件,获取路径(转)

C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325/ 1.打开文件路径:                  OpenFileDialog ofd = new OpenFileDialog();                //new一个方法            ofd.Filter = "(*.et;*.xls;*.xlsx)|*.et;*.x

Unity 游戏框架搭建 2019 (五) 打开所在文件夹

在上一篇中我们搞定了直接导出的功能,这算是一个巨大的进步了.那么在这篇我们再接着往下分析. 这样我们目前的导出步骤为: 点击菜单栏 QFramework/4.导出 UnityPackage. 我们是不是没有可以优化的空间了? 对于导出步骤的数量来说,确实没有了.只需要一步就可以导出了.但是从一个所花费的时间角度来讲其实还有空间的.也就是说,我们还可以节省时间. 我们跳出导出步骤这个角度,而是思考下导出之后我们做了什么事情? 答案是:打开 unitypackage 所在的文件夹. 这步其实也比较耗

[转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件 折腾: C#中如何在右下角添加提示窗口,用于显示打开文件和文件夹 的过程中,需要实现,点击对应LinkLabel后,调用资源管理器,打开对应的文件夹. [

【分享】神风探索者[Kamikaze_☆_Explorer!]【汉化硬盘版】(带全CG存档+打开存档文件夹补丁)

[汉化硬盘版]神风探索者[Kamikaze_☆_Explorer!](带全CG存档+打开存档文件夹补丁 下载地址:http://www.bego.cc/file/93184792 http://www.bego.cc/file/93184795 http://www.bego.cc/file/93184798 http://www.bego.cc/file/93184801 BT鏡像版:  [110527] [Clochette] カミカゼ☆エクスプローラー!  下載地址:http://www.

怎样使用windows命令行,用notepad打开某文件夹下面的所有文件

http://zhidao.baidu.com/question/2138815012359999388.html ___________________________________________________ 我的提问: 在linux中,可以直接使用gedit 1.c 2.c 3.c ....直接打开多个文件:gedit * 打开当前文件夹下的所有文件. 请问,怎么使用windows命令,达到类似效果?假设我使用notepad作为文本编辑软件.1 打开当前文件夹下的所有文件2 打开当前

sharepoint 2013 获取文档库文件夹树形结构

sharepoint 2013 获取文档库文件夹树形结构 分类: sharepoint2013-07-15 06:40 5816人阅读 评论(0) 收藏 举报 在做sharepoint 2013或者sharepoint 2010文档库的过程中,经常会建很多的文件夹,不同类别存储不同文件,相当于文档的分类,这里主要是记录一下,将文档库的文件夹结构,绑定到treeview. protected  void  Page_Load(object sender,EventArgse) { if(!Page

explorer.exe总是重启导致打开的文件夹关闭

最近电脑出了个问题,联网后桌面总是重启,导致打开的文件夹总是重启(但是浏览器没事),很是烦人. 在网上搜了一下,找到了解决方法,这里共享一下. 先是win+x,选择事件查看器-Windows日志-应用程序,找到错误,下面是我的错误报告: 错误是由OverlayIcon64.dll导致的,但是又不能直接删掉,因为explorer.exe正在运行.但是我把explorer.exe进程删掉后电脑就黑屏了, 因为explorer.exe是文件资源管理器... 后来在这里找到了解决方法:http://zh

如何在Sublime中打开左侧文件夹导航

Sublime中我们可以通过菜单栏的View->Side Bar->Hide Side Bar(Show Side Bar)来显示和隐藏左侧的导航栏,如下图所示. 但是,这里只会显示当前打开的文件,那该怎样让它显示当前打开的文件夹呢,其实很简单,用鼠标将文件夹拖到Sublime里面,软件就会自动在左侧显示拖进来文件夹的目录结构(默认收索,鼠标单击即可展开),效果非常好,如下图所示