15,979
社区成员
发帖
与我相关
我的任务
分享
SetForegroundWindow(topHwnd); //在视屏可视
/*设置最大化*/
WINDOWPLACEMENT placement;
placement.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(topHwnd, &placement);
placement.flags = WPF_RESTORETOMAXIMIZED;
placement.showCmd = SW_MAXIMIZE;
SetWindowPlacement(topHwnd, &placement);
/*移动到编辑区域*/
SetCursorPos(222, 85);
//按下鼠标左键
mouse_event(MOUSEEVENTF_LEFTDOWN| MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
//模拟Ctrl+A 全选
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(_T('A'),0, 0, 0);
keybd_event(_T('A'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
//模拟Ctrl+C 复制
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(_T('C'), 0, 0, 0);
keybd_event(_T('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
if (OpenClipboard(NULL))//首先打开一个剪切板
{
if (IsClipboardFormatAvailable(CF_UNICODETEXT))//检查此时剪切板中数据是否为CF_UNICODETEXT,可以设置成别的!
{
HANDLE hClip; //声明一个句柄
LPTSTR pBuf;
hClip = GetClipboardData(CF_UNICODETEXT);//得到剪切板的句柄
pBuf = (LPTSTR)GlobalLock(hClip);//得到指向这块内存的指针
GlobalUnlock(hClip);//解除内存锁定
if (pBuf)
tcout << pBuf << std::endl;
else
tcout << _T("空复制") << std::endl;
}
else
tcout << _T("IsClipboardFormatAvailable") << std::endl;
EmptyClipboard(); //清空剪贴板
CloseClipboard(); //关闭此剪切板
}
#include <iostream>
#include "windows.h"
int main(int argc, char** argv) {
HWND h=FindWindow("Notepad",NULL);
if(h!=NULL)
{
daoSetActiveWindow(h);
SetForegroundWindow(h);
SetFocus(h);
keybd_event(65,0,0,0); // 输出字符A
keybd_event(65,0,KEYEVENTF_KEYUP,0);
}
else
{
printf("no find");
}
return 0;
}
/****************************************************************************
获取剪贴板文本
****************************************************************************/
static
bool GetClipBoardText(string & ClipBoardText , HWND hWnd=NULL)
{
//判断剪贴板的数据格式是否可以处理。
#ifdef _UNICODE
if (!IsClipboardFormatAvailable(CF_UNICODETEXT))
#else
if (!IsClipboardFormatAvailable(CF_TEXT))
#endif
return false;
//打开剪贴板。
if (!::OpenClipboard(hWnd))
return false;
#ifdef _UNICODE
HGLOBAL hMem = GetClipboardData(CF_UNICODETEXT);
#else
HGLOBAL hMem = GetClipboardData(CF_TEXT);
#endif
if (hMem != NULL)
{
//获取字符串。
LPTSTR lpStr = (LPTSTR)GlobalLock(hMem);
if (lpStr != NULL)
{
ClipBoardText=lpStr;
//释放锁内存
GlobalUnlock(hMem);
}
}
//关闭剪贴板
CloseClipboard();
return true;
}
/****************************************************************************
//should check this code with autohotkey "waitclip"
* in some application, should use sleep after execute ctrl+a (such as wiz)
* most of the time ,it should be used in new thread because sleep which is used in function will block the app
****************************************************************************/
static
bool CopySelectedText(string & SelText, string * pPreClipboardText=NULL)
{
//保存现在剪贴板的文本内容
if (pPreClipboardText)
GetClipBoardText(*pPreClipboardText);
::OpenClipboard(NULL);
EmptyClipboard();
CloseClipboard();
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event('C', 0, 0, 0);
keybd_event('C', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
int TryTime = 40;
while (Sleep(50), --TryTime) //指定时间内不停判断
{
if (IsClipboardFormatAvailable(CF_TEXT))
break;
}
if (TryTime == 0) { MessageBoxS(_T("超过预定最大时间,can not get clipboard text")); return false; }
return GetClipBoardText(SelText);
}
void SimulateKeyDown(HWND hWnd,UINT nChar)
{
UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
LPARAM KeyDownLPARAM= (ScanCode<<16) | 0x00000001 ;
::PostMessage(hWnd,WM_KEYDOWN,nChar,KeyDownLPARAM);
}
void SimulatekeyUp(HWND hWnd,UINT nChar)
{
UINT ScanCode= MapVirtualKey( nChar , MAPVK_VK_TO_VSC);
LPARAM KeyUpLPARAM = (ScanCode<<16) | 0xC0000001 ;
::PostMessage(hWnd,WM_KEYUP,nChar,KeyUpLPARAM);
}
void Simulate_CombinateKey( BYTE bVk , UINT nChar , HWND hWnd )
{
keybd_event(bVk,MapVirtualKey(bVk,MAPVK_VK_TO_VSC),0,0);
SimulateKeyDown( hWnd ,nChar);
Sleep(100);
SimulatekeyUp ( hWnd ,nChar);
keybd_event(bVk,MapVirtualKey(bVk,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0);
}
void Simulate_Ctrl_ ( UINT nChar , HWND hWnd ) { Simulate_CombinateKey( VK_CONTROL , nChar , hWnd ) ; }
void Simulate_Shift_( UINT nChar , HWND hWnd ) { Simulate_CombinateKey( VK_SHIFT , nChar , hWnd ) ; }
void Simulate_Alt_ ( UINT nChar , HWND hWnd ) { Simulate_CombinateKey( VK_MENU , nChar , hWnd ) ; }
void Simulate_Ctrl_Shift_( UINT nChar , HWND hWnd )
{
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),0,0);
keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,MAPVK_VK_TO_VSC),0,0);
SimulateKeyDown( hWnd ,nChar);
Sleep(100);
SimulatekeyUp ( hWnd ,nChar);
keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0);
}
void Simulate_Ctrl_Alt_( UINT nChar , HWND hWnd )
{
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),0,0);
keybd_event(VK_MENU,MapVirtualKey(VK_MENU,MAPVK_VK_TO_VSC),0,0);
SimulateKeyDown( hWnd ,nChar);
Sleep(100);
SimulatekeyUp ( hWnd ,nChar);
keybd_event(VK_MENU,MapVirtualKey(VK_MENU,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,MAPVK_VK_TO_VSC),KEYEVENTF_KEYUP,0);
}
SetForegroundWindow(topHwnd);
WINDOWPLACEMENT placement;
placement.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(topHwnd, &placement);
placement.flags = WPF_RESTORETOMAXIMIZED;
placement.showCmd = SW_MAXIMIZE;
SetWindowPlacement(topHwnd, &placement);
/*让鼠标在活动区,拖拉一段距离,然后再模拟按键盘*/
SetCursorPos(222, 85);
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
SetCursorPos(222 + 1, 85 + 5);
Sleep(10);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 222 + 1, 85 + 5, 0, 0);
/*使用 SendInput 实现按键方法*/
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Press the "V" key
ip.ki.wVk = 'A';
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "V" key
ip.ki.wVk = 'A';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// Release the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
Sleep(1000);
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Press the "V" key
ip.ki.wVk = 'C';
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "V" key
ip.ki.wVk = 'C';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// Release the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
Sleep(500);
if (OpenClipboard(topHwnd))//首先打开一个剪切板
{
if (IsClipboardFormatAvailable(CF_UNICODETEXT))//检查此时剪切板中数据是否为TEXT,可以设置成别的!
{
HANDLE hClip; //声明一个句柄
LPTSTR pBuf;
hClip = GetClipboardData(CF_UNICODETEXT);//得到剪切板的句柄
pBuf = (LPTSTR)GlobalLock(hClip);//得到指向这块内存的指针
GlobalUnlock(hClip);//解除内存锁定
if (pBuf)
tcout << pBuf << std::endl;
else
tcout << _T("空复制") << std::endl;
//SetDlgItemText(IDC_EDIT2, pBuf);//将他设置给一个文本框显示
}
else
tcout << _T("IsClipboardFormatAvailable") << std::endl;
EmptyClipboard();
CloseClipboard();//关闭此剪切板
}
HWND hNotePad = ::FindWindow(_T("Notepad"), NULL);
if(hNotePad)
{
HWND hEdit = ::FindWindowEx(hNotePad, NULL, _T("Edit"), NULL);
if(hEdit)
{
::SendMessage(hEdit, EM_SETSEL, 0, -1);
::SendMessage(hEdit, WM_COPY, 0, 0);
}
}