移動Windows窗口的小程序

下載請到:

https://github.com/danteliujie/smallTools/blob/master/MoveWindow.exe

基於FindWindow和SetWindowPos實現, 其中的flag設置請參考: 

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos

代碼如下:

#include "Windows.h"
#include <stdlib.h>
#include <iostream> 
#include <string>

int Hex2Int(std::string s)
{
	return std::stoul(s, nullptr, 16);
}
void printBasicUsing() {
	printf("MoveWindow.exe tag [x y] [w h] [flag]\r\n");
	printf("Flags:\r\n");
	printf("\tSWP_ASYNCWINDOWPOS  0x4000\r\n");
	printf("\tSWP_DEFERERASE      0x2000\r\n");
	printf("\tSWP_NOSENDCHANGING  0x0400\r\n");
	printf("\tSWP_NOOWNERZORDER   0x0200\r\n");
	printf("\tSWP_NOCOPYBITS      0x0100\r\n");
	printf("\tSWP_HIDEWINDOW      0x0080\r\n");
	printf("\tSWP_SHOWWINDOW      0x0040\r\n");
	printf("\tSWP_FRAMECHANGED    0x0020\r\n");
	printf("\tSWP_NOACTIVATE      0x0010\r\n");
	printf("\tSWP_NOREDRAW        0x0008\r\n");
	printf("\tSWP_NOZORDER        0x0004\r\n");
	printf("\tSWP_NOMOVE          0x0002\r\n");
	printf("\tSWP_NOSIZE          0x0001\r\n");
	printf("More Info:\r\n");
    printf("\thttps://blog.csdn.net/danteLiujie/article/details/103550505\r\n");
}
int main(int argc, char* argv[])
{
	if(argc <= 3){
		printBasicUsing();
		return -1;
	}
	HWND hwndMyWindow = NULL;
	hwndMyWindow = FindWindowExA(NULL, NULL, argv[1], NULL);
	if (hwndMyWindow == NULL) {
		hwndMyWindow = FindWindowEx(NULL, NULL, MAKEINTATOM(Hex2Int(argv[1])), NULL);
	}
	printf("FindWindowEx return 0x%08x\r\n", hwndMyWindow);
	if (hwndMyWindow != NULL) {
		int x = 0;
		int y = 0;
		int w = 300;
		int h = 300;
		int flag = SWP_ASYNCWINDOWPOS | SWP_FRAMECHANGED | SWP_SHOWWINDOW;
		if (argc > 3) {
			x = std::stoul(argv[2]);
			y = std::stoul(argv[3]);
		}
		if (argc > 5) {
			w = std::stoul(argv[4]);
			h = std::stoul(argv[5]);
		}
		if (argc > 6) {
			flag = std::stoul(argv[6]);
		}
		SetWindowPos(hwndMyWindow, HWND_TOP, 
			x, y, w, h, flag);
	}
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章