.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();

}

}

Windows API 常用函数的更多相关文章

  1. Windows API 常用函数---转载

    Windows API 常用函数 2014-10-15 14:21  xiashengwang  阅读(2105)  评论(0)  编辑  收藏 .Net中虽然类库很强的,但还是有些时候功能有限,掌握 ...

  2. Windows API常用函数

    转自:http://www.cnblogs.com/xiashengwang/p/4026259.html .NET中虽然类库很强,但还是有些时候功能有限,掌握常用的api函数, 会给我们解决问题提供 ...

  3. 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

    使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程 http://blog.csdn.net/liujiayu2/article/details/5 ...

  4. Appium——api常用函数

    appium常用函数介绍:   获取页面信息:   1. def get_current_activity(cls, driver): ''' 获取当前页面的activity :param drive ...

  5. VC API常用函数简单例子大全(1-89)

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCST ...

  6. winform窗体之间通过 windows API SendMessage函数传值

    -----------------------------------------------------------‘接收窗体’代码.cs------------------------------ ...

  7. windows 编程—— 常用函数 与 操作

    目录: MessageBox() 和 PlaySound() 获得窗口 或屏幕大小 获得字体大小 输出文字 屏蔽和显示控制台窗口 1. MessageBox() 和 PlaySound() Messa ...

  8. C++使用Windows API CreateMutex函数多线程编程

    C++中也可以使用Windows 系统中对应的API函数进行多线程编程.使用CreateThread函数创建线程,并且可以通过CreateMutex创建一个互斥量实现线程间数据的同步: #includ ...

  9. windows API普通函数跟回调函数有何区别

    通俗点讲:1.普通函数(假设我们都是函数)你卖电脑,我买电脑,我给你钱(调用你)后,你给我电脑(得到返回值).这种情况下,我给钱后就不能走开,必须等你把电脑给我,否则你交货的时候可能找不到人.2.回调 ...

随机推荐

  1. 常用的代码之一:用StopWatch计算代码运行花费的时间。

    先引用Diagnostics using System.Diagnostics; 然后: Stopwatch stopWatch = new Stopwatch(); stopWatch.Start( ...

  2. java appium webview切换处理

    Set<String> contexts = driver.getContextHandles(); for(String item :contexts){ // NATIVE_APP / ...

  3. win8.1安装驱动出现“文件的哈希值不在指定的目录”的解决办法[zz]

    1.鼠标移到右下角,点击“设置”,再点击“更改电脑设置”2.点击最后一个“更新和回复”,再点击“恢复”3.点击“恢复”之后,在右边点击高级启动下面的“重新启动”4.等一会会出现几个选项,点击“疑难解答 ...

  4. JS 工具函数 方法(其中js的crc32和php的crc32区别)

    var util = {}; util.indexOf = function (array, item) { for (var i = 0; i < array.length; i++) { i ...

  5. 是时候用PerconaDB替换MySQL了

    Percona数据库服务器是MySQL的增强版,替代MySQL并不复杂. 一.PerconaDB的特性 1)查询速度更快,数据的一致性更好 2)服务器运行及其稳定 3)可以延迟分片,或者避免分片 4) ...

  6. MySql(十九):基础——自定义存储过程和函数

    MYSQL中创建存储过程和函数分别使用CREATE PROCEDURE和CREATE FUNCTION 使用CALL语句来调用存储过程,存储过程也可以调用其他存储过程 函数可以从语句外调用,能返回标量 ...

  7. 防CSRF攻击:一场由重复提交的问题引发的前端后端测试口水战

    重复提交,这是一直以来都会存在的问题,当在网站某个接口调用缓慢的时候就会有可能引起表单重复提交的问题,不论form提交,还是ajax提交都会有这样的问题,最近在某社交app上看到这么一幕,这个团队没有 ...

  8. 关于iPhone音频的那些事

    音频文件(Audio File) 1.有两个概念(1).文件格式(File Format or Audio Containers)——描述文件本身的格式,里面的音频数据可以用不同的编码格式.例如:ca ...

  9. 每日英语:China Destroys Six Tons of Confiscated Ivory

    BEIJING—Chinese government officials destroyed more than six tons of ivory that had been illegally s ...

  10. js生成二维码实例

    <!DOCTYPE html><html><head>    <title></title>    <meta charset=&qu ...