小编c00*_*0fd的帖子

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

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

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

在此输入图像描述

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

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

c++ windows winapi desktop-application shortcut

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

对于 UIAccess="true" 的进程,CreateProcessAsUser 失败并显示 ERROR_ELEVATION_REQUIRED

我正在尝试使用以下代码从我的服务应用程序运行用户模式进程(作为local system.)

用户模式进程的要求是在没有提升的情况下运行,但UIAccess="true"在其清单中必须能够在 Windows 8 下正确显示top-most窗口

所以我这样做(从我的服务)来运行我的用户模式进程:

//NOTE: Error checking is omitted for readability
//'dwSessionID' = user session ID to run user-mode process in
//'pUserProcPath' = L"C:\\Program Files (x86)\\Company\\Software\\user_process.exe"

HANDLE hToken = NULL;
WTSQueryUserToken(dwSessionID, &hToken);

HANDLE hToken2;
DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &hToken2);

LPVOID pEnvBlock = NULL;
CreateEnvironmentBlock(&pEnvBlock, hToken2, FALSE);

STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = L"winsta0\\default";

PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));

//ImpersonateLoggedOnUser(hToken2);   //Not necessary …
Run Code Online (Sandbox Code Playgroud)

c c++ service winapi uac

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

我可以使GetOpenFileName返回路径长于MAX_PATH吗?

我正在使用GetOpenFileName API,或者在我的情况下使用MFC的CFileDialog来打开文件,就像它在这里显示的那样(除了单个文件选择 - 即我提供了我自己的更长缓冲区m_ofn.lpstrFile.)

它工作正常,除非用户选择路径长度超过MAX_PATH - 1(或259)个字符的文件.在这种情况下会发生以下情况:

  • 在我的Windows 8.1上,它将用户选择的路径转换为古老的8.3短文件格式: "C:\TESTDE~1\NEWFOL~1"

  • 在Windows XP上,我甚至无法选择任何内容,我得到了这个:

在此输入图像描述

所以我很好奇,因为操作系统本身支持长Unicode路径,前缀\\?\(包括XP)是否有任何方法可以哄骗GetOpenFileName返回该格式的路径,而不受259个字符的限制?

c++ winapi mfc

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

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

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

windows cpu winapi cpu-usage

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

重新加载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
查看次数

如何使用 JavaScript 添加一个按钮来全屏播放 YouTube 视频?

我正在编写一个 Google Chrome 扩展程序,其中嵌入了 YouTube 视频:

<iframe id="ytplayer" type="text/html" width="640" height="360"
src="https://www.youtube.com/embed/M7lc1UVf-VE"
frameborder="0" allowfullscreen>
Run Code Online (Sandbox Code Playgroud)

然后,我在下面添加了一个按钮,允许用户单击以全屏播放该视频:

<a href="#" id="lnkFullScreen">Play full screen</a>
Run Code Online (Sandbox Code Playgroud)

这项工作是通过 JavaScript(和 jQuery)使用我在这里找到的代码完成的:

$("#lnkFullScreen").click(function(e)
{
    e.stopPropagation();
    e.preventDefault();

    var playerElement = document.getElementById("ytplayer");

    playerElement.playVideo();   //`playVideo` is undefined

    var requestFullScreen = playerElement.requestFullScreen || playerElement.mozRequestFullScreen || playerElement.webkitRequestFullScreen;
    if (requestFullScreen)
    {
        requestFullScreen.bind(playerElement)();
    }
});
Run Code Online (Sandbox Code Playgroud)

但是当我运行这段代码时,该playVideo函数undefined适用于playerElement.

知道我做错了什么吗?

附言。我希望我的播放器保留 HTML5。

javascript youtube google-chrome youtube-api google-chrome-extension

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

如果我创建了一个进程,是否意味着我将始终能够终止它?

比方说,如果我使用CreateProcessCreateProcessAsUser API 创建进程,这是否意味着无论我的主机进程在哪个上下文中运行(低权限用户,内置Guest等),调用TerminateProcess(PROCESS_INFORMATION.hProcess)将始终终止该进程?

c c++ windows winapi process

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

跨进程PostMessage、UIPI限制和UIAccess=”true”

出于安全原因,我的应用程序的 UI 模块以high 强制完整性级别运行。除了一件事之外,其中的所有内容都运行良好。为了与旧版本兼容,我需要能够让用户向 UI 模块发出命令行调用。

目前该机制的工作原理如下:

  1. Windows 资源管理器中的快捷方式调用我的模块,如下所示:

    path-to-module\module.exe -op="a, s, r"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当进程解析此命令行时,它会使用FindWindow通过其唯一的类名来module.exe定位正在运行的 UI 模块副本(或自身的另一个副本) 。然后,它使用PostMessage API 向其发送注册消息

  3. 然后,正在运行的 UI 模块(具有high完整性级别)在收到消息时会相应地对其进行处理。

问题在于,由于UI模块的运行副本具有high完整性级别,因此它无法接收来自较低完整性级别的消息,或者当Windows资源管理器运行该模块的副本以解析快捷方式命令时,它无法接收来自较低完整性级别的消息,这使得它以medium完整性级别运行等级。

为了解决这个问题,我找到了这个UIAccess标志(请参阅此处,然后向下滚动到“ UIAccess for UI Automation applications ”。)

所以我的假设是,如果我设置此标志并对我的 UI 模块进行代码签名:

在此输入图像描述

它将能够绕过我上面描述的 UIPI 限制。

它运行得很好:

在此输入图像描述

但我看到的是,PostMessage当我从以完整性级别运行的模块调用它时,我上面描述的算法中的 API 仍然失败,并显示 ERROR_ACCESS_DENIED medium

我在那里错过了什么?

c++ windows winapi sendmessage uipi

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

对于离线和在线打印机,尝试确定打印机状态始终返回 0

我的目标是确定打印机的当前状态。我找到了以下代码。这是一个稍微修改的版本,用于修复内存泄漏和错误:

#include <Winspool.h>

int GetPrinterStatus( char* szPrnName )
{
  HANDLE          hHandle = 0;   // Handle of the printer

  DWORD           dwStatus = 0;  // Printer status we should receive

  DWORD           dwSize = 0;    // Size of memory we should
                                 // allocate for PRINTER_INFO_2

  PRINTER_INFO_2* pPrnInfo2 = 0; // Structure specifies detailed
                                 // printer information

  DEVMODE         DevMode = {0}; // Structure contains information
                                 // about the device initialization
                                 // and environment of a printer

  PRINTER_DEFAULTS PrnDef = { 0, &DevMode, …
Run Code Online (Sandbox Code Playgroud)

c++ windows printing winapi windows-shell

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

VS 2017:致命错误 RC1015:无法打开包含文件“winres.h”

我刚刚下载了Visual Studio 2017并用它转换了我的基于对话框的 C++/MFC 项目(来自 Visual Studio 2008 SP1。)但是当我去Resources它时显示这个错误:

致命错误 RC1015:无法打开包含文件“winres.h”

在此处输入图片说明

以及如何解决这个问题?

mfc resource-editor visual-studio-2017

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