小编c00*_*0fd的帖子

GetWindowsDirectory 和 GetSystemWindowsDirectory 之间的区别?

我正在尝试测试GetWindowsDirectoryGetSystemWindowsDirectory API 在控制台上并通过远程连接返回的不同系统路径。根据文档:

对于终端服务,GetSystemWindowsDirectory 函数检索系统 Windows 目录的路径,而 GetWindowsDirectory 函数检索每个用户专用的 Windows 目录的路径。在单用户系统上,GetSystemWindowsDirectory 与 GetWindowsDirectory 相同。

我似乎看不出有什么区别。它们都返回“C:\Windows”。

有人可以解释为什么我看不到终端服务宣布的文档吗?

编辑:这是我正在运行的一个小 C++ 代码示例:

//Check if RDP session
BOOL bRDP = FALSE;
DWORD dwSessID = -1;
::ProcessIdToSessionId(::GetCurrentProcessId(), &dwSessID);
DWORD dwSz;
LPTSTR ppBuffer = NULL;
if(WTSQuerySessionInformation(NULL, dwSessID, WTSClientProtocolType, &ppBuffer, &dwSz))
{
    bRDP = *(USHORT*)ppBuffer == 2;
    WTSFreeMemory(ppBuffer);
}

_tprintf(_T("%s\n"), !bRDP ? _T("Console Session") : _T("RDP Session"));

//Get system folder
TCHAR buff[MAX_PATH * 2];

buff[0] = 0;
GetSystemWindowsDirectory(buff, SIZEOF(buff));
_tprintf(_T("Sysfolder1: %s\n"), buff);

buff[0] = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi terminal-services

5
推荐指数
1
解决办法
7145
查看次数

是否有一种从桌面删除快捷方式的特殊方法?

我使用IShellLink接口在桌面上创建了一个快捷方式(.lnk)文件,类似于本页底部描述的代码.

所以我的假设是删除这个快捷方式我可以简单地在.lnk文件上调用DeleteFile,但显然它是不够的...如果我这样做,我得到一个看起来像这样的快捷方式文件的残余:

在此输入图像描述

但有趣的是,如果我浏览桌面文件夹中的文件,比如使用Windows资源管理器,那么.lnk文件实际上并不存在.我看到的是桌面GUI界面上的一些工件.

知道如何删除快捷方式(微软想要它的方式吗?)

c++ windows winapi desktop-application shortcut

5
推荐指数
1
解决办法
1310
查看次数

使用 DateTime 解析时如何知道时间部分是否存在

比方说,我有两个字符串,其中包含针对任意文化的任意用户提供格式的日期/时间:

string str1 = "6/19/2013";
string str2 = "6/19/2013 1 am";
Run Code Online (Sandbox Code Playgroud)

我可以通过执行以下操作来解析它们:

DateTime dt1 = DateTime.Parse(str1);
DateTime dt2 = DateTime.Parse(str2);
Run Code Online (Sandbox Code Playgroud)

但是我怎么知道时间部分是否存在并解析为 DateTime 对象?

.net c# asp.net datetime

5
推荐指数
1
解决办法
1409
查看次数

如何人为地将CPU加载到一定的百分点?

为了测试我的应用程序(检测当前的CPU使用率),我需要在CPU上设置一个人工工作负载,例如:10%,20%,30%等,最高可达100%.有没有办法做到这一点?

windows cpu winapi cpu-usage

5
推荐指数
1
解决办法
135
查看次数

如何判断文件夹是否是递归文件夹副本的子文件夹?

我正在尝试实现一个文件夹复制方法,该方法调用FindFirstFileFindNextFile在循环中,可以在任何子文件夹上递归调用自身.

为了防止明显的无限循环,我需要确保目标文件夹不是源文件夹的子文件夹.问题是如何做到这一点?我的想法是将DOS路径转换为特定于设备的路径(需要了解如何),但似乎还有更多.

所以我正在测试它的情况:

我将My Documents文件夹设置为重定向到网络共享\\Server\Home\UserA\Documents,加上该文件夹也映射到R:客户端计算机上的驱动器.这意味着所有以下文件夹:

"R:\Documents\Subfolder1"
"\\Server\Home\UserA\Documents\Subfolder1"
"C:\Users\UserA\Documents\Subfolder1"
Run Code Online (Sandbox Code Playgroud)

从技术上讲,指向相同的物理位置,即子文件夹My Documents.

问题是如何可靠地了解这一点?

c++ windows filesystems winapi

5
推荐指数
1
解决办法
458
查看次数

重新加载Chrome扩展程序后,chrome.runtime.sendMessage会从内容脚本中抛出异常

我将注入的内容脚本中的消息发送回Chrome扩展程序中的后台脚本,如下所示:

chrome.runtime.sendMessage({action: "myResult"});
Run Code Online (Sandbox Code Playgroud)

这很好,直到我重新加载我的扩展(通过转到设置 - >扩展 - >"重新加载(Ctrl + R)"为我的扩展.)

反过来,当我的后台脚本启动时,它反复调用chrome.tabs.executeScript所有打开的选项卡以编程方式重新注入我的内容脚本(正如我在这个问题中所示).

但是在我这样做之后,如果我sendMessage从我的内容脚本中调用第一行,它会抛出此异常:

错误:连接到扩展名my_extension_id时出错

知道为什么会这样吗?

javascript google-chrome google-chrome-extension content-script

5
推荐指数
1
解决办法
2029
查看次数

如何使用复选标记正确测量和显示所有者绘制的上下文菜单项?

我只是想在我的上下文菜单中添加小颜色样本(通过TrackPopupMenu API 显示.)这是我想要实现的Photoshop版本:

在此输入图像描述

据我所知,默认菜单不支持它.顺便说一句,上面的样本(没有颜色样本)是通过这样做生成的:

MENUITEMINFO mii = {0};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STATE | MIIM_STRING;
mii.fType = MFT_STRING;
mii.wID = ID_1_MARKER_01 + m;
mii.dwTypeData = L"Marker";
mii.cch = TSIZEOF(L"Marker");
mii.fState = m == 1 ? MFS_CHECKED : MFS_ENABLED;
if(m == 2)
    mii.fState |= MFS_GRAYED;

VERIFY(::InsertMenuItem(hMenu, ID_1_BEFORE, FALSE, &mii));
Run Code Online (Sandbox Code Playgroud)

所以我发现我需要使用MFT_OWNERDRAW样式自己绘制菜单项,但这就​​是问题的开始.

我更改了代码以显示我的菜单:

MENUITEMINFO mii = {0};
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STATE;
mii.fType = MFT_OWNERDRAW;
mii.wID = ID_1_MARKER_01 + m; …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi mfc contextmenu

5
推荐指数
1
解决办法
1087
查看次数

如何从std :: string获取可写C缓冲区?

我正在尝试将我的代码从使用MFC移植CStringstd::stringMicrosoft Windows平台.而且我对某些事感到好奇.在以下示例中说:

CString MakeLowerString(LPCTSTR pStr)
{
    CString strLower = pStr ? pStr : L"";
    CharLower(strLower.GetBuffer());        //Use WinAPI
    strLower.ReleaseBuffer();

    return strLower;
}
Run Code Online (Sandbox Code Playgroud)

我用strLower.GetBuffer()获取要传递给CharLower API 的可写缓冲区.但我没有看到类似的方法std::string.

我错过了什么吗?如果是这样,您将如何覆盖上述方法std::string

c++ windows mfc stdstring

5
推荐指数
2
解决办法
2612
查看次数

ASM x64 中 40h REX 操作码的目的是什么?

我一直试图了解0x40ASM x64 指令的REX 操作码的用途。例如,在 Kernel32.dll 的这个函数序言中:

在此处输入图片说明

如您所见,它们push rbx用作:

40 53      push        rbx 
Run Code Online (Sandbox Code Playgroud)

但仅使用53h操作码(不带前缀)也会产生相同的结果:

在此处输入图片说明

根据此站点,REX 前缀的布局如下:

在此处输入图片说明

所以40h操作码似乎没有做任何事情。有人可以解释它的目的吗?

windows 64-bit x86-64 opcode disassembly

5
推荐指数
1
解决办法
1926
查看次数

如何在VS2017中禁用“警告MSB8051:不建议使用针对Windows XP的支持”?

由于大约是Visual Studio 2017的最新更新之一,因此我在构建MFC项目期间开始收到以下警告:

1> C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ VC \ VCTargets \ Platforms \ x64 \ PlatformToolsets \ v141_xp \ Toolset.targets(39,5):警告MSB8051:支持定向Windows XP已过时,以后的Visual Studio版本中将不再提供。有关更多信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2023588

如何禁用此警告?

这是项目配置:

在此处输入图片说明

mfc visual-studio-2017

5
推荐指数
1
解决办法
1057
查看次数