首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏pangguoming

    IntPtr 转 string

    假设有 intPtr pBuffer 方法一: 直接使用Marshal.PtrToStringAnsi方法: string ss = Marshal.PtrToStringAnsi(pBuffer);

    2.9K140发布于 2018-03-09
  • 来自专栏c#学习笔记

    c#——IntPtr

    c#中无法将类型“int”隐式转换为“System.IntPtr” 这个是我引用了一个api函数时出现的问题,我在声明中把intptr换成了int还是不可以,这是为什么呢?要如何处理呢? 答: 您好,C#中的IntPtr类型称为“平台特定的整数类型”,它们用于本机资源,如窗口句柄。 资源的大小取决于使用的硬件和操作系统,但其大小总是足以包含系统的指针(因此也可以包含资源的名称)。 所以,在您调用的API函数中一定有类似窗体句柄这样的参数,那么当您声明这个函数时,您应该将它显式地声明为IntPtr类型。 0; 或者使用类型强制转换: mciSendString("set cdaudio door open", null, 0, (IntPtr)0 ); 或者,使用IntPtr构造函数: IntPtr IntPtr类型的变量,这样会使程序变得难于理解并容易出错。

    1.2K31发布于 2021-03-07
  • 来自专栏CSharp编程大全

    C#中IntPtr

    System.Object System.ValueType System.IntPtr 1.C#中的IntPtr类型被称之为“平台特定的整数类型 3.在调用API函数时,类似含有窗口句柄参数(HANDLE)的原型函数,应显示地声明为IntPtr类型。 4.IntPtr类型对多线程操作是安全的。 5. int 和IntPtr互转 int i=1; IntPtr p=new IntPtr(i); int ch_i=(int) p; 6. IntPtr和string互转 string str="a"; IntPtr p=Marshal.StringToHGlobalAnsi(str); string s=Marshal.PtrToStringAnsi

    1.8K50发布于 2020-08-19
  • 来自专栏全栈程序员必看

    C#中IntPtr类型

    1.C#中的IntPtr类型被称之为“平台特定的整数类型”,用于本机资源,例如窗口句柄。 3.在调用API函数时,类似含有窗口句柄参数(HANDLE)的原型函数,应显示地声明为IntPtr类型。 4.IntPtr类型对多线程操作是安全的。 5. int 和IntPtr互转 int i=1; IntPtr p=new IntPtr(i); int ch_i=(int) p; 6. IntPtr和string互转 string str="a"; IntPtr p=Marshal.StringToHGlobalAnsi(str); string s=Marshal.PtrToStringAnsi

    73720编辑于 2022-07-21
  • 来自专栏嵌入式与Linux那些事

    关于intptr_t,uintptr_t类型

    简介 最近在看代码时,发现了两个之前没见过的数据类型:intptr_t,uintptr_t。 intptr_t; # define __intptr_t_defined # endif typedef unsigned long int uintptr_t; #else # ifndef __intptr_t_defined typedef int intptr_t; # define __intptr_t_defined # endif typedef unsigned int 因此,就可以发现intptr_t和uintptr_t定义的巧妙之处: 在64位机器上,intptr_t为long int,uintptr_t为unsigned long int。 这样就可以保证intptr_t和uintptr_t的长度与机器的指针长度一致,因此在进行整数与 指针的相互转换时可以用intptr_t进行过渡。 下面写两个demo测试下。

    2.3K10编辑于 2022-06-29
  • 来自专栏Khan安全团队

    进程注入

    IntPtr Reserved3; public IntPtr UniquePid; public IntPtr MoreReserved; public IntPtr fnNCDESTROY; public IntPtr fnDWORDOPTINLPMSG; public IntPtr fnINOUTDRAG public IntPtr fnPOUTLPINT; public IntPtr fnINLPCOMPAREITEMSTRUCT; public IntPtr public IntPtr fnHkINLPRECT; public IntPtr fnHkOPTINLPEVENTMSG; public IntPtr public IntPtr ClientCopyDDEOut2; public IntPtr ClientCopyImage; public IntPtr

    74131编辑于 2021-12-31
  • 来自专栏技术之路

    常用的user32API说明

    /// static public extern bool GetMenuItemRect(IntPtr hWnd, IntPtr hMenu, code, IntPtr wParam, IntPtr lParam); public static extern IntPtr SetWindowsHookEx(int hookid, CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam); ///

    /// public extern static IntPtr SetParent(IntPtr hChild, IntPtr hParent); /// public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hRegion, uint flags);

    4.7K70发布于 2018-01-31
  • 来自专栏TRTC

    C#调用即时通信IMSDK

    ://定义托管方法public delegate void TIMCommCallback(Int32 code, IntPtr desc, IntPtr json_param, IntPtr ptr) //其他代码//...public static void MyTIMCommCallback(Int32 code, IntPtr desc, IntPtr json_params, IntPtr ptr desc, IntPtr json_param, IntPtr ptr); //functions - set callbacks ///

    , IntPtr user_sig, IntPtr cb, IntPtr user_data); public static int TIMLogin(string user_id, string conv_id, Int32 conv_type, IntPtr json_msg_param, IntPtr message_id_buffer, TIMCommCallback cb, IntPtr

    4.1K60编辑于 2022-08-08
  • 来自专栏InCerry

    使用C#编写一个.NET分析器(二)

    *, IntPtr*, int>)&QueryInterface; *(chunk + 2) = (IntPtr)(delegate* unmanaged<IntPtr, int>) + 4) = (IntPtr)(delegate* unmanaged<IntPtr, IntPtr, Guid*, IntPtr*, int>)&CreateInstance; *(chunk + 5) = (IntPtr)(delegate* unmanaged<IntPtr, bool, int>)&LockServer; *ppv = (IntPtr + 1); // 指向接口中每个方法的指针 (chunk + 1) = (IntPtr)(delegate unmanaged<IntPtr, Guid, IntPtr ; *(chunk + 5) = (IntPtr)(delegate* unmanaged<IntPtr*, IntPtr, Guid*, IntPtr*, int>)&Exports.CreateInstance

    37130编辑于 2023-08-31
  • 来自专栏DearXuan的博客文章

    PVZ逆向分析与C#内存操作(含源文件)

    hProcess, IntPtr baseaddress, IntPtr buffer, int nsize, IntPtr bytesread); [DllImport("kernel32.dll IntPtr baseaddress, long[] buffer, int nSize, IntPtr byteswrite); 读写内存需要用到OpenProcess,官方文档里告诉我们第一个参数是访问权限 void WriteMemory(int pid,IntPtr toBase,int num) { IntPtr process = OpenProcess(0x1F0FFF, false, num1 = ReadMemory(pid, (IntPtr)0x006A9EC0); int num2 = ReadMemory(pid, (IntPtr)(num1 + 0x768)); hProcess, IntPtr baseaddress, IntPtr buffer, int nsize, IntPtr bytesread); [DllImport("kernel32

    86820编辑于 2022-01-19
  • 来自专栏Pulsar-V

    C#2C++数据类型对照

    HANDLE System.IntPtr HBITMAP System.IntPtr HBRUSH System.IntPtr HCONV System.IntPtr HCONVLIST System.IntPtr HCURSOR System.IntPtr HDC System.IntPtr HDDEDATA System.IntPtr HDESK System.IntPtr HDROP System.IntPtr HDWP System.IntPtr HENHMETAFILE System.IntPtr HFILE System.IntPtr HFONT System.IntPtr HGDIOBJ System.IntPtr HGLOBAL System.IntPtr HHOOK System.IntPtr HICON System.IntPtr HIMAGELIST System.IntPtr HIMC System.IntPtr HMODULE System.IntPtr HMONITOR System.IntPtr HPALETTE System.IntPtr HPEN System.IntPtr HRGN System.IntPtr

    1.1K20发布于 2019-03-12
  • 来自专栏林德熙的博客

    dotnet C# 在 Linux 系统设置或获取音量以及变更音量收到通知

    _initTaskCompletionSource; private IntPtr _mainLoop; private IntPtr _context; { var result = pa_context_connect(context, IntPtr.Zero, 0, IntPtr.Zero public IntPtr server_name; pa_sample_spec sample_spec; public IntPtr public static extern int pa_context_connect(IntPtr c, IntPtr server, uint flags, IntPtr api); public static extern IntPtr pa_context_subscribe(IntPtr c, pa_subscription_mask_t m, IntPtr cb, IntPtr

    60210编辑于 2024-04-25
  • 来自专栏林德熙的博客

    C# 纯控制台创建一个全屏窗口

    , IntPtr.Zero, IntPtr.Zero, IntPtr.Zero ) hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam ( IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam ); [DllImport hWnd, int nCmdShow); private static IntPtr CustomWndProc(IntPtr hWnd, uint msg, IntPtr wParam WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); private readonly WndProc _wndProc

    1.4K10发布于 2020-08-19
  • 来自专栏Java架构师必看

    调用API弹出打印机属性对话框

    = null && printerName.Length > 0)             {                 IntPtr pPrinter = IntPtr.Zero;                  IntPtr pDevModeOutput = IntPtr.Zero;                 IntPtr pDevModeInput = IntPtr.Zero;                  IntPtr nullPointer = IntPtr.Zero;                  OpenPrinter(printerName, ref pPrinter, ref nullPointer IntPtr pDevModeOutput = IntPtr.Zero;                 IntPtr pDevModeInput = IntPtr.Zero;                  IntPtr nullPointer = IntPtr.Zero;                  OpenPrinter(printerName, ref pPrinter, ref nullPointer

    2.1K30发布于 2020-10-23
  • 来自专栏林德熙的博客

    学习 Avalonia 框架笔记 设置 X11 窗口从最小化状态还原为正常状态

    windowHandle, IntPtr display, IntPtr rootWindow) { Display = display; RootWindow atoms[3] : IntPtr.Zero ); } private void SendNetWMMessage(IntPtr message_type, IntPtr l0, IntPtr? l1 = null, IntPtr? l2 = null, IntPtr? l3 = null, IntPtr? IntPtr.Zero, ptr3 = l2 ?? IntPtr.Zero, ptr4 = l3 ??

    62710编辑于 2024-05-17
  • 来自专栏林德熙的博客

    WPF 在 Alt+Tab 隐藏窗口

    GetWindowLong(IntPtr hWnd, int nIndex); public static IntPtr SetWindowLong(IntPtr hWnd, int nIndex , IntPtr dwNewLong) { int error = 0; IntPtr result = IntPtr.Zero; // Win32 SetWindowLong doesn't clear error on success SetLastError(0); if (IntPtr.Size == 4) IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); [DllImport("user32.dll", EntryPoint , int nIndex, Int32 dwNewLong); private static int IntPtrToInt32(IntPtr intPtr) { return

    3.6K30发布于 2018-09-18
  • 来自专栏天下风云

    .NET托管指针

    例子说明 一个最简单操作即是IntPtr类型,它虽然是一个nint,但却是一个货真价实的指针,类似于C语言的*符号。 声明: IntPtr ptr; 如果要把托管def函数变成指针:‍ 示例函数: public static void def() { Console.WriteLine("def 指针,,以上面指针functionPointer为例,向IntPtr指针指向的地址赋值: Marshal.WriteIntPtr(functionPointer,value); 读取IntPtr指针指向的地址值 代码如下: IntPtr ptr = getJit(); uint oldProtect; IntPtr ptr1 = Marshal.ReadIntPtr(Marshal.ReadIntPtr hook(IntPtr intptr); 调用 IntPtr ptr = getJit(); uint oldProtect; ptr1 = Marshal.ReadIntPtr(ptr); IntPtr

    1.5K10编辑于 2024-06-11
  • 来自专栏菩提树下的杨过

    利用ActiveX实现web页面设置本地默认打印机、纸张大小

    IntPtr pDevModeOutput, IntPtr pDevModeInput, int fMode ); [SecurityCritical SendMessageTimeout( IntPtr windowHandle, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags flags, uint timeout, out IntPtr result , hPrinter, PrinterName, IntPtr.Zero, IntPtr.Zero, 0); if (iDevModeSize < 0) WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero,

    2.4K20发布于 2018-09-20
  • 来自专栏林德熙的博客

    WPF 使用快捷键方式制作简易的 Word 上的 Latex 输入法

    ")] private static extern IntPtr GetWindowLong64(IntPtr hWnd, int nIndex); [DllImport("user32 .dll", EntryPoint = "SetWindowLong")] private static extern IntPtr SetWindowLong32(IntPtr hWnd, int static extern IntPtr SetWindowLong64(IntPtr hWnd, int nIndex, IntPtr dwNewLong); } 整个 MainWindow.xaml.cs ")] private static extern IntPtr GetWindowLong64(IntPtr hWnd, int nIndex); [DllImport("user32 static extern IntPtr SetWindowLong64(IntPtr hWnd, int nIndex, IntPtr dwNewLong); } 本文代码放在 github 和 gitee

    63910编辑于 2024-10-25
  • 来自专栏用户1175783的专栏

    从Win服务启动UI程序

    lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; } [ intPtr = IntPtr.Zero; try { IntPtr hServer = IntPtr.Zero; if (WTSEnumerateSessions (hServer, 0, 1, out intPtr, out dwCount)) { var tmp = intPtr; for (var

    1.4K30发布于 2019-09-18
领券