我有一段VB.NET的,转换一下应该就能用
              Dim  sk  As  SendKeys  
               sk.Send("{PRTSC}")  
               Application.DoEvents()  
               Dim  iData  As  IDataObject  =  Clipboard.GetDataObject()  
               Dim  p  As  Bitmap  =  CType(iData.GetData(DataFormats.Bitmap),  Bitmap)  
               p.GetPixel(15,  15)'颜色

解决方案 »

  1.   

    忘了加一句要把窗体放到剪贴板,用bitmap取出
      

  2.   

    那样效率太低了,这个函数:  COLORREF GetPixel(HDC hdc, int nXPos, int nYPos)在C#里COLORREF怎么定义,用Color出错,用int定义取不到值怎么做?
      

  3.   

    C#里代码
    Color pixelColor = myBitmap.GetPixel(50, 50);
    我想应该要转化为bitmap.
      

  4.   

    函数功能:该函数检索指定坐标点的像素的RGB颜色值。    函数原型:;COLORREF GetPixel(HDC hdc, int nXPos, int nYPos)    参数:    hdc:设备环境句柄。    nXPos:指定要检查的像素点的逻辑X轴坐标。    nYPos:指定要检查的像素点的逻辑Y轴坐标。    返回值:返回值是该象像点的RGB值。如果指定的像素点在当前剪辑区之外;那么返回值是CLR_INVALID。    备注:该像素点必须在当前剪辑区的边界之内。并不是所有设备都支持GetPixel函数。应用程序应调用GetDeviceCaps函数来确定指定的设备是否支持该函数。    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
      

  5.   

    COLORREF Red, green, blue (RGB) color value (32 bits). See COLORREF for information on this type. ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/winprog/winprog/windows_data_types.htm
      

  6.   

    只用C#无法实现,要调用WIN32API
      

  7.   

    试试看这个代码:
    private void button1_Click(object sender, System.EventArgs e)
    {
    this.Text = Cursor.Position.ToString();
    }
      

  8.   

    就是这么简单,Cursor.Position就是在屏上的位置了.
      

  9.   

    //////////////////////////////////////////////////////////////////////////
    /// 程序:屏幕取色
    /// 功能:动态获取当前屏幕中光标所在位置的颜色
    /// 作者:upto(阿球)
    /// 邮箱:[email protected]
    /// 日期:2004年3月31日
    //////////////////////////////////////////////////////////////////////////using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;namespace LiBo.ColorPicker
    {
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    // 桌面工作区的尺寸
    Size workingArea;
    // Form 的初始位置和在左下角,右下角的位置
    Point formLoc, ptLeftBottom, ptRightBottom; private System.Windows.Forms.Label lblColor;
    private System.Windows.Forms.TextBox txtArgb;
    private System.Windows.Forms.Timer tmr;
    private System.Windows.Forms.ToolTip tip;
    private System.ComponentModel.IContainer components; public Form1()
    {
    InitializeComponent(); this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
    this.StartPosition = FormStartPosition.CenterScreen; Rectangle rect = SystemInformation.WorkingArea;
    workingArea = new Size(rect.Width, rect.Height);
    ptLeftBottom = new Point(0, workingArea.Height - this.Height);
    ptRightBottom = new Point(workingArea.Width - this.Width, 
    workingArea.Height - this.Height); String tipMsg = "在窗体空白处双击鼠标左键开始取色,按ESC键确定颜色";
    tip.SetToolTip(this, tipMsg);
    tip.SetToolTip(lblColor, tipMsg);
    tip.SetToolTip(txtArgb, tipMsg);
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null) 
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows Form Designer generated code
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.components = new System.ComponentModel.Container();
    this.lblColor = new System.Windows.Forms.Label();
    this.tmr = new System.Windows.Forms.Timer(this.components);
    this.txtArgb = new System.Windows.Forms.TextBox();
    this.tip = new System.Windows.Forms.ToolTip(this.components);
    this.SuspendLayout();
    // 
    // lblColor
    // 
    this.lblColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.lblColor.Location = new System.Drawing.Point(8, 8);
    this.lblColor.Name = "lblColor";
    this.lblColor.TabIndex = 0;
    // 
    // tmr
    // 
    this.tmr.Tick += new System.EventHandler(this.tmr_Tick);
    // 
    // txtArgb
    // 
    this.txtArgb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.txtArgb.Font = new System.Drawing.Font("Arial", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.txtArgb.Location = new System.Drawing.Point(8, 40);
    this.txtArgb.Name = "txtArgb";
    this.txtArgb.TabIndex = 1;
    this.txtArgb.Text = "";
    this.txtArgb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtArgb_KeyPress);
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(115, 70);
    this.Controls.Add(this.txtArgb);
    this.Controls.Add(this.lblColor);
    this.Name = "Form1";
    this.Text = "屏幕取色(upto)";
    this.DoubleClick += new System.EventHandler(this.Form1_DoubleClick);
    this.MouseEnter += new System.EventHandler(this.Form1_MouseEnter);
    this.ResumeLayout(false); }
    #endregion /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main() 
    {
    Application.Run(new Form1());
    } [ DllImport ( "gdi32.dll" ) ]
    private static extern bool BitBlt (
    IntPtr hdcDest, // 目标设备的句柄
    int nXDest, // 目标对象的左上角的X坐标
    int nYDest, // 目标对象的左上角的X坐标
    int nWidth, // 目标对象的矩形的宽度
    int nHeight, // 目标对象的矩形的长度
    IntPtr hdcSrc, // 源设备的句柄
    int nXSrc, // 源对象的左上角的X坐标
    int nYSrc, // 源对象的左上角的X坐标
    int dwRop // 光栅的操作值
    ); [ DllImport ( "gdi32.dll" ) ]
    private static extern IntPtr CreateDC (
    string lpszDriver, // 驱动名称
    string lpszDevice, // 设备名称
    string lpszOutput, // 无用,可以设定位"NULL"
    IntPtr lpInitData // 任意的打印机数据
    ); private void Form1_DoubleClick(object sender, EventArgs e)
    {
    formLoc = this.Location;
    this.Location = ptRightBottom;
    this.TopMost = true;
    tmr.Enabled = true;
    } private void tmr_Tick(object sender, EventArgs e)
    {
    // 创建显示器的DC
    IntPtr hdlDisplay = CreateDC("DISPLAY", null, null, IntPtr.Zero);
    // 从指定设备的句柄创建新的 Graphics 对象
    Graphics gfxDisplay = Graphics.FromHdc(hdlDisplay);
    // 创建只有一个象素大小的 Bitmap 对象
    Bitmap bmp = new Bitmap(1, 1, gfxDisplay);
    // 从指定 Image 对象创建新的 Graphics 对象
    Graphics gfxBmp = Graphics.FromImage(bmp);
    // 获得屏幕的句柄
    IntPtr hdlScreen = gfxDisplay.GetHdc();
    // 获得位图的句柄
    IntPtr hdlBmp = gfxBmp.GetHdc();
    // 把当前屏幕中鼠标指针所在位置的一个象素拷贝到位图中
    BitBlt(hdlBmp, 0, 0, 1, 1, hdlScreen, MousePosition.X, MousePosition.Y, 13369376);
    // 释放屏幕句柄
    gfxDisplay.ReleaseHdc(hdlScreen);
    // 释放位图句柄
    gfxBmp.ReleaseHdc(hdlBmp);
    lblColor.BackColor = bmp.GetPixel(0, 0); // 获取像素的颜色
    txtArgb.Text = "0x" + lblColor.BackColor.ToArgb().ToString("x").ToUpper();
    bmp.Dispose(); // 释放 bmp 所使用的资源
    } private void txtArgb_KeyPress(object sender, KeyPressEventArgs e)
    {
    // 当按下ESC键时,确定所取的颜色ARGB值
    // 注意:只有当窗体处于激活状态时才有效
    if (e.KeyChar == (char)Keys.Escape)
    {
    tmr.Enabled = false;
    this.Location = formLoc;
    this.TopMost = false;
    txtArgb.SelectAll();
    }
    } private void Form1_MouseEnter(object sender, EventArgs e)
    {
    if (this.Location == ptLeftBottom) //窗体在左下角
    {
    this.Location = ptRightBottom;
    }
    else if (this.Location == ptRightBottom) // 窗体在右下角
    {
    this.Location = ptLeftBottom;
    }
    }
    }
    }