首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据屏幕形状或停靠状态自动更改Windows 7任务栏位置

根据屏幕形状或停靠状态自动更改Windows 7任务栏位置
EN

Stack Overflow用户
提问于 2012-09-14 23:32:48
回答 2查看 5.2K关注 0票数 10

是否可以使用VBScript或任何其他编程语言:

  • 检测屏幕形状或计算机是否停靠。
  • 更改Windows任务栏位置

我想要达到的目标:

我的笔记本电脑有一个14英寸的宽屏:相当宽,但不是很高。我觉得把Windows任务栏放在屏幕的左边是最方便的,因为我可以节省宽度,而不是垂直空间。

然而,当我在办公室,我的电脑坐在一个对接站,并连接到一个漂亮的大方形屏幕。在这里,我更喜欢任务栏的默认位置,即底部。

当然,我知道如何在任务栏属性中手动切换两个任务栏位置。但是我每天做几次这样的事情,这是相当烦人的。我的问题是:我能自动更改任务栏的位置吗?

例如,在启动时(或从休眠中醒来),将运行一个脚本,该脚本可以检测到以下两种情况:

  • 屏幕形状比4:3高吗?(或任何数目)
  • 计算机停靠在停靠站了吗?

如果是,将任务栏放在底部,其他放在左边。

有人知道怎么做还是能让我走上正轨?还是已经有一个实用工具可以做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2013-01-16 14:52:39

//正常补充为什么在别人的机器上省略了这不是一个好主意

在这里,脚本语言可能不是一个好的选择,您需要一些二叠纪

当您收到消息时,您需要根据监视器的分辨率计算任务栏的所需方向。然后使用RmShutdown关闭Windows。

//undocumented行为开始,随时可能中断

任务栏对接边存储在字节13中(作为来自APPBARDATA的ABE值之一),位置以win32 直角的形式存储在字节25-40中。可以在重新启动资源管理器之前修改该设置。

//无文档的行为结束

示例代码(https://github.com/jiangsheng/Samples/tree/master/AppBarTest上的完整源代码):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//returns the process id and create time for the oldest explorer.exe 
RM_UNIQUE_PROCESS GetExplorerApplication()
{
    RM_UNIQUE_PROCESS  result={0};
    DWORD bytesReturned=0;
    DWORD processIdSize=4096;
    std::vector<DWORD> processIds;
    processIds.resize(1024);
    EnumProcesses(processIds.data(),processIdSize,&bytesReturned);
    while(bytesReturned==processIdSize)
    {
        processIdSize+=processIdSize;
        processIds.resize(processIdSize/4);
        EnumProcesses(processIds.data(),processIdSize,&bytesReturned);
    }

    std::for_each(processIds.begin(), processIds.end(), [&result] (DWORD processId) {
         HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
                                   FALSE, processId);
         if (hProcess) {
            std::wstring imageName;
            imageName.resize(4096);
            if(GetProcessImageFileName (hProcess,(LPWSTR)imageName.data(),4096)>0)
            {
                if(wcscmp(L"explorer.exe",PathFindFileName(imageName.data()))==0)
                {
                    //this is assmuing the user is not running elevated and won't see explorer processes in other sessions
                    FILETIME ftCreate, ftExit, ftKernel, ftUser;
                    if (GetProcessTimes(hProcess, &ftCreate, &ftExit,&ftKernel, &ftUser))
                    {
                        if(result.dwProcessId==0)
                        {
                            result.dwProcessId=processId;
                            result.ProcessStartTime=ftCreate;
                        }
                        else if(CompareFileTime(&result.ProcessStartTime,&ftCreate)>0)
                        {
                            result.dwProcessId=processId;
                            result.ProcessStartTime=ftCreate;
                        }
                    }
                }
            }
            CloseHandle(hProcess);
         }
    });
    return result;
}
    //taskbar position calculating code omitted
    DWORD dwSession=0;
    WCHAR szSessionKey[CCH_RM_SESSION_KEY+1] = { 0 };
    DWORD dwError = RmStartSession(&dwSession, 0, szSessionKey);
    if (dwError == ERROR_SUCCESS) {
        RM_UNIQUE_PROCESS rgApplications[1]={GetExplorerApplication()};
        dwError=RmRegisterResources(
            dwSession,0,NULL,1,rgApplications,0,NULL);
        DWORD dwReason;
        UINT nProcInfoNeeded;
        UINT nProcInfo = 10;
        RM_PROCESS_INFO rgpi[10];
        dwError = RmGetList(dwSession, &nProcInfoNeeded,
                       &nProcInfo, rgpi, &dwReason);
        if(dwReason==RmRebootReasonNone)//now free to restart explorer
        {
            RmShutdown(dwSession,RmForceShutdown,NULL);//important, if we change the registry before shutting down explorer will override our change
            //using undocumented setting structure, could break any time
            //edge setting is stored at HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2!Settings
            HKEY hKey={0};
            DWORD result=0;
            result=::RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StuckRects2"),
                    0, KEY_READ|KEY_WRITE, &hKey) ;
            if (result== ERROR_SUCCESS)
            {
                std::vector<BYTE> data;
                data.resize(256);
                TCHAR settingValue[]= _T("Settings");
                DWORD dwKeyDataType=0;
                DWORD dwDataBufSize=data.size();
                result=::RegQueryValueEx(hKey,settingValue, NULL, &dwKeyDataType,
                    (LPBYTE) data.data(), &dwDataBufSize);
                while(ERROR_MORE_DATA==result)
                {
                    data.resize(256+data.size());
                    dwDataBufSize=data.size();
                    result=::RegQueryValueEx(hKey,settingValue, NULL, &dwKeyDataType, 
                        (LPBYTE) data.data(), &dwDataBufSize);
                }
                data.resize(dwDataBufSize);
                if(result==ERROR_SUCCESS)
                {
                    switch ( dwKeyDataType )
                    {
                        case REG_BINARY:
                            if(data.size()==40)
                            {
                                BYTE taskbarPosition=data[12];
                                taskbarPosition=edge;
                                data[12]=taskbarPosition;
                                RECT* taskbarRect=(RECT*)&data[24];
                                CopyRect (taskbarRect,&abd.rc);
                                result=::RegSetValueEx(hKey,settingValue,0,REG_BINARY,(LPBYTE) data.data(), dwDataBufSize);
                            }
                            break;
                    }
                }
                ::RegCloseKey( hKey );
            }
            RmRestart (dwSession,0,NULL);
        }
    }
    RmEndSession(dwSession);
票数 8
EN

Stack Overflow用户

发布于 2013-01-16 16:49:02

您可以通过简单的批处理或脚本来完成此操作。根据屏幕的当前分辨率设置注册表值以定位任务栏(如果在停靠时会更高),然后重新启动explorer.exe。因此,例如在屏幕左侧设置任务栏的批处理(假设您在d:\ bottom.reg文件夹中有该文件)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reg add d:\scripts\Bottom.reg
@echo off taskkill /f /IM explorer.exe
explorer.exe

bottom.reg的内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2]
"Settings"=hex:28,00,00,00,ff,ff,ff,ff,02,00,00,00,03,00,00,00,3e,00,00,00,2e,\
  00,00,00,00,00,00,00,82,04,00,00,80,07,00,00,b0,04,00,00

对于left.reg

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2]
"Settings"=hex:28,00,00,00,ff,ff,ff,ff,02,00,00,00,00,00,00,00,3e,00,00,00,2e,\
  00,00,00,00,00,00,00,00,00,00,00,3e,00,00,00,b0,04,00,00

您将有一些闪烁,但由于您将这样做,当您启动窗口,这不会是一个问题,我想。我在Windows 7上测试了这个。

编辑:制作了一个vbscript,它基于屏幕分辨率做同样的事情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HKEY_CURRENT_USER = &H80000001
Set WshShell = CreateObject("WScript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set ObjRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

'Get curr. user name
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")
For Each objItem in colItems
  strCurrentUserName = objItem.UserName
Next

Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor where DeviceID = 'DesktopMonitor1'",,0) 
For Each objItem in colItems 
  intHorizontal = objItem.ScreenWidth 
  intVertical = objItem.ScreenHeight 
Next 

bottom = Array(&H28,&H00,&H00,&H00,&Hff,&Hff,&Hff,&Hff,&H02,&H00,&H00,&H00,&H03,&H00,&H00,&H00,&H3e,&H00,&H00,&H00,&H2e,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H82,&H04,&H00,&H00,&H80,&H07,&H00,&H00,&Hb0,&H04,&H00,&H00)
left_   = Array(&H28,&H00,&H00,&H00,&Hff,&Hff,&Hff,&Hff,&H02,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H3e,&H00,&H00,&H00,&H2e,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H3e,&H00,&H00,&H00,&Hb0,&H04,&H00,&H00)

if intHorizontal >= 1920 then
  regdata = bottom
else
  regdata = left_
end if

ObjRegistry.SetBinaryValue HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2\", "Settings", regdata

'Restart user shell
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'Explorer.exe'")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
  wscript.echo colProperties
    If strUserDomain & "\" & strNameOfUser = strCurrentUserName then
    wscript.echo "restarting"
        objProcess.Terminate()
    end if
Next
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12435503

复制
相关文章
Excel按列排序和按行排序
文章背景:Excel二维表中记录着多行多列的数据,有时需要按行或按列排序,使数据更加清晰、易读。下面分别对按列排序和按行排序进行介绍。
Exploring
2022/08/10
3.2K0
Excel按列排序和按行排序
BI技巧丨按列排序
PowerBI本身内置的排序方式,是遵循ASCII国际标准的方式,这就导致了中文的默认排序对于很多小伙伴来说并不友好。
PowerBI丨白茶
2022/11/12
3.5K0
BI技巧丨按列排序
使用 Python 按行和按列对矩阵进行排序
假设我们采用了一个输入的 MxM 矩阵。我们现在将使用嵌套的 for 循环对给定的输入矩阵进行逐行和按列排序。
很酷的站长
2023/02/22
6.2K0
使用 Python 按行和按列对矩阵进行排序
【R语言】数据框按两列排序
我相信大家经常会使用Excel对数据进行排序。有时候我们会按照两个条件来对数据排序。假设我们手上有下面这套数据,9个人,第二列(score)为他们的考试成绩,第三列(code)为对应的评级。80分以上为优秀,60-80为良,60以下为差。
生信交流平台
2022/09/21
2.3K0
【R语言】数据框按两列排序
Java 二维数组按指定列排序(一)
private static void printArr(int[][] nums) {
用户7886150
2020/12/12
2.1K0
java中的sort排序算法_vba中sort按某列排序
C++中提供了sort函数,可以让程序员轻松地调用排序算法,JAVA中也有相应的函数。
全栈程序员站长
2022/09/21
2.3K0
Python-科学计算-pandas-22-按某列排序
系统:Windows 10 编辑器:JetBrains PyCharm Community Edition 2018.2.2 x64 pandas:1.1.5
zishendianxia
2021/09/29
1.5K0
underscore.js的排序扩展。 倒序和多列排序
   // Sort the object's values by a criterion produced by an iterator.     _.sortBy = function (obj, iterator, context) {         iterator = lookupIterator(iterator, context);         return _.pluck(_.map(obj, function (value, index, list) {             r
申君健
2018/09/21
3K0
shell按列合并文件
cat命令可以按行依次合并两个文件。但有时候我们需要按列合并多个文件,也就是将每一个文件的内容作为单独的的几列,这个时候可以用paste来按列合并多个文件。 用法: paste file1 file2 ...
生信编程日常
2020/06/28
2.9K0
Python 实现多 Sheet 表合并、多工作簿合并、一表按列拆分
作者:黄伟 来源:杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(WeChat ID:Hc220066)
AI算法与图像处理
2019/11/13
11K0
史上最速解决:Power BI由"按列排序"导致的"循环依赖"
当我们在处理这样的数据时,想要进行排列时,会发现它并没有按照我们预想的按照1……9,10,11,12……这样的排序:
陈学谦
2021/12/08
4.4K0
史上最速解决:Power BI由"按列排序"导致的"循环依赖"
自定义多列排序:C++/Java实现
  有些时候,我们在编程中会遇到多列排序的需求。假如在execle,这事儿就太easy了。不过没办法,现在就需要你用Java或者C++实现这样一个功能!
云海谷天
2022/08/09
5810
自定义多列排序:C++/Java实现
CSS——多列
多列属性可以将文本设计成像报纸杂志那种多列排版的布局,类似于Microsoft Word中的段落分栏功能。
Html5知典
2019/11/26
1.2K0
Bootstrap列排序
在Bootstrap中,列排序(Column Ordering)是一种布局技术,允许我们在不同屏幕尺寸下重新排列列的顺序。这对于在响应式设计中调整布局非常有用。
堕落飞鸟
2023/05/17
1K0
pandas按行按列遍历Dataframe的几种方式
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。 iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。 示例数据
kirin
2021/04/30
7.2K0
map按key和按value排序
看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 96 jack 70 Tom 70 smith 67 从低到高 smith 67 Tom 70 jack 70 peter 96 1、按照value排序 2、可以递增排序和递减排序 3、保证排序的稳定性 golang map按key排序 //golang的map不保证有序
李海彬
2018/03/27
4.7K0
map按key和按value排序
看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 96 jack 70 Tom 70 smith 67 从低到高 smith 67 Tom 70 jack 70 peter 96 1、按照value排序 2、可以递增排序和递减排序 3、保证排序的稳定性 golang map按key排序 //golang的map不保证有序
李海彬
2018/03/27
3.2K0
hastable按值排序
最近做了一个项目,需要对一个2维数组的值进行排序然后再取出对应的Key值。开始是用HashTable做的,不过HashTable中的排序只是对Key进行排序,如果想对值进行排序得用其它办法。下面我就把这种方法说下:
codeniu
2022/02/25
1.3K0
python 按中文排序
安装中文库 sudo apt-get update sudo apt-get install language-pack-zh-hans-base sudo dpkg-reconfigure locales 使用 import locale locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF8') cmp = locale.strcoll courses.sort(lambda x, y: cmp(x.course_name, y.course_name)) 测试
py3study
2020/01/06
1.7K0
怎样能自动按列01 列02 最大为列99,来设置列标题?
前几天在Python最强王者交流群有个粉丝咨询了这个问题:获取到数据表的列数比较简单,一般不超过99列,怎样能自动按列01 列02 最大为列99,来设置列标题?一劳永逸,以后这类场景都这样套用。
前端皮皮
2022/12/19
1.1K0
怎样能自动按列01 列02  最大为列99,来设置列标题?

相似问题

Grails:如何使用Server按Grails查询中的多列排序

13

按多列排序

20

按多列排序

20

按多列排序

10

按多列排序

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文