我正在尝试测试GetWindowsDirectory和GetSystemWindowsDirectory 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) 我使用IShellLink接口在桌面上创建了一个快捷方式(.lnk)文件,类似于本页底部描述的代码.
所以我的假设是删除这个快捷方式我可以简单地在.lnk文件上调用DeleteFile,但显然它是不够的...如果我这样做,我得到一个看起来像这样的快捷方式文件的残余:

但有趣的是,如果我浏览桌面文件夹中的文件,比如使用Windows资源管理器,那么.lnk文件实际上并不存在.我看到的是桌面GUI界面上的一些工件.
知道如何删除快捷方式(微软想要它的方式吗?)
比方说,我有两个字符串,其中包含针对任意文化的任意用户提供格式的日期/时间:
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 对象?
为了测试我的应用程序(检测当前的CPU使用率),我需要在CPU上设置一个人工工作负载,例如:10%,20%,30%等,最高可达100%.有没有办法做到这一点?
我正在尝试实现一个文件夹复制方法,该方法调用FindFirstFile并FindNextFile在循环中,可以在任何子文件夹上递归调用自身.
为了防止明显的无限循环,我需要确保目标文件夹不是源文件夹的子文件夹.问题是如何做到这一点?我的想法是将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.
问题是如何可靠地了解这一点?
我将注入的内容脚本中的消息发送回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
我只是想在我的上下文菜单中添加小颜色样本(通过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) 我正在尝试将我的代码从使用MFC移植CString到std::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?
我一直试图了解0x40ASM x64 指令的REX 操作码的用途。例如,在 Kernel32.dll 的这个函数序言中:
如您所见,它们push rbx用作:
40 53 push rbx
Run Code Online (Sandbox Code Playgroud)
但仅使用53h操作码(不带前缀)也会产生相同的结果:
根据此站点,REX 前缀的布局如下:
所以40h操作码似乎没有做任何事情。有人可以解释它的目的吗?
由于大约是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。
如何禁用此警告?
这是项目配置:
windows ×6
c++ ×5
winapi ×5
mfc ×3
.net ×1
64-bit ×1
asp.net ×1
c# ×1
contextmenu ×1
cpu ×1
cpu-usage ×1
datetime ×1
disassembly ×1
filesystems ×1
javascript ×1
opcode ×1
shortcut ×1
stdstring ×1
x86-64 ×1