C怎么把一个已经打开的程序前置(通过进程),或者绑定该进程,可以做简单操作

moling 发布于 2014/09/13 09:01
阅读 392
收藏 1

写一个程序可以读取进程,找到要操作的进程(比如firefox),将其前置,并且绑定,不允许外面其他操作,可以用本程序对其简单操作,如输入url,按F5刷新之类操作;

比如我打开了一个浏览器(firefox),接着又打开了一些其他程序,浏览器就被覆盖掉了,我想通过这个程序把浏览器显示到最前面,就和在任务栏激活一样,显示到我看到的最前面,最好还可以绑定上,只允许这个程序对它操作,这程序释放它之前,不允许人为的输入url什么的,然后可以在程序里写一些功能,像输入url了、刷新了什么的可以去操作它,

就是说实现一个脚本代替人去做这些操作;可以接受该浏览器允许的快捷键

加载中
0
李不假
把问题描述得更清楚些,我来帮你解答。
0
自主创新
自主创新
获取句柄,最小化有对应api,其他操作要汇编或者模拟操作了
0
羊驼君
羊驼君
这明显是要做一个非法勾当的恶意程序,用心不良。。
0
中山野鬼
中山野鬼
这个不是c的事情。哈。你需要看对应的操作系统的桌面的api。
0
DavidWTF
DavidWTF
在windows 下对浏览器窗口发消息可以实现,地址栏也是子窗口,你也可以发消息输入。不许人为输入的话,你需要用写hook函数,把键盘和鼠标输入拦截了。
0
m
magiclogy

以前写的小程序里的。需要<Windows.h>的<tchar.h>

窗口置顶

void make_window_topmost(HWND window)
{
	RECT rect;
	GetWindowRect(window, &rect);
	SetWindowPos(window, HWND_TOPMOST, rect.left, rect.top, 
		rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW);
}
按键操作
void keypress_in_window(HWND window, DWORD keycode)
{
	PostMessage(window, WM_CHAR, keycode, 0);
	Sleep(10);
}

void keyup_in_window(HWND window, DWORD keycode)
{
	PostMessage(window, WM_KEYUP, keycode, 0);
	Sleep(10);
}

void keydown_in_window(HWND window, DWORD keycode)
{
	PostMessage(window, WM_KEYDOWN, keycode, 0);
	Sleep(10);
}

单击

WPARAM make_point(SHORT x, SHORT y) 
{
	return  (WPARAM)y * 0x10000 + (WPARAM)x;
}

void click_in_window(HWND window, SHORT x, SHORT y)
{
	PostMessage(window, WM_LBUTTONDOWN, MK_LBUTTON, make_point(x, y));
	Sleep(100);
	PostMessage(window, WM_LBUTTONUP, 0, make_point(x, y));
	Sleep(100);
}


之前做的是根据窗口的标题查找的:

struct find_window_context
{
	LPTSTR title;
	HWND window;
};

BOOL __stdcall find_window_by_title_cb(HWND window, LPARAM context)
{
	find_window_context &c = *(find_window_context *)context;
	TCHAR name[260];
	int length;
	length = GetWindowText(window, name, 260);

	if (length > 0 && length < 260) {
		if (_tcscmp(name, (LPTSTR)c.title) == 0) {
			c.window = window;
			return FALSE;
		}
	}

	return TRUE;
}

HWND find_window_by_title(LPTSTR title) 
{
	find_window_context context;
	context.title = title;
	context.window = NULL;
	EnumChildWindows(GetDesktopWindow(), find_window_by_title_cb, (LPARAM)&context);
	return (context.window);
}



0
m
moling

引用来自“magiclogy”的评论

以前写的小程序里的。需要<Windows.h>的<tchar.h>

窗口置顶

void make_window_topmost(HWND window)
{
	RECT rect;
	GetWindowRect(window, &rect);
	SetWindowPos(window, HWND_TOPMOST, rect.left, rect.top, 
		rect.right - rect.left, rect.bottom - rect.top, SWP_SHOWWINDOW);
}
按键操作
void keypress_in_window(HWND window, DWORD keycode)
{
	PostMessage(window, WM_CHAR, keycode, 0);
	Sleep(10);
}

void keyup_in_window(HWND window, DWORD keycode)
{
	PostMessage(window, WM_KEYUP, keycode, 0);
	Sleep(10);
}

void keydown_in_window(HWND window, DWORD keycode)
{
	PostMessage(window, WM_KEYDOWN, keycode, 0);
	Sleep(10);
}

单击

WPARAM make_point(SHORT x, SHORT y) 
{
	return  (WPARAM)y * 0x10000 + (WPARAM)x;
}

void click_in_window(HWND window, SHORT x, SHORT y)
{
	PostMessage(window, WM_LBUTTONDOWN, MK_LBUTTON, make_point(x, y));
	Sleep(100);
	PostMessage(window, WM_LBUTTONUP, 0, make_point(x, y));
	Sleep(100);
}


之前做的是根据窗口的标题查找的:

struct find_window_context
{
	LPTSTR title;
	HWND window;
};

BOOL __stdcall find_window_by_title_cb(HWND window, LPARAM context)
{
	find_window_context &c = *(find_window_context *)context;
	TCHAR name[260];
	int length;
	length = GetWindowText(window, name, 260);

	if (length > 0 && length < 260) {
		if (_tcscmp(name, (LPTSTR)c.title) == 0) {
			c.window = window;
			return FALSE;
		}
	}

	return TRUE;
}

HWND find_window_by_title(LPTSTR title) 
{
	find_window_context context;
	context.title = title;
	context.window = NULL;
	EnumChildWindows(GetDesktopWindow(), find_window_by_title_cb, (LPARAM)&context);
	return (context.window);
}



好像是这样的,但是我这边HWND find_window_by_title(LPTSTR title) 该传给什么值,具体一点,比如是“firefox”吗?
返回顶部
顶部