我想知道是否有某种方式来改变其他应用程序的定位是C++。我想要做的是移动屏幕上的活动窗口。例如,我想以循环方式移动Firefox。在2:17 http://www.youtube.com/watch?v=TLqPepLhDTY&list=WL8D6E1A188FBFE181浏览器移动,我该怎么做?如何与C++中的其他应用程序进行交互?
3
A
回答
4
您应该首先使用FindWindow()
函数获取窗口的HWND。然后你可以简单地使用SetWindowPos()
或MoveWindow()
找到HWND来改变位置。
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
实际上,在你没有做的窗口上使用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
哇,谢谢你们,我不期待回答这么快。我会尝试看看哪些代码最适合使用。它终于以我想要的方式工作。代码如下所示:
#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;
}
相关问题
- 1. 如何与其他应用程序进行交互?
- 2. 如何与其他应用程序进行交互
- 3. 我如何与Python中的其他程序进行交互?
- 4. 与其他应用程序的交互
- 5. 编写程序与其他程序进行交互
- 6. visual C++程序如何使它与其他程序交互
- 7. 在C中与外部应用程序进行交互#
- 8. C#与其他类中的类的变量进行交互
- 9. 应用程序如何在Linux中与硬件进行交互?
- 10. 如何以编程方式与应用程序进行交互
- 11. 让应用程序与其他正在运行的应用程序进行交互的最佳方式
- 12. 如何与外部应用程序的terraform进行交互?
- 13. 如何使API与我的应用程序进行交互
- 14. 如何编写可与其他程序交互的程序
- 15. 如何与AIR应用程序的Windows应用程序进行交互?
- 16. 与其他应用程序交互(如单击按钮)
- 17. 使用C#winforms与窗口中的其他桌面应用程序交互
- 18. 通过PHP与C#应用程序进行交互
- 19. 如何使Java应用程序与网站进行交互
- 20. 如何将android应用程序与树莓派进行交互...?
- 21. 程序如何与其他程序交互?
- 22. 如何从android应用程序与web应用程序进行交互?
- 23. Android服务与其他应用程序的交互
- 24. 与C#的其他程序互动
- 25. 如何在我的Java应用程序中与C控制台应用程序进行交互
- 26. 应用程序在与其他应用程序交互时未被破坏?
- 27. 如何在Android应用程序的命令行中与sqlite3进行交互?
- 28. 如何与其他终端进行交互?
- 29. Eclipse Sirius如何与其他系统进行交互?
- 30. Python与其他应用程序使用子进程交谈
有趣,但道外OP的请求......(没有C++和Windows这里的东西)@pepper_chico好 –
。我回答他的问题,而不是标签。涉及到[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
似乎不是一个干净的解决方案,调用外部程序来解决问题是IMO肮脏。 – Paranaix