我如何与C ++中的其他应用程序进行交互?

我想知道是否有一些方法来改变其他应用程序的定位是C ++。 我想要做的是移动屏幕上的活动窗口。 例如,我想通过循环移动Firefox。 在2:17 http://www.youtube.com/watch?v=TLqPepLhDTY&list=WL8D6E1A188FBFE181浏览器移动,我该怎么做?

您应该首先使用FindWindow()函数获取窗口的HWND。 然后,您可以简单地使用SetWindowPos()MoveWindow()与找到的HWND来改变位置。

在linux,mac和FreeBSD上:下面是一个快速的脚本,它使用xdotool将chrome浏览器沿着一些轨迹滑动:

 #!/bin/bash while read xy do xdotool search --class google-chrome windowmove $x $y sleep 0.001 done <<TRAJECTORY 624 624 634 614 644 624 654 614 664 624 674 614 684 624 694 614 704 624 TRAJECTORY 

笔记

  • 我已经使这个轨迹非常无聊
    您可以使用一些基本的trigs来使运动循环。 该示例显示您甚至可以从列表中输入形状
  • 该示例硬编码目标窗口(但您可以使用例如selectwindow让用户单击任何窗口操作)
    再次,你的想象力是极限

实际上,在你没有做的窗口上使用FindWindow是很困难的,因为你需要在窗口上使用类名。 改用EnumWindows 。 这里有一个代码示例,它用名字搜索并关闭任何带有“Firefox”的窗口。 不断发送WM_MOVE而不是WM_CLOSE来移动窗口。

 #include <windows.h> #include <tchar.h> #include <iostream> using namespace std; #pragma comment(lib, "user32.lib") HWND windowHandle; BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { TCHAR title[500]; ZeroMemory(title, sizeof(title)); //string strTitle; GetWindowText(hWnd, title, sizeof(title)/sizeof(title[0])); //_tprintf(_T("Found window: %s\n"), title); //strTitle += title; // Convert to std::string if(_tcsstr(title, _T("Firefox"))) { windowHandle = hWnd; return FALSE; } return TRUE; } int main() { while (true) { windowHandle = NULL; EnumWindows(MyEnumProc, 0); cout << endl << endl << "Desired window handle: " << windowHandle << endl << "Sending WM_CLOSE message..." << endl; SendMessage(windowHandle, WM_CLOSE, NULL, NULL); } return 0; } 

哇,谢谢你们,我不期待回答这么快。 我会试着看看哪个代码最好用。 它终于以我想要的方式工作。 代码如下所示:

 #include <windows.h> #include <tchar.h> #include <iostream> using namespace std; #pragma comment(lib, "user32.lib") HWND windowHandle; BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam) { TCHAR title[500]; ZeroMemory(title, sizeof(title)); //string strTitle; GetWindowText(hWnd, title, sizeof(title)/sizeof(title[0])); //_tprintf(_T("Found window: %s\n"), title); //strTitle += title; // Convert to std::string if(_tcsstr(title, _T("Firefox"))) { windowHandle = hWnd; return FALSE; } return TRUE; } int xLoc = 10; int yLoc = 50; int getXLoc(){ if(xLoc<70&&yLoc<=30){ xLoc += 1; Sleep(10); }else if(yLoc>30){ xLoc -= 1; Sleep(10); } return xLoc; } int getYLoc(){ if(yLoc>10&&xLoc<30){ yLoc -= 1; Sleep(10); }else if(xLoc>=30&&yLoc<70){ yLoc += 1; Sleep(10); } return yLoc; } int main() { windowHandle = NULL; EnumWindows(MyEnumProc, 0); while(true){ MoveWindow(windowHandle, getXLoc(), getYLoc(), 1220, 930, false); Sleep(5); } return 0; }