zoukankan      html  css  js  c++  java
  • Windows API 常用函数---转载

    Windows API 常用函数

    2014-10-15 14:21  xiashengwang  阅读(2105)  评论(0)  编辑  收藏

    .Net中虽然类库很强的,但还是有些时候功能有限,掌握常用的api函数,会给我们解决问题提供另一种思路,下面给出自己常用到的Api函数,以备查询。

    知道api函数,但却不知道c#或VB.net该如何声明,可以查询这个网站:http://pinvoke.net/

    1,SetForegroundWindow

    将窗口显示到最前面,前提是窗口没有最小化。

    [DllImport("User32.dll")]

    public static extern bool SetForegroundWindow(IntPtr hWnd);

    2,ShowWindowAsync

    显示窗口,如最小化后显示正常,这是异步的。

    [DllImport("User32.dll")]

    public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);

    public enum ShowState : int

    {

    SW_HIDE = 0,

    SW_SHOWNORMAL = 1,

    SW_NORMAL = 1,

    SW_SHOWMINIMIZED = 2,

    SW_SHOWMAXIMIZED = 3,

    SW_MAXIMIZE = 3,

    SW_SHOWNOACTIVATE = 4,

    SW_SHOW = 5,

    SW_MINIMIZE = 6,

    SW_SHOWMINNOACTIVE = 7,

    SW_SHOWNA = 8,

    SW_RESTORE = 9,

    SW_SHOWDEFAULT = 10,

    SW_FORCEMINIMIZE = 11,

    SW_MAX = 11

    }

    3,SendMessage

    进程间通信,接受窗口要有消息循环才行。WM_COPYDATA

    public const int WM_COPYDATA = 0x004A;

    public struct COPYDATASTRUCT

    {

    public IntPtr dwData;

    public int cbData;

    [MarshalAs(UnmanagedType.LPStr)]

    public string lpData;

    }

    [DllImport("User32.dll", EntryPoint = "SendMessage")]

    public static extern int SendMessage(

    IntPtr hWnd, // handle to destination window

    int Msg, // message

    int wParam, // first message parameter

    ref COPYDATASTRUCT lParam // second message parameter

    );

    例子:

    发送方:

    byte[] sarr = System.Text.Encoding.Default.GetBytes(args[0]);

    Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT();

    copyData.cbData = sarr.Length + 1;

    copyData.lpData = args[0];

    copyData.dwData = (IntPtr)100; //这里随便写什么数字

    Winn32.SendMessage(runningInstance.MainWindowHandle, Winn32.WM_COPYDATA, 0, ref copyData);

    接收方

    protected override void DefWndProc(ref Message m)

    {

    if (m.Msg == Winn32.WM_COPYDATA)

    {

    Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT();

    Type type = copyData.GetType();

    copyData = (Winn32.COPYDATASTRUCT)m.GetLParam(type);

    this.textBox1.Text = copyData.lpData;

    }

    base.DefWndProc(ref m);

    }

    4,FindWindow

    找到窗口句柄

    [DllImport("User32.dll", EntryPoint = "FindWindow")]

    private static extern int FindWindow(string lpClassName, string lpWindowName);

    5,SetLocalTime

    设定系统时间

    [StructLayout(LayoutKind.Sequential)]

    public struct SYSTEMTIME

    {

    public ushort wYear;

    public ushort wMonth;

    public ushort wDayOfWeek;

    public ushort wDay;

    public ushort wHour;

    public ushort wMinute;

    public ushort wSecond;

    public ushort wMilliseconds;

    public void FromDateTime(DateTime dateTime)

    {

    wYear = (ushort)dateTime.Year;

    wMonth = (ushort)dateTime.Month;

    wDayOfWeek = (ushort)dateTime.DayOfWeek;

    wDay = (ushort)dateTime.Day;

    wHour = (ushort)dateTime.Hour;

    wMinute = (ushort)dateTime.Minute;

    wSecond = (ushort)dateTime.Second;

    wMilliseconds = (ushort)dateTime.Millisecond;

    }

    public DateTime ToDateTime()

    {

    return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond);

    }

    }

    [DllImport("kernel32.dll")]

    public static extern bool SetLocalTime(ref SYSTEMTIME Time);

    6,SHGetFileInfo

    获取执行文件的图标icon

    [Flags]

    enum SHGFI : int

    {

    /// <summary>get icon</summary>

    Icon = 0x000000100,

    /// <summary>get display name</summary>

    DisplayName = 0x000000200,

    /// <summary>get type name</summary>

    TypeName = 0x000000400,

    /// <summary>get attributes</summary>

    Attributes = 0x000000800,

    /// <summary>get icon location</summary>

    IconLocation = 0x000001000,

    /// <summary>return exe type</summary>

    ExeType = 0x000002000,

    /// <summary>get system icon index</summary>

    SysIconIndex = 0x000004000,

    /// <summary>put a link overlay on icon</summary>

    LinkOverlay = 0x000008000,

    /// <summary>show icon in selected state</summary>

    Selected = 0x000010000,

    /// <summary>get only specified attributes</summary>

    Attr_Specified = 0x000020000,

    /// <summary>get large icon</summary>

    LargeIcon = 0x000000000,

    /// <summary>get small icon</summary>

    SmallIcon = 0x000000001,

    /// <summary>get open icon</summary>

    OpenIcon = 0x000000002,

    /// <summary>get shell size icon</summary>

    ShellIconSize = 0x000000004,

    /// <summary>pszPath is a pidl</summary>

    PIDL = 0x000000008,

    /// <summary>use passed dwFileAttribute</summary>

    UseFileAttributes = 0x000000010,

    /// <summary>apply the appropriate overlays</summary>

    AddOverlays = 0x000000020,

    /// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>

    OverlayIndex = 0x000000040,

    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]

    public struct SHFILEINFO

    {

    public SHFILEINFO(bool b)

    {

    hIcon = IntPtr.Zero;

    iIcon = 0;

    dwAttributes = 0;

    szDisplayName = "";

    szTypeName = "";

    }

    public IntPtr hIcon;

    public int iIcon;

    public uint dwAttributes;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]

    public string szDisplayName;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]

    public string szTypeName;

    };

    [DllImport("shell32.dll", CharSet = CharSet.Unicode)]//路径有中文字符,要用unicode

    public static extern int SHGetFileInfo(

    string pszPath,

    int dwFileAttributes,

    out SHFILEINFO psfi,

    uint cbfileInfo,

    SHGFI uFlags);

    例子:

    private static Icon GetIcon(string strPath, bool bSmall)

    {

    SHFILEINFO info = new SHFILEINFO(true);

    int cbFileInfo = Marshal.SizeOf(info);

    SHGFI flags;

    if (bSmall)

    flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;

    else

    flags = SHGFI.Icon | SHGFI.LargeIcon;

    Win32API.SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);

    return Icon.FromHandle(info.hIcon);

    }

    7,GetWindowThreadProcessId

    得到句柄的进程和线程ID,返回的是线程ID,ref返回的是进程ID

    [System.Runtime.InteropServices.DllImport("User32.dll")]

    private static extern int GetWindowThreadProcessId(int Hwnd, ref int OutPressId);

    例子:杀死excel进程

    int processID = 0;

    int threadID;

    threadID = GetWindowThreadProcessId(excelApp.Hwnd, ref processID);

    if (processID > 0)

    {

    System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(processID);

    if (process != null)

    {

    process.Kill();

    }

    }

  • 相关阅读:
    让PHP程序永远在后台运行
    discuz3.2x增加邮箱验证功能
    UML类图几种关系的总结
    UML中九种图的理解
    什么是UML类图
    仿了么项目,商品详情页开发
    仿饿了么项目,右侧商品组件动画,以及和购物车组件的联动效果,小球掉落效果
    外卖项目底部购物车组件编写
    仿饿了么外卖项目better-scroll插件的实战
    vue项目如何在手机上测试
  • 原文地址:https://www.cnblogs.com/bedfly/p/12154034.html
Copyright © 2011-2022 走看看