日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++模拟键盘操作窗口入门

發布時間:2023/12/18 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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; //文件數量。可能同時拷貝、刪除多個文件,可以進行更友好的提示;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, &notify, 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#的一點代碼
按鈕點擊的操作

private void button1_Click(object sender, EventArgs e){string pathsn = this.textBox2.Text;string path = "D:\\FTP\\"+ pathsn +".txt";if (File.Exists(path)) ///如果文件存在,那么刪除文件 File.Delete(path);FileStream fs = File.Open(path, FileMode.Create); ///這里第二個表示如果文件不存在,則重新建立一個新的///FileStream fs = File.Open(path, FileMode.Append); ///如果要追加內容時用這個///這里的bs是一個數組byte[]fs.Close();}

總結

以上是生活随笔為你收集整理的C++模拟键盘操作窗口入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。