改變窗口的大小和位置(关于MoveWindow()或SetWindowPos())
SetWindowPos()函數使用更靈活,多用於只修改控件位置而大小不變或只修改大小而位置不變的情況:
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一個參數我不會用,一般設為NULL;
x、y控件位置;cx、cy控件寬度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一個參數;
SWP_NOMOVE:忽略x、y,維持位置不變;
SWP_NOSIZE:忽略cx、cy,維持大小不變;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_BUTTON1 ); //獲取控件指針,IDC_BUTTON1為控件ID號
pWnd->SetWindowPos( NULL,50,80 ,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按鈕移到窗口的(50,80)處
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); / /把編輯控件的大小設為(100,80),位置不變
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //編輯控件的大小和位置都改變
namespace WindowMover
{
using System.Windows.Forms;
static class Logic
{
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
public static void Move()
{
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Process[] processes = Process.GetProcesses(".");
foreach (var process in processes)
{
var handle = process.MainWindowHandle;
var form = Control.FromHandle(handle);
if (form == null) continue;
SetWindowPos(handle, 0, 0, 0, form.Bounds.Width, form.Bounds.Height, SWP_NOZORDER | SWP_SHOWWINDOW);
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; //For DllImport
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Get a handle to an application window.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("USER32.DLL")]
public static extern bool MoveWindow(
IntPtr hwnd,
int x,
int y,
int nWidth,
int nHeight,
bool bRepaint
);
bool rtvl;
private void button1_Click(object sender, EventArgs e)
{
//移動目前執行視窗到的位置,並改變其寬高為800
IntPtr firefoxHandle = FindWindow(null, "Google - Mozilla Firefox");
SetForegroundWindow(firefoxHandle);
rtvl = MoveWindow(firefoxHandle, 0, 0, 800, 800, true);
//輸入搜尋字串 與Enter
SendKeys.Send("Google Apps");
SendKeys.Send("{ENTER}");
// Verify that Firefox is a running process.
if (firefoxHandle == IntPtr.Zero)
{
MessageBox.Show("Firefox Google頁面未開啟");
return;
}
}
}
} 另: 利用 WebBrowser 達到Facebook自動登入
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。