Board logo

标题: [问题求助] [已解决]怎么用powershell来调用api刷新桌面? [打印本页]

作者: czjt1234    时间: 2024-12-27 21:39     标题: [已解决]怎么用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?
作者: jyswjjgdwtdtj    时间: 2024-12-27 22:34

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

ps可以用addtype用csharp导入api函数 后面的操作就一样了
或许可以试试shall.application的verb也可以assoc随便修改一个后缀名 会刷新图标 进而刷新桌面
作者: flashercs    时间: 2024-12-28 14:49

  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    时间: 2024-12-28 14:51

  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)
复制代码

作者: czjt1234    时间: 2024-12-28 14:55

回复 4# flashercs


    谢谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2