vb中sendmessage WM char這個API函式結果無限發

時間 2022-03-07 12:15:02

1樓:狂族魔帝

沒想法,要不改成發keydown+keyup

vb用sendmessage傳送中文

2樓:匿名使用者

你要傳送的目標是一個文字框麼?是的話就用settext,wparam填0,lparam填你那個中文串的變數。

如果目標不是文字框,可能就要找其他的訊息了。

另外,這類操作有的可以不用sendmessage的,比如setwindowtext api封裝了一種傳送settext message的情況。

3樓:匿名使用者

使用wm_settext 訊息 wm_char 是單個字元

public const wm_settext = 12

declare function sendmessage lib "user32" alias "sendmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any)

窗體中dim i as long

dim s as string

s = "你要輸入的文字"

i = sendmessage(hwnd, wm_settext, 0, byval s)

另 樓上兩位說直接使用setwindowtext 這個函式如果是本地程序可以使用

如過是其他程序則只能使用sendmessage

這個是msdn原話

if the target window is owned by the current process, setwindowtext causes a wm_settext message to be sent to the specified window or control. if the control is a list box control created with the ws_caption style, however, setwindowtext sets the text for the control, not for the list box entries.

to set the text of a control in another process, send the wm_settext message directly instead of calling setwindowtext.

*********************************************=

declare function sendmessage lib "user32" alias "sendmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) as long

我把宣告寫錯了 拉了點東西 呵呵

4樓:匿名使用者

頂樓上,建議用setwindowtext api函式

向一個知道控制代碼的視窗傳送鍵盤訊息,用sendmessage裡面的wm_char可以但是為什麼wm_keydown接收不到,呢

5樓:匿名使用者

接收沒什麼任何問題

procedure mm(var msg:tmessage);message wm_keydown;

procedure tdemo.mm(var msg: tmessage);

begin

showmessage('123');

end;

procedure tdemo.speedbutton1click(sender: tobject);

begin

postmessage(handle,wm_keydown,vk_return,0);

end;

用vb**使用 sendmessage 傳送字串到某程式特定視窗

6樓:

最好用 spy++ 之類的軟體檢視那個視窗的類名以及上面該控制元件的 id,使用 findwindowex 這個 api 函式根據類名來查詢視窗控制代碼,使用 getdlgitem 根據視窗控制代碼和該控制元件 id 獲取控制元件控制代碼,然後傳送訊息給這個控制元件才行。wm_settext 訊息傳送給不同視窗效果不一樣的,發給帶標題的視窗的話肯定是改變標題。

7樓:匿名使用者

你要用這個控制元件的控制代碼,而不是那個程式視窗的控制代碼。

vb 中 使用 sendmessage之類的api函式(不**滑鼠動作)向其他程式的按鈕傳送單擊命令

8樓:匿名使用者

引數取個 與或運算可以

9樓:匿名使用者

sendmessage(hwnd, wm_command, 0, 0);

好久不用windows了,不知道對不對,你試試看吧

python用sendmessage函式向其他程式的編輯框(當前啟用視窗,並且在活動游標處)內傳送 50

10樓:匿名使用者

這就是個windows sdk的程式設計問題

#coding:utf-8

from ctypes import *

wm_settext = 0x000c

def changeactivewindowttile():

hwnd=windll.user32.findwindoww(u"notepad",u"無標題 - 記事本")

if (windll.user32.iswindow(hwnd)):

windll.user32.sendmessagew(hwnd,wm_settext,none,u"我是標題")

changeactivewindowttile()

我已經得到視窗上句按鍵的控制代碼,怎麼用sendmessage,傳送回車,賜教

11樓:

如果是一個按鈕的話,那麼直接傳送一個點選的訊息即可:

sendmessage(hwnd, bm_click, 0, 0);

如果一定要傳送 enter 訊息,可以這樣:

sendmessage(hwnd, wm_keydown, vk_return, 0);

sendmessage(hwnd, wm_keyup, vk_return, 0);

hwnd 代表按鈕的控制代碼。

12樓:莫納的絲絨

先貼一下sendmessage 的**(經vb6.0測試通過,直接複製套用就可以)

'先宣告呼叫api

private declare function sendmessage lib "user32" alias "sendmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) as long

sendmessage hwnd,vbkeyreturn,0,0

個人不用sendmessage,覺得postmessage比較實在

那個那個。。如果是後臺的話建議用postmessage,我把自動生成掃描碼的函式也發給你,全都複製在窗體**裡就可以。這只是比較簡單的雛形,如果你是針對遊戲的話,有些遊戲對於傳送回車鍵會比較麻煩,不是的話就不用多花時間啦。

private declare function postmessage lib "user32" alias "postmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, byval lparam as long) as long

鍵碼宣告

postmessage chwnd, wm_keydown, vbkeyreturn, makekeylparam(vbkeyreturn, wm_keydown)

private function makekeylparam(byval virtualkey as long, byval flag as long) as long

dim s as string

dim firstbyte as string 'lparam引數的24-31位

if flag = wm_keydown then '如果是按下鍵

firstbyte = "00"

else

firstbyte = "c0" '如果是釋放鍵

end if

dim scancode as long '獲得鍵的掃描碼

scancode = mapvirtualkey(virtualkey, 0)

dim secondbyte as string 'lparam引數的16-23位,即虛擬鍵掃描碼

secondbyte = right("00" & hex(scancode), 2)

s = firstbyte & secondbyte & "0001" '0001為lparam引數的0-15位,即傳送次數和其它擴充套件資訊

makekeylparam = val("&h" & s)

end function

vb中的if語句,VB中的If語句

荀曾顏念雁 檢測事件是在文字框中的change事件中判斷,也就是說只要文字框有改變就檢測!如果把其中的 and改寫成 or就可以判斷其中一個文字是否為空!private subtext1 change 判斷文字框最快的速度還是判斷它的長度是否為0iflen text1.text 0 andlen t...

vb中的UBound的問題,VB中ubound()是什麼意思啊?

先說多維陣列 在一維陣列中,我們例如說從桌子左邊到右邊,每1cm為一個單位,可以有陣列 長度 i 這個i從0到120 在二維陣列中,我除了左右,我們有按照前後,每1cm為一個單位就有了陣列 桌面 i,j 這個1從0到120,j從0到60 在三維陣列中,我們除了前後左右,再加上上下,從下到上也每1cm...

vb中cint與int區別,VB中CInt與Int區別

一 主體不同 1 cint 返回表示式,此表示式已被轉換為 integer 子型別的 variant。2 int 整數資料型別的資料 是表示某種數學整數 範圍的資料型別。二 處理過程不同 1 cint 將其四捨五入為最接近的偶數。例如,0.5 被四捨五入為 0,而1.5 被四捨五入為 2。2 int...