Scripts 学盟
标题:
一些可能一辈子都用不上的WindowsAPI及其使用方法
[打印本页]
作者:
俊俊
时间:
2011-7-13 18:32:33
标题:
一些可能一辈子都用不上的WindowsAPI及其使用方法
本帖最后由 cjqq0218 于 2011-7-13 18:44 编辑
更换墙纸
const int SPI_SETDESKWALLPAPER = 20 ;
const int SPIF_UPDATEINIFILE = 0x01;
const int SPIF_SENDWININICHANGE = 0x02;
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern int SystemParametersInfo (int uAction , int uParam , string lpvParam , int fuWinIni) ;
/// <summary>
/// 更换墙纸
/// </summary>
/// <param name="Path">临时文件路径</param>
internal static void ChangePaper(string Path)
{
//System.Windows.Forms.MessageBox.Show("ApI qian");
SystemParametersInfo( SPI_SETDESKWALLPAPER,
0,
Path,
SPIF_SENDWININICHANGE|SPIF_UPDATEINIFILE );
}
复制代码
移动无标题窗体
private const int WM_SysCommand = 0x0112;
private const int OneMsgNum = 0xf017;
[DllImport("user32")]
private static extern bool ReleaseCapture();
[DllImport("user32")]
private static extern bool PostMessage( IntPtr hWnd, int Mwg, int wParam, int lParam);
/// <summary>
/// 鼠标拖动窗体
/// </summary>
/// <param name="hwnd">窗体句柄</param>
internal static void MovieWindow(IntPtr hwnd)
{
ReleaseCapture();
PostMessage(hwnd, WM_SysCommand, OneMsgNum, 0);
}
复制代码
透明窗体常量定义以及函数的声明
const int GWL_EXSTYLE = (-20);
const int WS_EX_TRANSPARENT = 0x20;
const uint WS_EX_LAYERED = 0x80000;
const int LWA_ALPHA = 0x2;
[DllImport("user32", EntryPoint="SetWindowLong")]
private static extern uint SetWindowLong (
IntPtr hwnd,
int nIndex,
uint dwNewLong
);
[DllImport("user32", EntryPoint="GetWindowLong")]
private static extern uint GetWindowLong (
IntPtr hwnd,
int nIndex
);
[DllImport("user32", EntryPoint="SetLayeredWindowAttributes")]
private static extern int SetLayeredWindowAttributes (
IntPtr hwnd,
int crKey,
int bAlpha,
int dwFlags
);
/// <summary>
/// 透明窗体
/// </summary>
/// <param name="hwnd">窗体句柄</param>
/// <param name="Transparent">透明度(0~255)</param>
internal static void TransparentWindow(IntPtr hwnd,int Transparent)
{
uint intExTemp = GetWindowLong( hwnd , GWL_EXSTYLE );
uint oldGWLEx = SetWindowLong( hwnd , GWL_EXSTYLE , intExTemp | WS_EX_TRANSPARENT | WS_EX_LAYERED );
SetLayeredWindowAttributes( hwnd , 0 , Transparent , LWA_ALPHA);
}
复制代码
注册系统热键及释放
[System.Runtime.InteropServices.DllImport("user32.dll",EntryPoint = "RegisterHotKey")]
private static extern bool RegisterHotKey(IntPtr wnd, int id, int mode, System.Windows.Forms.Keys vk);
[System.Runtime.InteropServices.DllImport("user32.dll" ,EntryPoint = "UnregisterHotKey")]
private static extern bool UnregisterHotKey(IntPtr wnd, int id);
/// <summary>
/// 注册热键
/// </summary>
/// <param name="hwnd">要注册热键的窗体的句柄</param>
/// <returns>bool,true:成功,false:失败</returns>
internal static bool RegHotKey(IntPtr hwnd)
{
return RegisterHotKey(hwnd,159,3,System.Windows.Forms.Keys.Oemtilde);
}
/// <summary>
/// 释放热键
/// </summary>
/// <param name="hwnd">要取消热键的窗体的句柄</param>
/// <returns>bool,true:成功,false:失败</returns>
internal static bool unRegHotKey(IntPtr hwnd)
{
return UnregisterHotKey(hwnd,159);
}
复制代码
用默认程序打开(文件、程序、URL)
[DllImport("shell32.dll")]
private static extern int ShellExecute(IntPtr hwnd,string lpszOp,string lpszFile,string lpszParams,string lpszDir,int FsShowCmd);
/// <summary>
/// 用默认程序打开地址
/// </summary>
/// <param name="Address"></param>
internal static int OpenInterExploer(string UrlAddress)
{
return ShellExecute(IntPtr.Zero,"Open",UrlAddress,"","", 1);
}
复制代码
发送消息到指定句柄的窗口
[DllImport("user32")]
private static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
/// <summary>
/// 发送消息到指定句柄的窗口
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <returns></returns>
internal static int SendMessageToWindow(IntPtr hWnd , uint Msg)
{
int i = SendMessage( hWnd,Msg,0,0);
return i ;
}
/// <summary>
/// 发送消息到指定句柄的窗口(无需回应)
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <returns></returns>
internal static bool PostMessageToWindow(IntPtr hWnd , int Msg)
{
bool i = PostMessage( hWnd,Msg,0,0);
return i ;
}
复制代码
隐藏和显示桌面图标
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);
[DllImport("user32.dll",SetLastError=true)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll",SetLastError=true)]
private static extern IntPtr GetDesktopWindow();
const int SW_SHOW = 5;
const int SW_HIDE = 0;
/// <summary>
/// 隐藏和显示桌面图标
/// </summary>
/// <param name="YesOrNo">true表示显示,false表示隐藏</param>
internal static void ShowDiskTop(bool YesOrNo)
{
IntPtr Wnd = IntPtr.Zero;
Wnd = GetDesktopWindow();
Wnd = FindWindowEx(Wnd, IntPtr.Zero, "Progman",null);
if(YesOrNo)
{
ShowWindow(Wnd,SW_SHOW);
}
else
{
ShowWindow(Wnd,SW_HIDE);
}
Wnd = IntPtr.Zero;
}
复制代码
刷新桌面
[DllImport("user32.dll", EntryPoint = "RedrawWindow")]
private static extern bool RedrawWindow(int hWnd, IntPtr prect, IntPtr hrgnUpdate, uint flags);
/// <summary>
/// 刷新桌面
/// </summary>
/// <returns></returns>
internal static bool DiskTableReflsh()
{
return RedrawWindow(0, IntPtr.Zero, IntPtr.Zero, 4 | 1 | 128);
}
复制代码
作者:
混混@普宁.中国
时间:
2011-7-13 23:10:55
现在很少会用到 win api
作者:
混混@普宁.中国
时间:
2011-7-13 23:11:33
自己还是只能做一些很表层的开发
作者:
俊俊
时间:
2011-7-14 08:18:11
混混@普宁.中国 发表于 2011-7-13 23:10
现在很少会用到 win api
所以我说可能一辈子都用不上
作者:
那个谁
时间:
2011-7-14 08:33:20
不一定哦。。。。
作者:
嘟嘟
时间:
2011-7-17 09:33:59
我 表示路过 看看。。。
作者:
混混@普宁.中国
时间:
2011-7-18 18:08:19
较少用吧。。。觉得如果开发要用到 windows api
就不如直接 mfc 了,,不要用 .net
作者:
俊俊
时间:
2011-7-19 16:35:14
用api是因为.net中没有这些功能或用.net的方法实现起来比较麻烦,要不然微软干嘛要提供这个接口呢??
欢迎光临 Scripts 学盟 (http://www.iscripts.org/)
Powered by Discuz! X2