标题: [代码合集] 如何让BAT打开微信窗口后偏移,3个窗口叠加在一起的看不到另外2个 [打印本页]
作者: 朱科技 时间: 2022-2-20 12:14 标题: 如何让BAT打开微信窗口后偏移,3个窗口叠加在一起的看不到另外2个
下面是BAT代码:
----------------------
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
----------------------
主要是使用微信多开,但打开后3个登陆窗口都是叠加在一起的,想让他们分开展示在桌面上
作者: idwma 时间: 2022-2-20 15:43
本帖最后由 idwma 于 2022-2-20 16:26 编辑
http://www.bathome.net/redirect. ... 1741&ptid=61628
学点基础,进入练气期,很多方法都通用的改一下就能用- #&cls&@powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" &pause&exit
- 1..3|%{start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe}
- while($j -ne 3){sleep 1;if($j -ne $null){rv j};ps wechat|%{if(!($_.mainwindowtitle -eq '')){$j++}}}
- cls
-
- #Windows API
- $code=@'
- using System;
- using System.Runtime.InteropServices;
- public struct RECT{
- public uint left;
- public uint top;
- public uint right;
- public uint bottom;
- }
- public static class WinApi{
- [DllImport("user32.dll")]
- public static extern bool SetWindowPos(uint hWnd,uint hAfter,uint x,uint y,uint cx,uint cy,uint flags);
- [DllImport("kernel32.dll")]
- public static extern uint GetConsoleWindow();
- [DllImport("user32.dll")]
- public static extern bool GetWindowRect(uint hwnd, ref RECT rect);
- [DllImport("user32.dll")]
- public static extern uint GetDC(uint hwnd);
- [DllImport("gdi32.dll")]
- public static extern uint GetDeviceCaps(uint hdc, int index);
-
- public static uint[] GetScreen(){
- uint[] arr = {0,0};
- uint hdc = GetDC(0);
- arr[0] = GetDeviceCaps(hdc,118);
- arr[1] = GetDeviceCaps(hdc,117);
- return arr;
- }
- }
- '@
- Add-Type -TypeDefinition $code
-
- #获取记事本窗口句柄
- #$hwnd = (Get-Process 'notepad')[0].MainWindowHandle
- #获取窗口信息
- $rect = New-Object 'RECT'
- [void][WinApi]::GetWindowRect([int]$hwnd,[ref]$rect)
- $screen = [WinApi]::GetScreen()
- #计算水平居中坐标
- #$x = ($screen[0] - ($rect.right - $rect.left))/2
- #设置记事本水平居中
- $a=Get-Process 'WeChat'
- while($i++ -le $a.count){
- $hwnd = $a[$i-1].MainWindowHandle
- [WinApi]::SetWindowPos([int]$hwnd,$null,$i*100,$i*100,0,0,1)
- }
复制代码
作者: 5i365 时间: 2022-2-20 17:26
本帖最后由 5i365 于 2022-2-20 17:28 编辑
回复 2# idwma
感谢分享, 错开了一点距离, 但还是有重叠, 怎样水平方向上居中, 一字 等距离 排开?
作者: lancer 时间: 2022-2-20 19:12
回复 2# idwma
你这一大串代码,人家看都看不懂,就别说修改了。
作者: idwma 时间: 2022-2-20 20:15
回复 3# 5i365 - #获取记事本窗口句柄
- $a=Get-Process 'WeChat'
- $hwnd = $a[0].MainWindowHandle
- #获取窗口信息
- $rect = New-Object 'RECT'
- [void][WinApi]::GetWindowRect([int]$hwnd,[ref]$rect)
- $screen = [WinApi]::GetScreen()
- $mw=$rect.right - $rect.left
- #计算水平居中坐标
- $x=($screen[0]-$mw*$a.count)/2
- $y = ($screen[1] - ($rect.bottom - $rect.top))/2
- #设置记事本水平居中
- while($i++ -lt $a.count){
- $hwnd = $a[$i-1].MainWindowHandle
- [WinApi]::SetWindowPos([int]$hwnd,$null,$x,$y,0,0,1)
- $x+=$mw
- }
复制代码
作者: 5i365 时间: 2022-2-21 06:05
本帖最后由 5i365 于 2022-2-21 07:35 编辑
回复 5# idwma
修改了一下代码, 可读性更强些, C#代码减了些, 但是现在三个微信窗口是紧挨在一起的,二维码挨在一起, 扫时不方便, 怎样将两两窗口相接的地方分开, 空距在水平均分?- 1 .. 3 |
- foreach{
- start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
- }
- while ($j -ne 3)
- {
- sleep 1
- if ($j -ne $null) { rv j }
- ps wechat |
- ForEach{
- if (!($_.mainwindowtitle -eq ''))
- {
- $j++
- }
- }
- }
-
- Add-Type @'
- using System.Runtime.InteropServices;
- public struct RECT{
- public uint left;
- public uint top;
- public uint right;
- public uint bottom;
- }
- public static class WinApi{
- [DllImport("user32.dll")]
- public static extern bool SetWindowPos(uint hWnd,uint hAfter,uint x,uint y,uint cx,uint cy,uint flags);
- [DllImport("user32.dll")]
- public static extern bool GetWindowRect(uint hwnd, ref RECT rect);
- }
- '@
-
- #获取记事本窗口句柄
- $a = Get-Process 'WeChat'
- $hwnd = $a[0].MainWindowHandle
-
- #获取窗口信息
- $rect = New-Object 'RECT'
- [void][WinApi]::GetWindowRect([int]$hwnd, [ref]$rect)
- $screen_w = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width
- $screen_h = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Height
- $mw = $rect.right - $rect.left
-
- #计算水平居中坐标
- $x = ($screen_w - $mw * $a.count)/2
- $y = ($screen_h - ($rect.bottom - $rect.top))/2
-
- #设置记事本水平居中
- while ($i++ -lt $a.count)
- {
- $hwnd = $a[$i - 1].MainWindowHandle
- [WinApi]::SetWindowPos([int]$hwnd, $null, $x, $y, 0, 0, 1)
- $x += $mw
- }
复制代码
作者: idwma 时间: 2022-2-21 12:47
回复 6# 5i365 - #计算水平居中坐标
- $x = ($screen_w - $mw * $a.count)/($a.count-1)
- $y = ($screen_h - ($rect.bottom - $rect.top))/2
-
- #设置记事本水平居中
- while ($i++ -lt $a.count)
- {
- $hwnd = $a[$i - 1].MainWindowHandle
- [WinApi]::SetWindowPos([int]$hwnd, $null, $xx, $y, 0, 0, 1)
- $xx = $xx+$x+$mw
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |