在C 中使用SendMessage

2021-03-31 08:57:01 字數 1747 閱讀 8874

在c#中使用sendmessage

日期: 2005-02-04

備註:主要描述在呼叫api函式sendmessage時資料型別的轉換。

sendmessage是乙個在user32.dll中宣告的api函式,在c#中匯入如下:

using system.runtime.interopservices;
[dllimport("user32.dll", entrypoint="sendmessagea")]

public static extern int sendmessage (intptr hwnd, int wmsg, intptr wparam, intptr lparam);

本文描述其引數 lparam 的用法,主要是資料型別之間的轉化

● 一種最簡單的處理方式是宣告多個sendmessage函式(overload),用所需的資料型別直接替換intptr。例如:

//宣告:

[dllimport("user32.dll", entrypoint="sendmessagea")]

private static extern intsendmessage(intptr hwnd, int wmsg, intptr wparam,stringlparam);

[dllimport("user32.dll", entrypoint="sendmessagea")]

private static extern intsendmessage(intptr hwnd, int wmsg, intptr wparam, refrectanglelparam);

//呼叫:

string s = "hello, floodzhu";

sendmessage(this.textbox1.handle,wm_settext, intptr.zero, s);

rectangle rect = new rectangle();

sendmessage(this.richtextbox1.handle,em_getrect, (intptr)0, ref rect);

● 對要求返回字串的型別(out string)可以用 stringbuilder 代替,此時不需要 out/ref。例如:

[dllimport("user32.dll", entrypoint="sendmessagea")]

private static extern int sendmessage (intptr hwnd, int wmsg, int wparam,stringbuilderlparam);

private void button1_click(object sender, system.eventargs e)

[dllimport("user32.dll", entrypoint="sendmessagea")]

private static extern int sendmessage (intptr hwnd, int wmsg, intptr wparam, intptr lparam);

private void button2_click(object sender, system.eventargs e)

或者

private void button2_click(object sender, system.eventargs e)

在C 中使用Queue

介紹 queue類執行將放在在queue中的物件採用先進先出的資料結構。物件從一端插入到佇列中從另一端移除。物件的順序程序使用queue queue介面 queue類實現了三個主要集合介面 icollection ienumerable和icloneable。queue的重要方法 queue類常用的...

在 C 中使用畫筆

出處 在 c 中使用畫筆 public class rectangle shape protected point m start protected point m end public rectangle point start,point end,color fgcolor m start s...

在 C 中使用 Python script

想要在c 中嵌入script 除了自己寫指令碼引擎外,lua,python 都可以在c 中使用,另外 monobind,angelscript library 都是一些c script library,可以嵌入到c 中使用 今天在c 中試著嵌入 python 示例 在 python 2.5.2 de...