2014-01-05 145 views

回答

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 

  • 我非常制成的轨迹无聊
    虽然你可以使用一些基本的trigs做运动循环。样本显示,你甚至可以从列表
  • 的例子硬编码的目标窗口饲料形状(但你可以使用如selectwindow让用户点击任意窗口上操作)
    同样你的想象力是极限
+0

有趣,但道外OP的请求......(没有C++和Windows这里的东西)@pepper_chico好 –

+1

。我回答他的问题,而不是标签。涉及到[X/Y问]的程度往往是(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。此外,没有任何东西阻止他(a)使用[xdotool的源代码](http:// C++)直接从C++驱动'xdotool'或[b]使用'xlib' +'xtst' www.semicomplete.com/projects/xdotool/#idp9392)作为参考。即使对于商业应用,许可证似乎也不能排除这种情况。 – sehe

+0

似乎不是一个干净的解决方案,调用外部程序来解决问题是IMO肮脏。 – Paranaix

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; 
} 
+0

可以查找类名,除了'FindWindow'还可以搜索名字。 – Paranaix

+0

这通常更可靠,因为任何窗口都可能具有“Firefox”标题 – paulm

+0

但是,为什么您必须连续发送WM_MOVE而不是一次? – gdany

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; 
} 
相关问题