C 根據控制代碼改變窗體控制項值

2021-09-22 21:41:53 字數 2622 閱讀 4014

原文:

c#根據控制代碼改變窗體控制項值

需求是這樣,有個程式介面我們需要通過自己的程式持續輸入資料,介面如圖。

可以獲得控制項的控制代碼而用鉤子寫入值。這裡需要用到spy++工具。在vs的工具下有個spy++工具,開啟如下圖

通過這個工具可以獲得窗體的控制代碼,當然這裡獲得的控制代碼只能用於測試,因為.net開發的程式窗體每次開啟控制代碼都會變,都需要重新獲得。這個工具的用處在於找乙個控制項的前一句柄控制項和後一句柄控制項。

//尋找目標程序視窗       

[dllimport("user32.dll")]

public static extern intptr findwindow(string lpclassname, string lpwindowname);

[dllimport("user32.dll", entrypoint = "findwindowex", setlasterror = true)]

public static extern intptr findwindowex(intptr hwndparent, uint hwndchildafter,string lpszclass, string lpszwindow);

//設定程序視窗到最前

[dllimport("user32.dll")]

public static extern bool setforegroundwindow(intptr hwnd);

//模擬鍵盤事件

[dllimport("user32.dll")]

public static extern void keybd_event(byte bvk, byte bscan, int32 dwflags, int32 dwextrainfo);

public delegate bool callback(intptr hwnd, int lparam);

[dllimport("user32.dll")]

public static extern int enumchildwindows(intptr hwndparent, callback lpfn, int lparam);

//給checkbox傳送資訊

[dllimport("user32.dll", entrypoint = "sendmessage", setlasterror = true, charset = charset.auto)]

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

//給text傳送資訊

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

private static extern int sendmessage(intptr hwnd, uint32 msg, intptr wparam, string lparam);

[dllimport("user32.dll")]

public static extern intptr getwindow(intptr hwnd, int wcmd);

/// /// 查詢窗體上控制項控制代碼

///

/// 父窗體控制代碼

/// 控制項標題(text)

/// 設定是否在子窗體中查詢

/// 控制項控制代碼,沒找到返回intptr.zero

private static intptr findwindowex(intptr hwnd, string lpszwindow, bool bchild)

},0);

// 返回查詢結果

return iresult;

}/// /// 輸入回車

///

private static void printenter()

intptr wchandle = findwindow(null, "窗體名稱");

if (wchandle != intptr.zero)

uint bm_getcheck = 0xf0;

uint bst_checked = 0xf1;

intptr weightintptr = findwindowex(wchandle, "輸入重量[&h]", true);

if (weightintptr != intptr.zero)

public enum windowsearch

獲取與指定視窗具有指定關係的視窗的控制代碼

}intptr waybill = getwindow(waybillintptr, (int)windowsearch.gw_hwndnext);

sendmessage(waybill, wm_settext, intptr.zero, waybillvalue);

這裡完成了我們的需求,改變了窗體中選擇框和text文字框的值。

C 根據控制代碼改變窗體控制項值

原文 c 根據控制代碼改變窗體控制項值 需求是這樣,有個程式介面我們需要通過自己的程式持續輸入資料,介面如圖。可以獲得控制項的控制代碼而用鉤子寫入值。這裡需要用到spy 工具。在vs的工具下有個spy 工具,開啟如下圖 通過這個工具可以獲得窗體的控制代碼,當然這裡獲得的控制代碼只能用於測試,因為.n...

MFC窗體所有控制項大小隨窗體改變而改變

在乙個基於mfc的dialog上布置許多控制項的時候,有時候在改變dialog大小的時候控制項不隨著改變,現在告訴大家怎麼讓dialog所有控制項隨dialog改變而改變。現在已最簡單新建的對話方塊,在新建的dialog裡面的 確定 和 取消 按鈕,在對話方塊最大化得時候,不會一起變大的,而是保持原...

C 實現窗體控制項隨窗體大小改變 包括字型大小

private float x private float y private void settag control cons private void setcontrols float newx,float newy,control cons float a convert.tosingle ...