我想知道是否有某种方法可以改变其他应用程序的定位是C ++。我想要做的是移动屏幕上的活动窗口。例如,我想以循环方式移动Firefox。在2:17 http://www.youtube.com/watch?v=TLqPepLhDTY&list=WL8D6E1A188FBFE181浏览器移动,我该怎么做?
答案 0 :(得分:4)
您应首先使用FindWindow()
函数获取窗口的HWND。然后,您只需使用找到的HWND SetWindowPos()
或MoveWindow()
来更改位置。
答案 1 :(得分:0)
在linux,mac和FreeBSD上:这是一个快速脚本,它使用xdotool
沿某些轨迹滑动chrome浏览器:
#!/bin/bash
while read x y
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
注释
selectwindow
让用户点击任意窗口进行操作)答案 2 :(得分:0)
实际上在你没有制作的窗口上使用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;
}
答案 3 :(得分: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;
}