[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]怎么用powershell来调用api刷新桌面?

本帖最后由 czjt1234 于 2024-12-28 15:16 编辑
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  3. Private Const WM_KEYDOWN = &H100
  4. Private Sub Main()
  5.     Dim Desktop As Long
  6.     Desktop = FindWindow("Progman", "Program Manager")
  7.     PostMessage Desktop, WM_KEYDOWN, vbKeyF5, 0
  8. End Sub
复制代码
vb里面这个可以刷新桌面
怎么用powershell来调用这两个api?

QQ 20147578

本帖最后由 jyswjjgdwtdtj 于 2024-12-27 22:40 编辑

ps可以用addtype用csharp导入api函数 后面的操作就一样了
或许可以试试shall.application的verb也可以assoc随便修改一个后缀名 会刷新图标 进而刷新桌面
你好

TOP

  1. Add-Type -TypeDefinition @'
  2. Imports System
  3. Imports System.Runtime.InteropServices
  4. Namespace MyCode
  5.     Public Module Win32
  6.         ' 定义常量
  7.         Public Const WM_KEYDOWN As Integer = &H100
  8.         Public Const VK_F5 As Integer = &H74
  9.         ' 导入 FindWindow 函数
  10.         <DllImport("user32.dll", CharSet:=CharSet.Auto)>
  11.         Public Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
  12.         End Function
  13.         ' 导入 PostMessage 函数
  14.         <DllImport("user32.dll", CharSet:=CharSet.Auto)>
  15.         Public Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
  16.         End Function
  17.         ' 导入 GetDesktopWindow 函数
  18.         <DllImport("user32.dll", CharSet:=CharSet.Auto)>
  19.         Public Function GetDesktopWindow() As IntPtr
  20.         End Function
  21.     End Module
  22. End Namespace
  23. '@ -Language VisualBasic
  24. $progman = [MyCode.Win32]::FindWindow("Progman", "Program Manager")
  25. [MyCode.Win32]::PostMessage($progman, [MyCode.Win32]::WM_KEYDOWN, [MyCode.Win32]::VK_F5, 0)
复制代码
微信:flashercs
QQ:49908356

TOP

  1. Add-Type -TypeDefinition @'
  2. using System;
  3. using System.Runtime.InteropServices;
  4. namespace MyCode
  5. {
  6.   public static class Win32
  7.   {
  8.     public const int WM_KEYDOWN = 0x100;
  9.     public const int VK_F5 = 0x74;
  10.     [DllImport("user32.dll", CharSet = CharSet.Auto)]
  11.     public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  12.     [DllImport("user32.dll",CharSet = CharSet.Auto)]
  13.     [return: MarshalAs(UnmanagedType.Bool)]
  14.     public static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
  15.     [DllImport("user32.dll",CharSet = CharSet.Auto)]
  16.     public static extern IntPtr GetDesktopWindow();
  17.   }
  18. }
  19. '@
  20. $progman = [MyCode.Win32]::FindWindow("Progman", "Program Manager")
  21. [MyCode.Win32]::PostMessage($progman, [MyCode.Win32]::WM_KEYDOWN, [MyCode.Win32]::VK_F5, 0)
复制代码
微信:flashercs
QQ:49908356

TOP

回复 4# flashercs


    谢谢

QQ 20147578

TOP

返回列表