![]() |
【转帖】 遍历对话框里的static控件
遍历对话框里的static控件
::ShowWindow(hwnd,SW_RESTORE); ::SetForegroundWindow(hwnd); keybd_event(VK_MENU,0,0,0);//按下Alt keybd_event(82,0,0,0);//按下R键 keybd_event(82,0,KEYEVENTF_KEYUP,0);//松开R键 keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);//.... 参考参考,俺的代码。 |
回复: 【转帖】 遍历对话框里的static控件
HWND tmpa=::FindWindow("#32770 (Dialog)",NULL);
tmpa=::FindWindowEx(tmpa,NULL,"Edit",NULL); char *msg; CString tmp; m_msg.GetWindowText(tmp); msg=tmp.GetBuffer(tmp.GetLength()); ::SendMessage(tmpa,WM_SETTEXT,tmp.GetLength(),(long)msg); keybd_event 或者sendinput都行,你想写一串,可以用一个数组,循环写, 用vkscan()和mapvirtualkey()结合,把字符转化成virtualkey 或者扫描码来发送, procedure SendShift(H: HWnd; Down: Boolean); var vKey, ScanCode: Word; lParam: longint; begin vKey:= $10; ScanCode:= MapVirtualKey(vKey, 0); lParam:= longint(ScanCode) shl 16 or 1; if not(Down) then lParam:=lParam or $C0000000; SendMessage(H, WM_KEYDOWN, vKey, lParam); end; {****************************************************} procedure SendCtrl(H: HWnd; Down: Boolean); var vKey, ScanCode: Word; lParam: longint; begin vKey:= $11; ScanCode:= MapVirtualKey(vKey, 0); lParam:= longint(ScanCode) shl 16 or 1; if not(Down) then lParam:= lParam or $C0000000; SendMessage(H, WM_KEYDOWN, vKey, lParam); end; {****************************************************} function TBUSendKey.SendKey(AppName:string;Key:Char):Boolean; var vKey, ScanCode: Word; lParam, ConvKey: longint; Shift, Ctrl: boolean; H:HWND; begin H:=FindWindow(pchar(appname),nil); if H<>0 then begin ConvKey:= OemKeyScan(ord(Key)); Shift:= (ConvKey and $00020000) <> 0; Ctrl:= (ConvKey and $00040000) <> 0; ScanCode:= ConvKey and $000000FF or $FF00; vKey:= ord(Key); lParam:= longint(ScanCode) shl 16 or 1; if Shift then SendShift(H, true); if Ctrl then SendCtrl(H, true); SendMessage(H, WM_KEYDOWN, vKey, lParam); SendMessage(H, WM_CHAR, vKey, lParam); lParam:= lParam or $C0000000; SendMessage(H, WM_KEYUP, vKey, lParam); if Shift then SendShift(H, false); if Ctrl then SendCtrl(H, false); result:=true; end else result:=false; end; 可以对单个程序SendKey,全部就可以用kimryo的方法。还有方法是用Hook,很好的,我就不说了。有问题可以Email:Zeng@zymail.net VOID keybd_event( BYTE bVk, // virtual-key code BYTE bScan, // hardware scan code DWORD dwFlags, // function options ULONG_PTR dwExtraInfo // additional keystroke data ); |
回复: 【转帖】 遍历对话框里的static控件
msdn 中的例子
The following sample program toggles the NUM LOCK light (on Windows NT only) by using keybd_event() with a virtual key of VK_NUMLOCK. #include <windows.h> void SetNumLock( BOOL bState ) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) { // Simulate a key press keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Simulate a key release keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } void main() { SetNumLock( TRUE ); } -------------------------------------------------------------------------------- LPCTSTR lpWindowName = _T("QQ用户登录"); CWnd *pDialog = FindWindow(NULL, lpWindowName); CWnd * pChild = pDialog->GetWindow(GW_CHILD); CString sText; for (; pChild; ) { pChild->GetWindowText(sText); if (sText == _T("deg")) pChild->SetWindowText("mdeg"); pChild = pChild->GetNextWindow(GW_HWNDNEXT); } |
所有的时间均为北京时间。 现在的时间是 12:58 PM. |