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

}

}

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

  1. Windows API 常用函数

    .Net中虽然类库很强的,但还是有些时候功能有限,掌握常用的api函数,会给我们解决问题提供另一种思路,下面给出自己常用到的Api函数,以备查询. 知道api函数,但却不知道c#或VB.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. MySQL常用函数 转载

    一.数学函数ABS(x)                    返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x)                返 ...

随机推荐

  1. vue 中 限制 input 输入数字、小数位数等

    限制小数位数 <input type="number" @keydown="handleInput2" placeholder="请输入或查看& ...

  2. web.xml中的welcome-file-list标签作用

    welcome-file-list是一个配置在web.xml中的一个欢迎页,用于当用户在url中输入项目名称或者输入web容器url(如http://localhost:8080/)时直接跳转的页面. ...

  3. replace() 方法用在字符串中用一些字符替换另一些字符实例

    后台给返回的格式是这样的 控制台打印出来格式是这样的 现在需要将这个字符串的数据显示在界面上,1-网站:2-APP:3-客户端 for(var i = 0; i < list.length; i ...

  4. 吴裕雄 python 神经网络——TensorFlow训练神经网络:全模型

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...

  5. 关于Debug Assertion Failed问题

    书上代码: #include<stdio.h> #include<stdlib.h> /* 提供malloc().free()函数 */ #include<string. ...

  6. php 高级 多台web服务器共享session的方法

    解决多台web服务器共享session的问题,至少有以下三种方法:   一.将本该保存在web服务器磁盘上的session数据保存到cookie中 即用cookie会话机制替代session会话机制, ...

  7. springboot中关于datasource的配置

    datasource spring.dao.exceptiontranslation.enabled: 是否开启PersistenceExceptionTranslationPostProcessor ...

  8. C++运算符重载复习

    本人理解运算符重载实质 就类似函数重载   运算符重载都可以写成一个函数 里面传入参数 来调用 运算符重载不是必须的 但是重载后会方便很多. 小例子 一个类实现 ++  和+某个数重载 大于号重载  ...

  9. 五 Spring的配置:Bean的配置,生命周期和作用范围

    Bean相关的配置: <bean>标签的id和name的配置: id:使用了约束中的唯一约束,里面不能出现特殊字符 name:没有使用唯一约束,理论上可以重复,实际上开发不行,里面可以出现 ...

  10. 十五 OGNL的入门

    一.访问对象的方法