C++模拟键盘操作窗口入门
生活随笔
收集整理的這篇文章主要介紹了
C++模拟键盘操作窗口入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++模擬鍵盤操作窗口入門之文件監控操作句柄操作
#include <iostream> #include <windows.h> #include <tchar.h> #include <iomanip> #include <stdio.h> #include <stdlib.h>using namespace std;void fileWatcher(); #pragma warning(disable:4996)int main() {fileWatcher();return 0; }void click(int x, int y) {//將鼠標光標移動到 指定的位置 例子中屏幕分辨率1600x900 在鼠標坐標系統中,屏幕在水平和垂直方向上均勻分割成65535×65535個單元mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x * 65535 / 1920, y * 65535 / 1080, 0, 0);Sleep(50);//稍微延時50ms mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠標左鍵按下 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠標左鍵抬起 } char* substring(char* ch, int pos, int length) {//定義字符指針 指向傳遞進來的ch地址char* pch = ch;//通過calloc來分配一個length長度的字符數組,返回的是字符指針。char* subch = (char*)calloc(sizeof(char), length + 1);int i;//只有在C99下for循環中才可以聲明變量,這里寫在外面,提高兼容性。 pch = pch + pos;//是pch指針指向pos位置。 for (i = 0;i < length;i++){subch[i] = *(pch++);//循環遍歷賦值數組。 }subch[length] = '\0';//加上字符串結束符。 return subch; //返回分配的字符數組地址。 }void fileWatcher() {DWORD cbBytes;char file_name[MAX_PATH]; //設置文件名;char file_rename[MAX_PATH]; //設置文件重命名后的名字;char notify[1024];int count = 0; //文件數量??赡芡瑫r拷貝、刪除多個文件,可以進行更友好的提示;const TCHAR *dir = _T("D:\\FTP");HANDLE dirHandle = CreateFile(dir,GENERIC_READ | GENERIC_WRITE | FILE_LIST_DIRECTORY,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);if (dirHandle == INVALID_HANDLE_VALUE) //若網絡重定向或目標文件系統不支持該操作,函數失敗,同時調用GetLastError()返回ERROR_INVALID_FUNCTION{cout << "error" + GetLastError() << endl;}memset(notify, 0, strlen(notify));FILE_NOTIFY_INFORMATION *pnotify = (FILE_NOTIFY_INFORMATION*)notify;cout << "Start Monitor..." << endl;while (true){if (ReadDirectoryChangesW(dirHandle, ¬ify, 1024, true,FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE,&cbBytes, NULL, NULL)){//轉換文件名為多字節字符串;if (pnotify->FileName){memset(file_name, 0, strlen(file_name));WideCharToMultiByte(CP_ACP, 0, pnotify->FileName, pnotify->FileNameLength / 2, file_name, 99, NULL, NULL);}//獲取重命名的文件名;if (pnotify->NextEntryOffset != 0 && (pnotify->FileNameLength > 0 && pnotify->FileNameLength < MAX_PATH)){PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pnotify + pnotify->NextEntryOffset);memset(file_rename, 0, sizeof(file_rename));WideCharToMultiByte(CP_ACP, 0, p->FileName, p->FileNameLength / 2, file_rename, 99, NULL, NULL);}//設置類型過濾器,監聽文件創建、更改、刪除、重命名等;switch (pnotify->Action){case FILE_ACTION_ADDED:{count++;cout << "count = " << count << endl;cout << setw(5) << "file add:" << setw(5) << file_name << endl;cout << "我是小孫" << endl;cout << file_name;HWND hq = ::FindWindow("WindowsForms10.Window.8.app.0.141b42a_r10_ad1", "Anhui");if (NULL == hq){return;}// SendMessage(hq, WM_ACTIVATE, 0, 0);// ::SendMessage(hq, WM_SHOWWINDOW, 0, 0);::SetForegroundWindow(hq);HWND hWnd = NULL;OpenClipboard(hWnd);EmptyClipboard();HANDLE hHandle = GlobalAlloc(GMEM_FIXED, 1000);char* pData = (char*)GlobalLock(hHandle);//strcpy(pData,"this is");string file_name2 = file_name;file_name2 = file_name2.substr(0,file_name2.find_last_of('.'));char * str1 = const_cast<char *>(file_name2.c_str());cout << str1 << endl;strcpy(pData, str1);// file_nameSetClipboardData(CF_TEXT,hHandle);GlobalUnlock(hHandle);CloseClipboard();/* if (IsClipboardFormatAvailable(CF_TEXT)){HANDLE h = GetClipboardData(CF_TEXT);char* p = (char*)GlobalLock(h);GlobalUnlock(h);CloseClipboard();}*/click(89, 135);keybd_event(VK_CONTROL, 0, 0, 0);keybd_event('V', 0, 0, 0);keybd_event('V', 0, KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);Sleep(1000);//模擬回車keybd_event(13, 0, 0, 0);keybd_event(13, 0, KEYEVENTF_KEYUP, 0);}break;case FILE_ACTION_MODIFIED:cout << "file modified:" << setw(5) << file_name << endl;break;case FILE_ACTION_REMOVED:count++;cout << count << setw(5) << "file removed:" << setw(5) << file_name << endl;break;case FILE_ACTION_RENAMED_OLD_NAME:cout << "file renamed:" << setw(5) << file_name << "->" << file_rename << endl;break;default:cout << "UNknow command!" << endl;}}}CloseHandle(dirHandle); }當輸入一個數字,會監控到,
然后塞到剪切板里面,模擬Ctrl + V 鍵盤操作,然后,敲擊回車;
C#的一點代碼
按鈕點擊的操作
總結
以上是生活随笔為你收集整理的C++模拟键盘操作窗口入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#和C常用的API操作窗口的代码积累
- 下一篇: 简谈各类编程语言