zoukankan      html  css  js  c++  java
  • 手机软件开发中的P/Invoke

    手机软件开发中的P/Invoke

     

    手机软件开发中的P/Invoke

    01/10/2006 01:03:00 PM - View : 107
    .NET CF 中关闭手持设备(支持PPC和SMARTPHONE)
    [DllImport("Coredll.dll")] externstaticvoid PowerOffSystem(); privatevoid mIShutDown_Click(object sender, System.EventArgs e) { PowerOffSystem(); }
    .NET CF 中重启函数
    using System.Runtime.InteropServices;

    public const uint FILE_DEVICE_HAL = 0x00000101;
    public const uint METHOD_BUFFERED = 0;
    public const uint FILE_ANY_ACCESS = 0;

    public uint CTL_CODE(uint DeviceType, uint Function, uint Method, uint Access)
    {
    ????return ((DeviceType << 16) | (Access << 14) | (Function << 2) | Method);
    }

    [DllImport("Coredll.dll")]
    public extern static uint KernelIoControl
    (
    ????uint dwIoControlCode,
    ????IntPtr lpInBuf,
    ????uint nInBufSize,
    ????IntPtr lpOutBuf,
    ????uint nOutBufSize,
    ????ref uint lpBytesReturned
    );

    uint ResetPocketPC()
    {
    ????uint bytesReturned = 0;
    ????uint IOCTL_HAL_REBOOT = CTL_CODE(FILE_DEVICE_HAL, 15,
    ??????METHOD_BUFFERED, FILE_ANY_ACCESS);
    ????return KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0,
    ??????IntPtr.Zero, 0, ref bytesReturned);
    }

    private void Form1_Load(object sender, System.EventArgs e)
    {
    ????DialogResult r = MessageBox.Show
    ????(
    ????????"Are you sure you want to reset?",
    ????????"Test",
    ????????MessageBoxButtons.YesNo,
    ????????MessageBoxIcon.Question,
    ????????MessageBoxDefaultButton.Button2
    ????);

    ????if (r == DialogResult.Yes)
    ????{
    ????????ResetPocketPC();
    ????}
    }

    .NET CF中的硬启函数

    [DllImport("Coredll.dll")] externstaticint KernelIoControl2(int dwIoControlCode, IntPtr lpInBuf, int nInBufSize, IntPtr lpOutBuf, int nOutBufSize, refint lpBytesReturned); [DllImport("Coredll.dll")] externstaticvoid SetCleanRebootFlag(); publicvoid HardReset() { int IOCTL_HAL_REBOOT =0x101003C; int bytesReturned =0; SetCleanRebootFlag(); KernelIoControl2(IOCTL_HAL_REBOOT, IntPtr.Zero, 0, IntPtr.Zero, 0, ref bytesReturned); }

    .NET CF 中切换输入法

    privateconstuint EM_SETINPUTMODE =0xDE; privateconstuint EIM_SPELL =0; privateconstuint EIM_AMBIG =1; privateconstuint EIM_NUMBERS =2; [DllImport("coredll.dll")] privatestaticextern IntPtr GetFocus(); [DllImport("coredll.dll")] privatestaticexternint SendMessage(IntPtr hWnd,uint Message, uint wParam, uint lParam); publicstaticvoid txt_GotFocus(object sender, System.EventArgs e) { IntPtr hWnd; hWnd = GetFocus(); SendMessage(hWnd, EM_SETINPUTMODE, 0, EIM_NUMBERS); (sender as System.Windows.Forms.TextBox).SelectAll(); }

    鼠标状态变换

    [DllImport("coredll", SetLastError=true)] internalstaticexternuint LoadCursor( uint zeroValue , uint cursorID ); [DllImport("coredll", SetLastError=true)] internalstaticexternuint SetCursor( uint cursorHandle ); public Cursor(){} publicstaticvoid ShowWaitCursor(bool bShowCursor) { uint cursorHandle =0; if (bShowCursor) { constuint hourGlassCursorID =32514; cursorHandle = LoadCursor(0, hourGlassCursorID); } SetCursor(cursorHandle); }

    获得设备ID号

    #region 获得设备ID时所需要的变量及函数声明internalstatic Int32 METHOD_BUFFERED =0; internalstatic Int32 FILE_ANY_ACCESS =0; internalstatic Int32 FILE_DEVICE_HAL =0x00000101; private System.Windows.Forms.MenuItem menuItem3; private System.Windows.Forms.MenuItem menuItem4; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox tb_machineName; private System.Windows.Forms.Label label5; private System.Windows.Forms.PictureBox pictureBox1; internalstatic Int32 IOCTL_HAL_GET_DEVICEID = ((FILE_DEVICE_HAL) <<16) | ((FILE_ANY_ACCESS) <<14) | ((21) <<2) | (METHOD_BUFFERED); [DllImport("coredll.dll",SetLastError=true)] privatestaticexternbool KernelIoControl(Int32 IoControlCode, IntPtr InputBuffer, Int32 InputBufferSize, byte[] OutputBuffer, Int32 OutputBufferSize, ref Int32 BytesReturned); #endregion#region 获得设备的ID号privatestaticstring GetDeviceID() { int len =256; int cb =0; byte[] buffer =newbyte[256]; //uint ret; StringBuilder sb =new StringBuilder(); buffer[0] =0; buffer[1] =1; KernelIoControl(IOCTL_HAL_GET_DEVICEID, IntPtr.Zero, 0, buffer, len, ref cb); Int32 dwPresetIDOffsset = BitConverter.ToInt32(buffer, 4); Int32 dwPlatformIDOffset = BitConverter.ToInt32(buffer, 0xc); Int32 dwPlatformIDSize = BitConverter.ToInt32(buffer, 0x10); sb.Append(String.Format("{0:X8}-{1:X4}-{2:X4}-{3:X4}-", BitConverter.ToInt32(buffer, dwPresetIDOffsset), BitConverter.ToInt16(buffer, dwPresetIDOffsset+4), BitConverter.ToInt16(buffer, dwPresetIDOffsset+6), BitConverter.ToInt16(buffer, dwPresetIDOffsset+8))); for(int i = dwPlatformIDOffset ; i < dwPlatformIDOffset + dwPlatformIDSize ; i ++) { sb.Append( String.Format("{0:X2}", buffer[i] )); } return sb.ToString(); } #endregion
  • 相关阅读:
    大数据笔记
    关于服务器编程的笔记
    [转] IPC之管道、FIFO、socketpair
    一些公司链接
    Delphi 通过字符串实例化类
    Delphi根据字符串实例化对象
    Class-reference types 类引用类型--快要失传的技术
    GETCLASS与REGISTERCLASS的应用一例
    Delphi XE增强的RTTI妙用--动态创建包中的窗口类
    Delphi2010的RTTI增强
  • 原文地址:https://www.cnblogs.com/wellsoho/p/1593317.html
Copyright © 2011-2022 走看看